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

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 :

  • openvpn
  • easy-rsa >= 3

Sous Debian Stretch, Easy-RSA est encore en version 2. Vu le peu de dépendances que le paquet nécessite, nous allons le récupérer et l'installer depuis Debian Buster :

Création du certificat et de la clé

  1. Lancer un terminal, en tant qu'un utilisateur, et se placer dans un dossier qui a du sens pour le client (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, en remplaçant adherent1 par le nom du client : ./easyrsa gen-req adherent1 nopass

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

  • la clé privée du client : pki/private/adherent1.key
  • le certificat, qu'on va envoyer au serveur dans /tmp afin de le signer : pki/reqs/adherent1.req

Signer le certificat du client

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

La requête de signature de certificat du client, copié dans /tmp/adherent1.req a par défaut comme droit 0600 et appartient à root. Il faudra donc changer son propriétaire par exemple pour s'assurer que certificats peut le lire : chown certificats /tmp/adherent1.req.

  1. Se connecter en tant que certificats et aller dans le dossier où se trouve easy-rsa :
    su -l certificats
    cd ~/openvpn
  2. Importer la requête de signature de certificat du client et la signer :
    ./easyrsa import-req /tmp/adherent1.req adherent1
    ./easyrsa sign-req client adherent1

À la fin, le fichier pki/issued/adherent1.crt a été créé, il est à retourner au client et peut être placé dans pki/signed. Cela permettra notamment de définir un mot de passe avec : ./easyrsa set-rsa-pass adherent1.

Attribuer une IP fixe au client

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

  1. Créer un nouveau fichier portant le nom du client dans /etc/openvpn/server/ccd
  2. Attribuer une IP au client (ex. 10.8.0.10), et ajouter dans ce nouveau fichier la ligne : ifconfig-push 10.8.0.10 255.255.255.0

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

Configurer OpenVPN sur le client

Cette étape est à réaliser sur le poste client. Les fichiers ca.crt et ta.key sont propres à notre serveur VPN et à fournir au client.

Sous Gnome avec NetworkManager

Il faut que le paquet network-manager-openvpn-gnome soit installé.

Ajouter ensuite une nouvelle connexion de type OpenVPN, en spécifiant dans l'onglet VPN :

  • Général
    • Passerelle : vpn.mycelium-fai.org
  • Authentification
    • Type : Certificats (TLS)
    • Certificat de l'utilisateur : <choisir le fichier adherent1.crt>
    • Certificat du CA : <choisir le fichier ca.crt (propre au serveur)>
    • Clé privée : <choisir le fichier adherent1.key>

Cliquer ensuite sur Avancé…, puis dans l'onglet :

  • Général :
    • Cocher Utiliser la compression de données LZO
  • Sécurité :
    • Chiffrement : AES-256-CBC
  • Authentification TLS :
    • Cocher Verify peer (server) certificate usage signature
      • Remote peer certificate TLS type : Serveur
    • Cocher Utiliser une ahtneitification TLS supplémentaire
      • Fichier de clé : <choisir le fichier ta.key (propre au serveur)>
      • Direction de la clé : 1

Comme service avec systemd

Il faut que le paquet openvpn soit installé.

En tant que root, se placer dans le dossier /etc/openvpn/client, puis :

  1. Créer un fichier mycelium.conf avec le contenu suivant :
    client
    dev tun
    proto udp
    remote vpn.mycelium-fai.org
    port 1194
    nobind
    persist-key
    persist-tun
    ca mycelium/ca.crt
    key mycelium/adherent1.key
    cert mycelium/adherent1.crt
    tls-auth mycelium/ta.key 1
    remote-cert-tls server
    cipher AES-256-CBC
    comp-lzo
    verb 3
    
    redirect-gateway def1
    tls-client
    route-delay 2
  2. Créer un dossier mycelium, et y déposer les fichiers adherent1.key et adherent1.crt généré précédemment, ainsi que ca.crt et ta.key propres au serveur
  3. Démarrer désormais le service avec systemd : systemctl start openvpn-client@mycelium.service

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.

documentation/technique/vpn/client.txt · Dernière modification: 2019/11/10 22:14 par jerome