Serveur VPN: #1 Installation et configuration de base
Rédigé par Xavier - -
Les VPN commencent à devenir très célèbres car ils constituent des moyens pour contourner les filtrages mis en place par certains pays non démocratiques (dont la France bientôt). Mais bien avant cela, ils étaient déjà très utilisés en entreprise. Une entreprise disposant de plusieurs antennes peut fonctionner sur un seul réseau grâce à ça, et de manière sécurisée.

Le fonctionnement est simple, un tunnel est créé entre les clients et le serveur. Des cartes réseau virtuelles sont créés sur les machines, et grâce au tunnel elles peuvent communiquer ensemble, comme si elles étaient directement connectée. Donc, par exemple, quelqu'un situé en Egypte peut se connecter à son réseau local en France grâce au VPN, et accéder a ses partages, son imprimante, etc...
Dans la première partie de ce tutoriel, nous allons apprendre à configurer un serveur VPN et deux clients (un Linux et un Windows) de manière simple. Dans la seconde partie nous verrons comment accéder à un réseau local à travers un VPN à l'aide des routes.
Logiciels
- Ubuntu/Debian
- Windows Seven (client uniquement)
Compétences
- Utiliser la ligne de commandes
- Savoir faire un réseau TCP/IP fonctionnel
- Savoir transférer des fichiers (à l'aide d'une clé usb, d'un partage réseau...) si votre serveur est en mode console
- Administration d'un système Windows
Réseau
Vous pouvez faire les manipulations sur des machines physiques ou virtuelles. Pour l'exemple, nous en utiliserons trois:
- Serveur debian en 192.168.0.1
- Client Ubuntu en 192.168.0.50
- Client Windows 7 en 192.168.0.100

Plan et fonctionnement
Un VPN est quelque chose de très restrictif, aussi dans notre exemple nous allons devoir générer des autorisations pour chaque client amené à se connecter. Voici ce que nous allons faire:
- Installation d'OpenVPN
- Génération des clés de sécurité serveur & clients
- Création d'un utilisateur pour OpenVPN
- Configuration du serveur
- Configuration du client Ubuntu avec Network-Manager
- Configuration du client Ubuntu sans Network-Manager
- Configuration du client Seven
Côté serveur: installation d'OpenVPN
Les paquets nécessaires sont disponibles dans les dépôts de Ubuntu et Debian. Il faut donc installer OpenVPN et OpenSSL (le second est pour générer les clés de sécurité).
Passons maintenant à la suite.
Côté serveur: génération des clés
OpenVPN fournit des scripts pour générer de manière simple les clés. Ils sont situés dans /usr/share/doc/openvpn/examples/easy-rsa/. Mais pour plus de commodité nous allons les copier dans /root (le répertoire personnel de root, sous lequel nous travaillons pour l'instant).
Entrez ensuite dans le répertoire /root/openvpn puis dans son sous-répertoire 2.0:
# cd /root/openvpn/2.0
Il faut commencer par lancer un script qui va préparer la génération des certificats:
# . ./vars # ./clean-all
Ensuite, il faut exécuter le script "build-ca":
Le script va vous poser plusieurs questions, auxquelles vous n'êtes pas obligé de répondre SAUF "Common Name" (vous devez indiquer le nom de votre serveur, il sera utilisé plus tard).
Une fois que c'est bon, vous pouvez générer un second script pour votre serveur, avec la commande ./build-key-server NOMDUSERVER. Par exemple, si notre serveur s'appelle "DebVPN":
Même topo ici, ne renseignez rien sauf le Common Name. Ne mettez pas de mot de passe. A la question "Sign the certificate? [y/n]: " répondez Y, et de même pour la question suivante. Maintenant nous allons créer les certificats pour les clients.
Vous devez entrer la commande ./build-key NOMCLIENT. Par exemple nous allons en générer un pour le client "ubuntu":
Vous devrez encore répondre Y aux questions. Répétez l’opération pour le client "seven":
Dernière étape, lancez le script build-dh:
Nous allons maintenant copier les clés et certificats destinés au serveur dans le dossier de configuration d'openVPN situé dans /etc/openvpn:
# cp ./keys/ca.crt /etc/openvpn/ # cp ./keys/DebVPN.crt /etc/openvpn/ # cp ./keys/DebVPN.key /etc/openvpn/ # cp ./keys/dh1024.pem /etc/openvpn/
Dans le dossier /root/openvpn/2.0/keys vous trouverez également:
seven.crt seven.key ubuntu.crt ubuntu.key ca.crt
Ce sont les clés destinées aux clients. Vous devrez leur donner, à l'aide d'une clé usb, d'un accès sftp, etc...
Côté serveur: création d'un utilisateur pour OpenVPN
Nous allons créer un utilisateur inoffensif pour faire tourner OpenVPN. Cet utilisateur s'appellera OpenVPN et n'aura aucun droit sur le système:
# groupadd openvpn # useradd -d /dev/null -g openvpn -s /bin/false openvpn
La première commande créé un groupe nommé "openvpn". Celui-ci n'a aucun droit. La deuxième commande créé l'utilisateur "openvpn". L'option "-d" indique le répertoire personnel par défaut. L'indication "-s" son shell par défaut. Les deux options pointent vers des "pièges". Ainsi, il n'y a pas de répertoire perso ni de shell.
Configuration du serveur
Des fichiers de configuration d'exemples peuvent être trouvés dans /usr/share/doc/openvpn/examples/sample-config-files/ mais nous allons créer le notre de A à Z. Créez un fichier server.conf dans /etc/openvpn:
Voici ce que nous allons mettre dedans:
# Port du serveur port 1194 # Protocole proto udp # Utilisation d'un tunnel pour les connexions dev tun # Clés et certificats du serveur ca ca.crt cert DebVPN.crt key DebVPN.key dh dh1024.pem # Le sous réseau des interfaces virtuelles server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt # Compression LZO comp-lzo # Utilisateur et groupe user openvpn group openvpn # Maintient de la configuration après restart persist-key persist-tun # Fichier de log status openvpn-status.log # Niveau de verbosité verb 1
Maintenant nous pouvons démarrer le serveur:
Avec un ifconfig, vous devez voir apparaitre une nouvelle interface réseau nommée "tun0" et portant l'adresse 10.8.0.1. Si ce n'est pas le cas ou si vous avez un message d'erreur, consultez le fichiers /var/log/syslog ou /etc/openvpn/openvpn-status.log
Configuration du client Ubuntu avec Network-Manager
Tout d'abord, récupérez sur la machine les fichiers suivants:
- ca.crt
- ubuntu.key
- ubuntu.crt
Ensuite, il y a plusieurs moyens de se connecter. Le plus simple est d'utiliser network-manager, le gestionnaire de réseau par défaut sous Ubuntu (et pas mal d'autres distributions). Commencez par installer le module VPN pour networkmanager:
$ sudo apt-get install network-manager-openvpn
Ensuite relancez network-manager ainsi que l'applet (ou redémarrez votre machine si vous voulez):
$ sudo /etc/init.d/network-manager restart $ pkill nm-applet $ nm-applet &
Sur l'applet network-manager, faites un clic gauche puis allez dans "Connexions VPN" puis "Configurer le VPN".

Ajoutez-en un nouveau, puis sélectionnez le type "OpenVPN".
- Passerelle: 192.168.0.1
- Certificat utilisateur: ubuntu.cert
- Certificat du CA: ca.crt
- Clé privée: ubuntu.key
Cliquez ensuite sur "Avancé" et cochez "utiliser la compression de données LZO" ainsi que "port de passerelle personnalisé" (1194).
Ensuite validez et fermez le tout. Faites un clic gauche sur l'applet de Network-manager et allez dans "Connexions VPN" et sélectionnez celui que vous venez d'ajouter. Après quelques secondes, si vous voyez un petit cadenas sur l'icône, et que le tout est statique, alors c'est bon. Pour vérifiez, lancez un terminal et faites un ifconfig. Vous devez avoir une interface tun0. Lancez un ping vers 10.8.0.1 (le serveur, à travers le VPN). Si vous avez une réponse, c'est bon!
Configuration du client Ubuntu sans Network Manager
Pour ceux qui n'ont pas Network-Manager, ou si cela ne fonctionne pas, vous pouvez initier la connexion à l'ancienne. Pour cela, commencez par installer OpenVPN sur le client:
Dans le dossier /etc/openvpn vous devez copier les clés destinées au client Ubuntu. Pour rappel: ca.crt, ubuntu.crt, ubuntu.key
Ensuite on va créer un fichier texte dans lequel on met nos paramètres:
Dans ce fichier, entrez les paramètres suivants:
# Mode de fonctionnement client client # Fonctionnement en tunnel dev tun # Protocole UDP proto udp # Adresse serveur et port remote 192.168.0.1 1194 # Paramètres divers resolv-retry infinite nobind # Mode persistant persist-key persist-tun # Certificats ca ca.crt cert ubuntu.crt key ubuntu.key # Compression LZO comp-lzo # Mode verbeux verb 1
Ensuite vous pouvez lancer le serveur:
Vous devriez voir apparaitre une nouvelle interface réseau, tun0. Essayez de lancer un ping sur le serveur (10.8.0.1) et voyez si il répond.
Configurer un client Windows
Vous devez télécharger une version récente de OpenVPN sur Windows. Vous pouvez en trouver une ici: http://www.fiberworks.com/DNN/Support/OpenVPN/tabid/171/Default.aspx. Installez-la. Dans le centre Réseaux et Partages, vous devez voir une nouvelle carte réseau (virtuelle).

Ensuite vous allez devoir créer un fichier de config nommé client.ovpn dans c:\Program Files\OpenVPN\config
Si vous travaillez avec Notepad++, n'oubliez pas de le lancer en mode administrateur sinon l'écriture échouera. Dans ce fichier, entrez les lignes suivantes:
# Mode de fonctionnement client client # Fonctionnement en tunnel dev tun # Protocole UDP proto udp # Adresse serveur et port remote 192.168.0.1 1194 # Paramètres divers resolv-retry infinite nobind # Mode persistant persist-key persist-tun # Certificats ca ca.crt cert seven.crt key seven.key # Compression LZO comp-lzo # Mode verbeux verb 1
Toujours dans le même répertoire (c:\Program Files\openVPN\config) vous deviez copier vos fichiers de clés et certificats (ca.crt, seven.crt et seven.key).
L'étape suivante consiste à démarrer le service OpenVPN. Les services Windows se trouvent dans: Panneau de configuration > Outils d'administration > Services. Dans la liste, vous allez devoir trouver OpenVPN.

Faites un clic droit puis "Démarrer". Lancez OpenVPN GUI (il y a un racourci sur le bureau, ou alors trouvez-le dans le menu démarrer. Dans la barre des tâches, un nouvel icône apparait. Faites un clic droit dessus puis "Connect". Si tout se passe bien, il vous dira que vous êtes maintenant connecté au VPN. Ouvrez une console et lancez un Ping sur le serveur. Si vous avez des erreurs, essayez de lancer OpenVPN-GUI en administrateur.
