Alors que la course à l’anonymat sur internet bat son plein, que ce soit pour télécharger le dernier Lara Fabian ou simplement pour surfer en toute tranquillité, je m’en vais vous présenter un tutoriel qui vous permettra de créer un VPN. Commençons les choses dans l’ordre !
VPN, ça signifie Virtual Private Network, et si on le traduit en français ça donne Réseau Privé Virtuel. Pour faire court, il s’agit d’une passerelle entre le Client (nous) et, pour être vulgaire, Internet. C’est en tout cas l’utilisation que nous allons en faire ici.
Le grand avantage d’un tel tunnel c’est qu’il crypte toutes les données qu’il envoie et qu’il reçoit. Si vous passez par un VPN, vous êtes donc assez protégé. De plus, votre adresse IP sera celle du serveur sur lequel le VPN est installé.
En somme, il s’agit d’un gros proxy… en mieux.
Un VPN repose sur un protocole, appelé protocole de tunnelisation, c’est-à-dire un protocole permettant aux données passant d’une extrémité à l’autre du VPN d’être sécurisées par des algorithmes de cryptographie.
Le terme tunnel est utilisé pour symboliser le fait qu’entre l’entrée et la sortie du VPN les données sont chiffrées et donc normalement incompréhensibles pour toute personne située entre les deux extrémités du VPN, comme si les données passaient dans un tunnel. De plus, créer un tunnel signifie aussi encapsuler un protocole dans un protocole de même niveau du modèle OSI (IP dans IPSec par exemple). Dans le cas d’un VPN établi entre deux machines, on appelle client VPN l’élément permettant de chiffrer les données à l’entrée et serveur VPN (ou plus généralement serveur d’accès distant) l’élément déchiffrant les données en sortie.

Ainsi, lorsqu’un système extérieur à un réseau privé (client nomade, agence ou travailleur à domicile) souhaite se connecter au réseau de son entreprise :
De quoi avons-nous besoin ?
Allez, ne tardons plus. Commençons par nous connecter au serveur via Putty. Nous nous assurons que tout est à jour :
apt-get update apt-get upgrade
Si ce n’est pas déjà fait, nous installons OpenSSH, qui s’occupera de sécuriser les connexions entrantes et sortantes du serveur.
apt-get install openssh-server
Ensuite, nous installons directement OpenVPN :
apt-get install openvpn
Pour faciliter les choses, nous déplaçons le dossier vers un chemin plus accessible :
cp /usr/share/doc/openvpn/examples/easy-rsa ~/openvpn/ -R cd ~/openvpn/2.0/
Nous éditons ensuite le fichier vars qui contient certaines variables utiles à la création des certificats. Adaptez ces lignes comme bon vous semble :
export KEY_COUNTRY="FR" # Pays export KEY_PROVINCE="FR" # On met la même chose export KEY_CITY="Cannes" # Nom de la ville export KEY_ORG="Orga" # Nom de l'organisation export KEY_EMAIL="contact@example.com" # Adresse e-mail
Nous exécutons le fichier pour être sûrs qu’il soit bien pris en compte.
source ./vars
Nous allons désormais créer l’Autorité de Certification ainsi que les clés qui nous permettront de nous identifier auprès du serveur. Des questions vous seront posées, répondez-y sans trop vous prendre la tête, elles n’ont pratiquement aucune incidence sur la suite. N’oubliez pas de donner un nom personnalisé ET différent à nom_serveur et nom_client.
# Autorité de Certification ./build-ca # Clé Serveur ./build-key-server nom_serveur # NOM À MODIFIER # Clé Client ./build-key nom_client # NOM À MODIFIER
Nous passons ensuite à la création des paramètres Diffie-Hellman, un échange de clés cryptées qui tient son nom de ses inventeurs : Whitfield Diffie et Martin Hellman.
./build-dhAvant d’aller plus loin, vous devez vous munir du DNS de votre hébergeur. Pour l’obtenir, il vous suffit d’éditer ce fichier :
nano /etc/resolv.conf nameserver 127.0.0.1 nameserver 88.191.254.60 # DNS primaire des Dedibox
Le DNS est généralement en seconde ligne. Si ce n’est pas le cas (ça peut arriver), une recherche google devrait vous permettre de le retrouver.
Il nous faut maintenant éditer, ou plutôt créer, le fichier de configuration d’OpenVPN :
nano /etc/openvpn/server.conf port 1194 # port par défaut proto udp # on peut utiliser le protocole TCP ou UDP, ici nous utilisons l’UDP dev tun # l’interface réseau utilisée # Chemin vers les fichiers ssl ca keys/ca.crt cert keys/nom_serveur.crt # NOM À MODIFIER key keys/nom_serveur.key # NOM À MODIFIER dh dh1024.pem # NE PAS MODIFIER server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 # On définit le serveur VPN comme passerelle par défaut pour les clients push "redirect-gateway def1" # On définit le DNS du serveur push "dhcp-option DNS 88.191.254.60" # DNS À MODIFIER
Maintenant, nous allons créer un dossier et y copier les clés et les certificats :
mkdir /etc/openvpn/keys/ cd ~/openvpn/2.0/keys cp ca.crt nom_serveur.crt nom_serveur.key /etc/openvpn/keys/ # NOMS À MODIFIER cp dh1024.pem /etc/openvpn/
Dernière étape, la création d’un script shell qui se lancera à chaque redémarrage du serveur et qui contiendra différentes règles de routage :
cd /etc/init.d nano openVPN.sh chmod +x openVPN.sh update-rc.d openVPN.sh defaults 99
Nous éditons ensuite le fichier et lui ajoutons les règles. Nous ouvrons également le port afin qu’il puisse être utilisé :
iptables -t filter -A OUTPUT -p udp --dport 1194 -j ACCEPT iptables -t filter -A INPUT -p udp --dport 1194 -j ACCEPT iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
Aucun redémarrage n’est nécessaire mais il faut cependant lancer le script que l’on vient de créer :
/etc/init.d/openVPN.sh
Voilà, c’est terminé pour la partie serveur !
Maintenant que tout est opérationnel côté serveur, il faut pouvoir nous y connecter. Pour cela vous allez avoir besoin de la version client d’OpenVPN.
Une fois le programme installé, rendez-vous dans le dossier suivant (le chemin peut légèrement changer selon votre OS ou votre installation) : C:\Program Files (x86)\OpenVPN\config\
S’il n’existe pas, créez le. Et créez également le fichier config.ovpn puis ajoutez-y ces lignes :
client dev tun proto udp remote IP_PUBLIQUE_DE_VOTRE_SERVEUR 1194 # IP À MODIFIER resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert nom_client.crt # NOM À MODIFIER key nom_client.key # NOM À MODIFIER comp-lzo verb 3 route-method exe route-delay 2
Copiez dans ce répertoire les certificats et la clé client que vous aurez au préalable récupérés sur le serveur grâce à WinSCP. Ces fichiers se trouvent dans /root/openVPN/2.0/keys/ et portent les noms suivants : nom_client.key, nom_client.crt, ca.crt.
L’architecture de votre dossier config devrait finalement ressembler à ceci :
ca.crt
config.ovpn
Stephane.crt
Stephane.key
README.txt
Nous entrons désormais dans la dernière ligne droite. Sur votre bureau a dû apparaitre le raccourci OpenVPN GUI. Faites un clic droit sur celui-ci et sélectionnez Propriétés. Rendez-vous dans l’onglet Compatibilité et cochez Exécutez en tant qu’administrateur. Appliquez et fermez.
Lancez OpenVPN GUI. Une icône représentant deux moniteurs a dû apparaitre dans la barre des tâches. Elle doit à ce moment être rouge. Faites un clic droit sur cette icône et sélectionnez Connect. Une fenêtre s’affichera et l’icône deviendra jaune puis, quelques secondes plus tard, verte. Un petit tour sur MonIP.org pour vérifier que votre adresse IP est bien celle de votre serveur, et le tour est joué ! Vous êtes désormais connectés via votre VPN !
Ce tutoriel est terminé mais il vous reste encore de nombreuses choses à explorer au sujet des VPN.
Sachez par exemple qu’il est possible de créer plusieurs clients. Vous pourrez alors permettre à un ami d’utiliser votre VPN. Il vous faudra pour cela vous placer dans le répertoire ~/openvpn/2.0/ et relancer la commande ./build-key nom_client, avec bien entendu un nom_client différent.
Sachez également qu’au bureau, un VPN configuré sur le port 443, généralement toujours ouvert puisque c’est le port utilisé par SSL, vous permettra de surfer en toute sécurité, sans craindre les restrictions imposées par l’administrateur du réseau, et de vous connecter, au hasard, sur Facebook ou MSN… Les possibilités sont nombreuses ;)
N’hésitez pas à me faire part de vos problèmes, si vous en rencontrez. Je serai ravi de vous aider !
Excellent, je cherchais justement à mettre en place un VPN sur le serveur histoire de voir ce que ça donne. Je ferais ça sûrement au retour des vacances.
Merci pour le tuto Stéphane ! :)
AH WAI SUPER MON TUTO QUE JE T’AI DONNE en.doc et aucun remerciement, sans moi tu le faisais pas ton VPN full tunnel !
Et bien sûr, je tiens à remercie mon copain Pierre-Antoine (http://www.pa-errard.fr) sans qui ce tuto n’aurait pas vu le jour, ce malgré les fautes et erreurs de commandes du fichier .doc initial. :D
Ha ben, j’imagine être capable de suivre pas à pas tout ça mais cela me semble quand même compliqué pour un néophyte tel que moi *…
Merci