Bonjour,
Aujourd’hui je vais
vous montrer comment configurer un réseau privé virtuel (Virtual Private
Network, VPN) entre deux sites qui se trouvent géographiquement dans deux zones
différentes, et ceci à partir d’un serveur OpenVPN que l’on configurera. Mais tout
d’abord,
Qu’est ce
qu’un VPN ?
Un Réseau Privé Virtuel
ou Virtual Private Network (VPN) est un réseau qui permet d’interconnecter de
manière sécurisé deux entités (une entreprise et sa succursale, une entreprise
et ses employés domiciliés, un serveur et un client mobile, …) situés à une
certaine distance l’un de l’autre. Le VPN permet de créer une liaison directe
logique (virtuelle) entre plusieurs équipements distants; ainsi un employé
depuis son domicile peut accéder facilement et de manière sécurisé au réseau
interne (Intranet) de son entreprise. Le VPN crée une sorte de tunnel entre les
différents équipements qui s’y trouvent.
Le VPN est une
technologie accessible et toujours autant utilisé notamment parce
qu’elle permet de: préserver la confidentialité et l’anonymat des utilisateurs sur
des réseaux publics (Internet) en changeant leur adresse IP (Internet
Protocol) , sécuriser les échanges inter-site, sécuriser les communications
et données entre entités distinctes via des protocoles de chiffrements qu’il
peut intégrer en son sein, contourner certaines restrictions géographique par
exemple avoir accès à du contenu disponible uniquement dans un pays ou une zone
bien déterminée; peut-être certains parmi vous ont déjà en essayant de visionner
certaines vidéos reçu le message « cette vidéo n’est pas disponible dans
votre pays » ou encore « ce contenu n’est pas disponible dans votre
zone géographique », avec un VPN vous n’aurez plus ce genre de souci :).
Les protocoles utilisés
pour la mise en place d’un réseau privé virtuel sont : L2TP/ IPSec (Layer
2 Tunneling Protocol/ Internet Protocol Security), PPTP (Point-to-Point Tunneling
Protocol), SSL/TLS (Secure Socket Layer/Transport Layer Security) et
OpenVPN ; c’est ce dernier qui est le protocole le plus utilisé
actuellement.
Qu’est ce
que OpenVPN ?
OpenVPN est un
protocole open source de création de VPN qui utilise SSL pour gérer les
authentifications et se basant sur l’établissement d’un tunnel IP via le
protocole UDP (User Datagram Protocol) ou TCP (Transmission Control Protocol). Le
logiciel open-source portant le même nom permet quant à lui aux clients de se
connecter à un serveur abritant le protocole OpenVPN en son sein à l’aide d’une
clé privée partagée à l’avance, de certificats électroniques, ou encore de
couple nom d’utilisateur/mot de passe (login/password). OpenVPN est le
protocole le plus utilisé actuellement en partie à cause de son taux de chiffrement
élevé, sa stabilité, sa rapidité, sa fiabilité, sa compatibilité
multi-plates-formes, et de son usage sur n’importe quel port en écoute coté
serveur.
Maintenant que vous en
savez un peu plus sur les Réseaux Privés Virtuels et sur le protocole OpenVPN, nous allons entrer dans le
vif du sujet et passer à la mise en place d’un serveur OpenVPN au sein d’un
réseau étendu.
Configuration
d’un Serveur OpenVPN pour la mise en place d’un VPN inter-sites
L’architecture réseau
(topologie) utilisée est la suivante :
Le but est de permettre
à l’utilisateur Client_Jacques (192.128.1.5/24)
qui se trouve chez lui ou dans une filiale d’avoir accès au réseau interne de
l’entreprise générale par exemple pour utiliser les services du serveur
Serveur_Application (192.168.1.69/24) qui
héberge une application dont il à besoin. Le procédé consistera à relier Client_Jacques
à Serveur_Applications via le serveur Serveur_OpenVPN qui va créer un tunnel
entre les deux équipements et leur attribuer des adresses dans la plage (10.8.0.0/24) pour qu’ils puissent communiquer.
(PS : le
serveur que nous utiliserons est une distribution GNU/Linux en occurrence
Debian)
Nous allons démarrer la
configuration de notre Serveur OpenVPN, pour ce faire nous allons tout d’abord lancer
le terminal de notre futur serveur OpenVPN,
Pour installer OpenVPN sur le serveur il suffit que
ce dernier soit connecter à internet et d’y entrer la commande « apt-get install openvpn » :
On copie ensuite les fichiers de configurations de
OpenVPN dans le repertoire easy-rsa qu’on aura préalablement créé,
Ensuite nous configurons une autorité de
certification; pour ce faire on édite le fichier « vars » qui
contient les informations d’identification pour créer les certificats et les
clés :
Nous modifions à notre convenance certaines lignes
du fichier :
Puis il nous faut initialiser les variables ;
pour ce faire nous allons entrer une succession de commande dont la premiere « ./clean-all » permet de créer ou de
réinitialiser le sous-dossier « keys »,
Ensuite nous créons dans le sous-dossier
nouvellement crée le fichier « dh1024.pem »
avec la commande « ./build-dh »:
Après nous entrons la commande « ./pkitool –initca » pour générer une clé privé chiffré avec l'algorithme RSA (Rivest Shamir Adleman) qui sera enregistrée dans la clé ca.key du serveur,
Nous faisons de même avec la clé server.key cette fois-ci en entrant la commande suivante :
Ensuite nous créons la clé spéciale pour éviter les
attaques de type « Man in the middle » ;
Une fois cette suite de commandes exécutées
convenablement, nous copions les clés et les certificats qui nous seront utiles
pour le serveur dans le répertoire « /etc/openvpn »,
Avant de poursuivre nous créons un répertoire dans
lequel le processus OpenVPN sera "chrooté" afin de limiter les pannes dans
OpenVPN ;
Maintenant on crée le fichier de configuration /etc/openvpn/server.conf :
Dans notre cas, nous l’avons édité comme suit :
Le fichier ci-dessus permet de créer un serveur VPN
SSL routé basée sur le protocole TCP et utilisant le port 443 comme port
d’écoute, qui a comme interface réseau virtuelle "tun"; les fichiers utilisés
pour l’authentification des clients sont : ca.crt, cert.crt,
server.key ;les fichiers de chiffrement des données (dh1024.pem, ta.key, …), la plage
d’adresse attribuées aux clients est 10.8.0.0/24, enfin on rend actif la
compression de données avec comp-lzo, et la persistance de la connexion
(persist-key, persist-tun).
A présent nous testons la configuration en
saisissant la commande suivante :
Si l’on obtient les messages suivants,
C’est que tout c’est bien passé. Il ne nous reste
plus qu’à démarrer notre serveur OpenVPN, avec la commande suivante :
A ce niveau en effectuant la commande « ifconfig » nous nous
rendrons compte qu’une nouvelle interface réseau à été ajoutée (tun).
A présent que le service OpenVPN est démarrer sur
notre serveur on vérifie si nos interfaces sont convenablement configurées,
Nous activons ensuite le routage en décommentant la
ligne suivante dans le fichier /etc/sysctl.conf :
Dans notre cas nous avons configuré certaines routes
statiques et définit une règle IPtable :
Notre serveur OpenVPN est actuellement fonctionnel
il ne nous reste plus qu’à configurer des clients qui pourront s’y connecter.
Configuration
de compte Client OpenVPN
Nous allons créer le répertoire /etc/openvpn/clientconf qui contiendra tous les fichiers de
configuration de nos clients :
Créons également le dossier qui va contenir tous les
fichiers de notre client Client_Jacques ;
Si nous souhaitons par exemple créer un certificat
et une clé pour le client Client_Jacques, nous entrons les commandes
suivantes :
Puis effectuer « ./build-key-pass nom_client»
qui permet de demander un mot de passe à l’utilisateur lors de la connexion au tunnel VPN, le script va vous
demander d’entrer un certains nombre d’informations pour pouvoir générer les
fichiers dont le client aura besoin pour se connecter sur le serveur :
Toutes ces étapes suite à l’exécution de la commande
« ./build-key-pass » vont
générer trois fichiers dans le répertoire /etc/openvpn/easy-rsa/keys :
clientjacques.crt (le certificat du client), clientjacques.csr (certificat qui
va rester sur le serveur et va permettre la correspondance avec celui du
client) et le fichier clientjacques.key
(la clé du client).
A présent nous devons copier les trois fichiers
nouvellement crées ainsi que les fichiers ca.crt (certificat du serveur) et
ta.key (du serveur) :
Puis on crée le fichier « clientjacques.conf » avec la commande suivante ;
Dans notre cas ce fichier ressemble à ça :
L’adresse 212.217.42.3 représente l’une des adresses
publique de notre serveur et 443 le port d’écoute.
Puis on génère en extension .ovpn le fichier de
configuration du client c’est ce dernier qu’il utilisera pour se connecter via
le logiciel OpenVPN sur le serveur ;
En résumé on devrait avoir dans le dossier du client
Client_Jacques les fichiers suivants :
Il ne nous reste plus qu’a rassembler tous ces fichiers
dans une archive (.tar par exemple) et de la transmettre au client
Client_Jacques ;
Connexion du Client au Serveur OpenVPN
Une fois que nous avons transféré et décompresser
l’archive,
On télécharge le logiciel OpenVPN sur le site
officiel de OpenVPN :
Une fois installé on lance le logiciel, et on clique
sur le bouton (+) comme le montre la capture d’image suivante, pour pouvoir
ajouter une nouvelle connexion VPN,
Puis on sélectionne l’option « Local file »
ensuite sur le bouton « Import » :
Le logiciel
va vous inviter à sélectionner le fichier de configuration en .ovpn à utiliser,
dans notre cas ça correspond au fichier « clientjacques.ovpn ».
Puis on clique sur le bouton « Save »
enfin de sauvegarder la configuration :
Nous obtenons la fenêtre suivante avec notre profil sélectionné plus haut:
Il ne nous reste plus qu’a cliquer sur le profil
nouvellement crée pour entrer les paramètres de connexions du client au
serveur :
Comme vous pouvez le voir sur la capture précédente,
au moment de l’établissement du tunnel VPN le client doit entrer le mot de
passe définit lors de la création du fichier client faite précédemment
avec la commande « ./build-key-pass »,
et si les mots de passes et identifiants correspondent avec celui du fichier
clientjacques.csr resté sur le serveur, la connexion est parfaitement
établie.
Une fois la connexion établie au niveau du serveur
OpenVPN nous pouvons vérifier les équipements qui y sont connectés, pour ce
faire il faut examiner le fichier
openvpn-status.log se trouvant dans le
répertoire /etc/openvpn/ :
A présent si on revient à notre exemple du début à
savoir faire accéder le Client_Jacques à l’application hébergé sur le serveur
Serveur_Application, il faut aussi configurer les fichiers du serveur
Serveur_Application sur le serveur OpenVPN. La procédure est la même que celle
décrite plus haut lors de la création du Client_Jacques. Puis on exporte
également les fichiers sur le serveur Serveur_Application ;
Nous lançons OpenVPN sur le serveur
Serveur_Application puis nous nous connectons au serveur OpenVPN :
Et à présent nous pouvons depuis le client
Client_Jacques nous connecter au serveur Serveur_Application, en entrant
l’adresse IP (attribué par le serveur OpenVPN) de ce dernier dans le navigateur
web par exemple du client Client_Jacques ;
Nous constatons que le client Client_Jacques a bien
accès à l’application hébergé sur le poste Serveur_Application situé dans un
site distant. Et en consultant le fichier openvpn-status.log
du Serveur OpenVPN on remarque que deux clients (Client_Jacques :
192.128.1.5 en Intranet et 10.8.0.6 dans le VPN; et Serveur_Application :
192.168.1.69 en Intranet et 10.8.0.10 dans le VPN) y sont bien connectés.
Nous venons à présent de mettre en place un serveur
OpenVPN au sein de notre réseau étendu, auquel des clients peuvent se connecter
et travailler comme si ils se trouvaient logiquement dans le même Réseau local
(Intranet).
Merci d’avoir suivi le tutoriel jusqu’à la fin.
A très bientôt !!!
Bon tuto jacques!
RépondreSupprimercool
RépondreSupprimerc'est intéressant ton article il est super. est ce que tu peux travailler avec moi sur mon mémoire; je travaille sur la sécurité bancaire(en faite je dois concevoir un algorithme qui sécurise les cartes bancaires au cameroun)
RépondreSupprimeret en suite créer une PKI(infrastructure des clés publics) si toi et moi nous réussissons il y a un grand sur ce projet sur les bancs que nous allons faire et gagner de l'argent donc si tu es d'accord tu me dis
cool ton tuto,c'est vraiment pure
RépondreSupprimersouhaite un cour plus pratique
RépondreSupprimerBonjour Jacques
RépondreSupprimerMerci pour ce tutoriel, étant à la masse avec Linux, est possible de créer son vpn depuis une plateforme Windows ? Ou sur le serveur application direçtement
Ahmed
Bonjour Ahmed, oui c'est possible de créer son VPN directement sur Windows, il existe même une méthode pour le faire entièrement de manière graphique sans entrer la moindre commande dans l'Invite de commande (CMD)... Donc c'est possible.
SupprimerSalut Jacques, je trouve ton tuto vraiment exceptionnelle mais je me disais si tu peut poster le même tuto pour Windows. Merci leonelzoko@gmail.com
RépondreSupprimerBonsoir,
RépondreSupprimerMerci pour le tuto !
Serveuur Openvpn installé sur un VPS sous Debian
Cela fonctionnne pour accès internet
Mon problème:
- j'ai installé un modem-routeur 4G (sous Linux) comme client VPN
- je souhaiterai accéder aux ordinateurs derrière ce routeur par leurs adresses VPN. Par exemple:
PC sur le Lan en IP 192.168.1.30
Accéder à ce PC de l'extérieur par IP 10.8.0.30
(Cela me permettrait d'accéder à mon réseau local via la 4G, ayant une connexion ADSL lamentable)
Merci par avance
Bonjour,
Supprimerune solution à votre problème consisterait à vous assurer tout d'abord que l'ordinateur qui vous fera office de serveur OpenVPN soit accessible depuis internet donc possède une adresse (IP) publique. À présent il vous faudra configurer le service OpenVPN dessus ainsi que les comptes clients de manière statique (pour identifier chaque ordinateur de manière précise sur le LAN si vous le souhaitez en référence avec votre exemple) ou non, puis installer des clients OpenVPN sur toutes les machines (de votre réseau local) que vous souhaités joindre de l'extérieur ainsi que les fichiers clients prévus pour cela. Faudra également prévoir un fichier client ainsi qu'un logiciel client OpenVPN sur l'ordinateur qui sera utilisé pour joindre les stations depuis l'extérieur via internet. Si nécessaire faudra également avoir recours (sur le routeur d'entré qui vous fera aussi peut-être office de serveur OpenVPN) en fonction de comment vous allez vous y prendre à du NAT et/ou des règles d'IPtables.
Salut Jacques, je trouve ton tuto vraiment exceptionnelle et très pratique, mais je me disais si tu peut poster le même tuto pour Windows? Merci mon e-mail privé: marrakech_emploi@tutanota.com ... En attente toujours de tes nouvelles.
RépondreSupprimerbjr jacques je te remercie de ton job ,ce tuto est génial .mais j'ai un petit problème sur le vpn avec la commande crypto isakmp. je peux avoir le même tuto sur Windows car j'ai un projet a rendre sur ça a la fin du mois ,merci d'avance mon email ptraore352@gmail.com
RépondreSupprimerSalut Jacques, je trouve ton tuto vraiment exceptionnelle et très pratique, mais je me disais si tu peut poster le même tuto pour Windows? Merci mon e-mail privé: mabdelaffise@yahoo.fr
RépondreSupprimerbonjour, j'ai une connection 4g et un serveur dédier chez ovh avec openvpn et je n'arrive a rien merci de m'aider
RépondreSupprimerBonjour Jacques
RépondreSupprimerMerci pour le tuto. Est il possible de l'avoir sur format PDF ??? Merci d'avance
Merci pour le tuto.
RépondreSupprimerBonjour Jacques ,
RépondreSupprimerJe ne suis pas informaticien , mais à en croire les commentaires ton tuto à l'air super . donc mes félicitations.
J'aurais 2 questions à te poser :
Pourrais tu m'indiquer à minima quelle est la config hard nécessaire pour créer le VPN entre 2 pc windows distants géographiquement ?
Compte tenu de mon ignorance en informatique, je ne me sens pas capable de mettre en œuvre une telle procédure, aurais tu dans ce cas une personne ou une société à me conseiller qui pourrait réaliser cela dans un cout raisonnable ?
Merci
Bonjour MR06,
SupprimerJe te rassure mon tuto s'adresse a tout le monde(informaticien ou pas) c'est le but que je recherche, c'est pour cette raison que j'essaie d'être le plus précis possible dans les étapes des configurations ou des tests ... ; pour revenir à tes questions, je pourrais te donner quelques conseils ou t'assister si tu souhaites concevoir toi-même le VPN, j'ai l'habitude d'aider des personnes qui me contactent parfois pour leur projet ou autres... bien sûr sans rien en retour :) Envoie-moi juste plus de détail par mail et je pourrais t'apporter mon expertise dans la limite de mon temps libre :) À bientôt
Bsr Jacques et merci pour votre tuto,
RépondreSupprimerj'aimerais savoir si Internet est le seul moyen qui peut être utilisé pour connecter deux sites distants géographiquement ?
Bonjour Jacques
RépondreSupprimerje me permet de vous contacter pour vous poser une problème au quel j'ai pas encore de solution.
je dois essayer de mettre en place un lab sur GNS3 ou Packet tracer où il faut mettre un VPN sur deux site n'ayant pas le meme firewall ( un c'est ZyXEL et l'autre fortigate
j'ai choisi de prendre fortigate 100E et ZyXEL usg 110
bonjour jacques grand merci pour votre tuto
RépondreSupprimerTres bon tuto
RépondreSupprimerand thank you for this post
RépondreSupprimerBonjour je suis sur Kali linux et je veux mettre en place le vpn mais il y a certaines commandes qui ne marchent pas; exemple de la commande qui génere les clés privées des utilisateurs !
RépondreSupprimerBonsoir Jacques, vraiment ton tuto est chic. Est ce que tu peux faire le même tuto avec windows ?
RépondreSupprimervraiment ce avantagé pour tous celui qui aimes bien le réseau car ,ça donne un plus sur les savoir ,avec ce tutoriel nous serons toujours capable de créer un réseau dont nous voulons mettre en place
RépondreSupprimerSuper tuto merci beaucoup, la mise en place sous windows me fera enormement plaisir.
RépondreSupprimer