Alors que la course à l’anonymat sur internet bat son plein, que ce soit pour télécharger 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 !
Un vépéquoi ?
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.
Principe de fonctionnement du VPN
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 :
- les paquets (qui contiennent les données) sont chiffrés par le client VPN (selon l’algorithme décidé par les deux interlocuteurs lors de l’établissement du tunnel VPN) et éventuellement signés.
- ils sont transmis par le biais du réseau transporteur (Internet en général).
- ils sont reçus par le serveur VPN qui les déchiffre et les traite si les vérifications requises sont correctes.
Pré-requis
De quoi avons-nous besoin ?
- d’un serveur dédié tournant sous Debian. Ici, je travaille sur Dedibox, mais n’importe quel serveur dédié devrait faire l’affaire.
- d’OpenVPN, à la fois côté serveur et côté client. Pas de panique, c’est un logiciel libre.
- de Putty et WinSCP, deux logiciels permettant de se connecter à un serveur en SSH et qui sont également libres.
- d’un PC avec une connexion internet, évidemment.
Côté serveur
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
Code language: JavaScript (javascript)
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
Code language: JavaScript (javascript)
Ensuite, nous installons directement OpenVPN :
apt-get install openvpn
Code language: JavaScript (javascript)
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/
Code language: JavaScript (javascript)
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
Code language: PHP (php)
Nous exécutons le fichier pour être sûr 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
Code language: PHP (php)
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-dh
Avant 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
Code language: PHP (php)
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
Contenu:
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
Code language: PHP (php)
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/
Code language: PHP (php)
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
Code language: JavaScript (javascript)
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 !
Côté client
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
Code language: CSS (css)
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 !
Vous avez un projet WordPress ou WooCommerce en tête? Transformez votre vision en réalité avec mon expertise reconnue.
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 ) 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
Bonsoir,
J’ai un problème avec la résolution des adresses ip quand je suis connecté.
J’ai modifié les DNS dans le resolv et openvpn(online, free, google etc…) mais ca ne fonctionne pas.
Merci d’avance :)
salut ! tu pourraiq preciser ton OS client (32 ou 64bits) car il existe des bugs avec w7 par exemple a cause des drivers (mais qui marche bien sous xp)
je te conseille d’aller lire mon tuto sur mon site car je parle des differents problemes de compatibilité.
Pour le DNS tu peux laisser ton serveur le faire et ce n’est pas dans le resolv.conf qu’il faut changer mais dans la conf du fichier de l’openvpn
Salut.
Concernant ton OS tu tournes sous quoi ? car il s’avère que sous windows 7 (32/64 bits) il peut avoir des problèmes de compatibilités (que tout le monde ne rencontre pas forcément).
Concernant les DNS, tu n’as pas besoin de modifier ton fichier /etc/resolv.conf, il faut laisser le DNS par défaut qui existe.
Il faut donc modifier les DNS qui se trouvent dans le fichier de configuration du serveur VPN (mets les DNS de google qui sont 8.8.8.8 et 8.8.4.4).
Tu peux regarder ici sur mon tuto car je parle des erreurs et des résolutions.
Tiens moi au jus de ton avancement, et après on pourra passer à la phase de debug.
Tu peux déjà voir si des connexions se font de ton client à ton serveur en ouvrant une 2eme fenêtre sous putty en lancant la commande suivante : tail -f /var/log/syslog
Bonjour,
La connexion avec mon serveur fonctionne bien, je peux communiquer des adresses IP et j’utilise le dernier OpenVPN GUI sous Windows 7 32bit.
J’ai modifié le resolv.conf avec seulement 127.0.0.1, dans la configuration du serveur VPN j’ai inséré les DNS de Google mais la résolution des noms de domaine ne fonctionne toujours pas.
Je vais essayé avec une machine virtuel sous Windows XP.
Je te tiens au courant.
Merci.
c’est possible d’avoir ta configuration serveur, client et l’archi réseau que tu utilises ?
ton serveur se trouve sur internet ou chez toi etc.
J’ai une Dedibox V3 64 bit avec Debian Lenny 64 bit (sur internet avec une seul adresse ip)
J’ai ouvert le port 1194 en udp sur mon firewall
CONFIG SERVEUR
CONFIG CLIENT
Je ne vois pas en quoi il est nécessaire de foutre les DNS google, ceux de dedibox fonctionnent.
As-tu mis les règles iptables comme indiqué ?
t’as une connexion qui s’établit (même si tu récupères pas les DNS) ?
quoi qu’il en soit, tu laisses ton DNS du fichier resolv.conf par défaut donc celui donné par dédibox.
dans le fichier de conf, tu mets les DNS que tu veux (ceux de la box, ou un FAI ça changera rien).
J’ai juste besoin des logs au moment de la tentative de connexion de ton client sur ton dédié.
tes règles pare feu aussi tant qu’a faire ^^
Je me suis permis de récupérer ton adresse email pour éviter de flood sur le blog.
Je posterais la solution une fois le problème résolu.
Merci
Le problème venait du client.
J’avais oublié de le lancer en administrateur :)
NOTE : il existe des problèmes de compatibilité avec windows vista, windows seven 32 et 64 bits à cause des drivers qui ne sont pas signés numériquement et microsoft empêche l’installation du driver TAP. Il existe plusieurs solutions (et il se peut que vous n’ayez pas de problème). Pour vista, seven 32/64, il faudra rendre l’exécutable en mode “démarrer en tant qu’administrateur”. Personnellement je suis sous windows 7 64 bits, et je n’ai pas eu de problème et j’utilise la version 2.1_rc19.
Source:
Merci a tous :)
Ah bah oui, faut lire les tuto jusqu’au bout, je le disais dans l’avant-avant dernier paragraphe :D En gras et tout, pfff. :P
:)
En tous cas très bon tutoriel pour faire un bon vieux VPN qui marche.
^^
par contre, n’oublions pas qu’un VPN ne sert qu’a faire des reseaux privés et on détourne sa premiere utilisation pour s’en servir de passerelle internet :)
Ouais, évidemment. C’est d’ailleurs de plus en plus répandu de s’en servir comme ça. Merci Hulu, merci Hadopi, etc.
super tuto merci ! Mais il s’avère que je n’est plus de connexion internet après etre connecter a mon serveur vpn … quelqu’un serait me dire le pourquoi du comment ??
Salut,
Est ce que tu as bien rentré les options ci dessous à la fin de ton fichier client ?
route-method exe
route-delay 2
ces deux option sont bien renseigner oui…
ne serais-ce pas un probléme de passerelle ?
RESOLU :
Si ça peut aider certains, il fallait renseigner ces règles iptables:
tout simplement.
Merci encore pour ce joli tuto, Skyminds —> Favoris ;)
Super merci.
Pour aller plus loin dans le tuto, c’est possible d’assigner a ce serveur VPN plusieurs IPs pour que les clients n’aient pas tous la meme?
Merci d’avance
Personnellement en UDP ca ne passe pas, avez vous une idée ?
Cdlt
Hello !
alors en UDP ou TCP les deux marchent, faut penser à modifier le pare feu et le fichier de configuration client ET serveur.
et concernant ta première question, ton serveur n’a qu’une seule IP publique, donc tous tes clients auront la même IP publique en sortie
sinon, quand t’as une erreur, n’hésite pas à copier coller les messages d’erreurs des logs qu’on sache vers quoi s’orienter :)
En fait j’avais fais une install ca fonctionnait mais bizarrement (config en UDP, mais je me connectais en TCP), passons.
Aujourd’hui je viens de reinstaller sur une Dedibox, et je t’assure qu’en UDP ca ne veut pas se connecté (ça reste bloquer)
J’ai cherché pendant 1 heure, reinstaller le serveur (j’ai cru a une erreur du serveur) et au final pareil, et en changeant UDP par TCP ca a marché du premier coup !
fais tourner les logs :) et les règles de pare feu
Log d’Openvpn coté client en udp :
Regles du parfeu les meme que dans le tuto mais avec 443 au lieu de 1194
UDP en 443 ne fonctionne pas, seul le TCP est autorisé :)
(j’avais oublié) c’est assez “récent” comme modification au niveau d’openVPN
donc tu dois utiliser un port aléatoire pour l’udp mais pas le 443
Ah ba voila, l’explication. néanmoins il me semble j’avais essayé en 1194 dans un premier temps !
Ba écoute merci, pour le fw je suis censé mette :
quand j’ai vu les logs, je me suis souvenu que si tu regardes les logs côté client sur ton poste ca te dit que le port 443 en UDP c’est pas pas possible ^^
pour ton fw c’est bon, sauf si tu changes le protocole et le port bien évidemment :)
Merci.
Je modifierai le firewall tout a l’heure pour vérifier que tout est OK.
Tien petite question, étant donné que le VPN est aussi Serveur WEB il y a moyen de brider la BD du VPN pour ne pas perturber les sites ?
Exemple : J’ai 200mb de BP je voudrais limiter a 100 le VPN pour toujours laisser 100mb pr le web
Bonjour, tout c’est bien déroulé pour moi sauf à la fin quand j’essaye de me connecter avec open gui, j’ai ce message :
Merci d’avance pour la personne qui m’aidera
Bonjour, je suis bloquer au moment ou faux éditer le fichier vars. je dois mètre quoi pour l’ouvrir dans la console putty ? nano /vars ? sa marche pas :/
Merci
Bonsoir,
J’ai une requête à vous faire. J’ai loué un nom de domaine chez gandi. J’ai créé un sous domaine dns de mon dns principal en configuration split dns sur un hyperviseur proxmox derrière ma freebox. Je n’arrive pas à rendre fonctionnel mes deux serveurs dns qui sont en adressage privé. La Freebox n’autorise qu’une seule adresse IP routable. Avez-vous une solution afin que je puisse faire fonctionner mon infra ( dns1 et 2, serveur Web, serveur mail). Est-ce qu’il faut que je passe par des VPS ou y-a-il des astuces derrière cette foutu box ?
Merci de votre aide.
David
@Lebnet : le log est assez explicite, t’as un problème de librairie et de clé privé
@crozy : nano vars (…)
@Pierre-Antoine Errard
Oui j’avais compris ça vite fait, mais vu que je suis un peu noob dans le domaine, je ne vois pas comment y remédier…
Si tu arrivais à me sortir de ce problème, ça serait super sympa.
A dak merci. Maintenant je bloque quand faux mètre “./build-ca” sa me met “No such file or directory” :/ pourtant j’ai tout bien suivi comme dit au début :/
si tu tapes ./build-ca avec ton message d’erreur c’est que tu ne dois pas être dans le bon répertoire :)
Bonsoir,
J’ai une requête à vous faire. J’ai loué un nom de domaine chez gandi. J’ai créé un sous domaine dns de mon dns principal en configuration split dns sur un hyperviseur proxmox derrière ma freebox. Je n’arrive pas à rendre fonctionnel mes deux serveurs dns qui sont en adressage privé. La Freebox n’autorise qu’une seule adresse IP routable. Avez-vous une solution afin que je puisse faire fonctionner mon infra ( dns1 et 2, serveur Web, serveur mail). Est-ce qu’il faut que je passe par des VPS ou y-a-il des astuces derrière cette foutu box ?
Merci de votre aide.
David