Outils pour utilisateurs

Outils du site


Panneau latéral

Mycélium

Documentation

Travaux

Membres

Wiki

documentation:technique:vpn:client

Client VPN

Cette page décrit comment configurer un nouveau client VPN, de sa machine à notre serveur.

Voici les différentes étapes :

  1. Générer un certificat et une clé privée sur le poste du client
  2. Signer le certificat avec notre CA, et le retourner
  3. Attribuer une IP fixe au client dans le serveur OpenVPN
  4. Configurer OpenVPN sur le poste du client

Avant de vous lancer, il faut définir ces variables et les remplacer dans cette page :

  • NOM_CLIENT : le nom d'adhérent·e, suivi optionellement d'un nom au choix. Par exemple, pour l'adhérent⋅e camille : camille, camille-maison, camille-autre.
  • IP_CLIENT : l'adresse IP qu'on va assigner à ce client VPN, dans notre plage IP (80.67.162.x).

Générer un certificat et une clé privée

Cette étape est à réaliser sur le poste du client.

Sous Debian Stretch et plus

Pré-requis

Assurez-vous d'avoir les paquets suivant d'installés :

Création du certificat et de la clé

  1. Lancer un terminal. Avec votre compte utilisateur, placez-vous dans un répertoire de votre choix (par exemple dans ~/Documents/Mycélium/VPN)
  2. Initialiser le dossier qui contiendra les certificats, avec easy-rsa : make-cadir ./client-ca
  3. Aller dans ce dossier pour la suite des opérations : cd ./client-ca
  4. Initialiser le dossier et l'environnement Easy-RSA : ./easyrsa init-pki
  5. Créer le certificat et la clé du client : ./easyrsa gen-req NOM_CLIENT (on peut éventuellement ajouter l'option nopass pour ne pas chiffrer la clé privée, dans le cas d'un démarrage automatique d'OpenVPN sans mot de passe)
  6. Une phrase de passe vous est demandée. Consignez-la, elle servira à chaque connexion au serveur VPN.
  7. Puis validez la suite des informations demandées.

À la fin, on se retrouve avec un dossier pki/, qui contient :

  • la clé privée du client : pki/private/NOM_CLIENT.key
  • la requête de signature de certificat du client : pki/reqs/NOM_CLIENT.req

Signer le certificat du client

Cette étape est à réaliser sur russule, où se trouve notre CA intermédiaire pour le VPN.

  1. Copier la requête de signature de certificat du client vers russule via le compte certificats : scp pki/reqs/NOM_CLIENT.req certificats@russule:/tmp/
  2. Se connecter en tant que certificats et aller dans le dossier où se trouve l'environnement Easy-RSA :
    ssh certificats@russule
    cd ~/openvpn
  3. Importer la requête de signature de certificat du client et la signer :
    ./easyrsa import-req /tmp/NOM_CLIENT.req NOM_CLIENT
    ./easyrsa sign-req client NOM_CLIENT

Vous aurez besoin du mot de passe de notre Certificat d'Autorité, il est situé dans le dépot Git mycelium-pass. Référez-vous à son README ou à Gestion des secrets au sein de Mycélium au besoin.

À la fin, le fichier pki/issued/NOM_CLIENT.crt a été créé, nous allons le rappatrier sur le client.

Récupérer le certificat du client signé

De retour sur le poste du client, dans le dossier où a été généré le certificat et la clé :

  1. Créer le dossier qui contiendra les certificats signés : mkdir pki/signed
  2. Rappatrier la requête de certificat signée :
scp certificats@russule:~/openvpn/pki/issued/NOM_CLIENT.crt pki/signed/

Le certificat du client est désormais créé et se compose de :

  • la clé privée : pki/private/NOM_CLIENT.key
  • le certificat : pki/signed/NOM_CLIENT.crt

Attribuer une IP fixe au client

Cette étape est à réaliser sur le serveur VPN.

Créer un fichier de configuration contenant l'adresse IP à acquérir par le client VPN, dans un fichier dédié :

echo "ifconfig-push IP_CLIENT 255.255.255.192" > /etc/openvpn/server/ccd/NOM_CLIENT

TODO Discuter et définir d'une façon d'assigner les adresses IPs

TODO Vérifier ces étapes après la mise en place de notre bloc d'adresse IPs publiques

TODO Définir également l'adresse IPv6

Générer le profil de configuration OVPN

Au préalable, il vous faudra récupérer le certificat de notre CA ainsi que la clé privée partagée du serveur. Ces fichiers se trouvent notamment sur russule :

  1. /​etc/​openvpn/​server/​ca.crt
  2. /​etc/​openvpn/​server/​ta.key

Puis, sur le poste du client, dans le dossier où se trouve les certificats :

  1. Récupérer le script create_ovpn.sh qui se trouve dans le dossier scripts/openvpn/ du dépôt Git mycélium
  2. Générer le profil avec :
    ./create_ovpn.sh ca.crt ta.key pki/signed/client.crt pki/private/client.key > NOM_CLIENT.ovpn

Configurer OpenVPN sur le client

Sous Gnome avec NetworkManager

Pré-requis sous Debian :

On peut ensuite ajouter une nouvelle connexion de type OpenVPN et importer le profil généré précédemment.

Comme service avec systemd

Pré-requis sous Debian :

On peut ensuite copier le profil généré précédemment dans le dossier /etc/openvpn/client en le renommant en NOM_CLIENT.conf.

Le client OpenVPN peut recevoir les informations liées au serveur DNS, mais n'est pas capable nativement de les appliquer. Il faudra pour cela par exemple passer par un script up. Plusieurs solutions sont proposées sur le wiki d'Arch Linux notamment.

Démarrer le tunnel manuelement

Si vous vous connectez au VPN manuellement, sur demande :

sudo systemctl start openvpn-client@NOM_CLIENT.service
sudo systemd-tty-ask-password-agent

Établir le tunnel au démarrage de la machine

Si vous souhaitez que la connexion au VPN soit amorcée au démarrage de la machine, il vous faudra inscrire le mot de passe en dur dans un fichier.

Dans le fichier de configuration ovpn /etc/openvpn/client/NOM_CLIENT.conf, ajoutez la ligne suivante en tout début de fichier :

askpass NOM_CLIENT.auth

Avec votre éditeur favori, créez le fichier /etc/openvpn/client/NOM_CLIENT.auth qui ne contiendra que votre mot de passe.

Réglez les permissions pour que ces fichiers ne soient lisibles que par root.

chmod 600 /etc/openvpn/client/NOM_CLIENT.*

Puis activez et démarrez l'unité :

sudo systemctl enable openvpn-client@NOM_CLIENT.service
sudo systemctl start openvpn-client@NOM_CLIENT.service
documentation/technique/vpn/client.txt · Dernière modification: 2020/04/19 21:52 de cacatoes