Dans cet article, je vais vous montrer comment mettre en place un tunnel VPN SSL grâce à l’outil OpenVPN.
Explication
Type VPN
Sachez qu’il existe deux grands types de VPN: IPSec et VPN SSL
– IPSec agit au niveau de la couche IP:
- Protection unique pour l’ensemble des applications
- Protège de bout en bout
- Protège les données pair à pair
- L’ensemble des équipements utilisant le tunnel bénéficient de ces avantages
– VPN SSL dans le cas de OpenVPN, agit sur les couches réseau, transport, session, présentation et application:
- Authentification et chiffrement par SSL
- Configuration à réaliser sur chacun des clients
- Passe facilement les NAT
Dans ce tutoriel je vais vous expliquez étape par étape comment mettre en place un VPN SSL sur une distribution Ubuntu 18.04. Nous allons installer un serveur puis des clients OpenVPN sous Linux, Windows et Android.
OpenVPN
Types
Il existe plusieurs configurations possibles avec OpenVPN:
La première consiste à utiliser des clés statiques, simple à mettre en œuvre mais peu adaptée dans une architecture avec beaucoup de clients et peu sécurisée. En effet, l’interception de la clé partagée va dévoiler tous les échanges y compris ceux déjà passés.
La seconde, plus sécurisée, consiste à utiliser des certificats. C’est celle-ci que nous allons mettre en place. Nous monterons un tunnel en UDP sur le port 1194 (port par défaut).
Installation et configuration
Serveur
Avant de commencer, mettez à jour votre serveur:
sudo apt-get update sudo apt-get upgrade
Installez les paquets nécessaires:
sudo apt-get install openvpn easy-rsa
Le serveur est installé, nous allons maintenant le configurer. Commençons par générer les certificats et clés nécessaires. Nous allons tout mettre dans le même dossier, lancez les deux commandes suivantes afin de le créer et d’aller dans ce dossier:
make-cadir certificats cd certificats
A partir de cette étape, lancez toutes les commandes dans le dossier que vous venez de créer « certificats ». Nous allons ensuite modifier les variables:
sudo nano vars
Afin de définir précisément le chemin du fichier openssl.cnf. Remplacez la ligne:
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
Par:
export KEY_CONFIG="$EASY_RSA/openssl-1.0.0.cnf"
Toujours dans le fichier vars, vous pouvez modifier les valeurs qui vous sont proposées par défaut lors de la création du certificat, en remplaçant les valeurs entre « »:
export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" export KEY_OU="MyOrganizationalUnit"
Pour prendre en compte ces nouvelles variables, entrez la commande ci-dessous:
source vars
Notre environnement est prêt, nous allons pouvoir créer notre autorité de certification. Utilisez les scripts présents dans le dossier certificats:
./clean-all && ./build-ca
Remplissez les champs ou laissez par défaut si vous aviez déjà modifié les valeurs dans le fichier vars.
Notre autorité de certification étant créée, nous allons générer le certificat et la clé du serveur OpenVPN. Lancez la commande suivante:
./build-key-server server
Les champs « challenge password » et « company name » sont optionnels, je les laisse vides pour ce tutoriel.
Nous allons générer les paramètres Diffie-Hellman, cette étape peut prendre quelques minutes:
./build-dh
En plus d’utiliser un certificat, nous allons également générer une clé TLS pour avoir encore plus de sécurité. Utilisez la commande ci-dessous:
openvpn --genkey --secret keys/ta.key
Copiez les fichiers qui sont dans /certificats/keys dans le dossier /etc/openvpn afin qu’ils soient pris en compte:
sudo cp keys/{server.crt,server.key,ca.crt,dh2048.pem,ta.key} /etc/openvpn
Pour la configuration de OpenVPN, un exemple du fichier server.conf est situé ici : /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz. Nous allons le décompresser et le placer dans /etc/openvpn:
gzip -d -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
Par défaut, seul le trafic entre votre serveur et votre client va passer dans le tunnel (le trafic internet ne passera pas dans celui-ci par exemple). Dans le fichier server.conf, nous allons dé-commenter la ligne qui concerne ce point afin que tout le trafic passe dans le tunnel:
sudo nano /etc/openvpn/server.conf
Dé-commentez la ligne:
push "redirect-gateway def1 bypass-dhcp"
Contenu du fichier de configuration du serveur OpenVPN (server.conf):
port 1194 proto udp dev tun ca ca.crt cert server.crt key server.key # This file should be kept secret dh dh2048.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist /var/log/openvpn/ipp.txt push "redirect-gateway def1 bypass-dhcp" keepalive 10 120 tls-auth ta.key 0 # This file is secret cipher AES-256-CBC persist-key persist-tun status /var/log/openvpn/openvpn-status.log verb 3 explicit-exit-notify 1
Démarrez le service OpenVPN:
sudo systemctl start openvpn@server
Vérifiez qu’il est bien actif:
sudo systemctl status openvpn@server
Nous allons maintenant passer à la configuration des clients. Nous allons créer le certificat du client pour le serveur ainsi que le certificat et la clé pour le client.
Utilisez la commande ci dessous (vérifiez que vous êtes toujours dans le répertoire certificats):
source vars && ./build-key client
Créez un répertoire pour le client dans /etc/openvpn et copiez le certificat du client, la clé du client, le certificat du serveur et la clé TLS dedans:
sudo mkdir /etc/openvpn/client1 sudo cp keys/{client.crt,client.key,ca.crt,ta.key} /etc/openvpn/client1 && cd /etc/openvpn/client1
Nous allons créer le fichier de configuration du client. Comme pour le serveur nous allons utiliser un modèle déjà présent sur le serveur:
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf client.ovpn
Éditez le fichier:
sudo nano client.ovpn
Sur la ligne suivante, remplacez « my-server » par l’IP de votre serveur OpenVPN, laissez 1194 si vous avez laissé le port par défaut sinon modifiez-le:
remote my-server-1 1194
Le contenu de client.ovpn sera le suivant:
client dev tun proto udp remote IP_SRV_OPENVPN 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert client.crt key client.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC verb 3
Nous allons créer un zip contenant les informations devant être sur le poste client. Le fichier zip contiendra:
- ca.crt : certificat du serveur OpenVPN
- client.crt : certificat du client
- client.key : clé du client
- ta.key : clé TLS
- client.ovpn : fichier configuration vpn
Dans le répertoire du client, faites un zip du dossier:
sudo zip client.zip *.*
C’est ce fichier que nous allons mettre sur le client afin qu’il puisse se connecter au serveur OpenVPN.
Clients
Linux
Copiez le fichier zip précédemment créé sur la machine. Ouvrez un terminal et installez le paquet nécessaire:
sudo apt-get install network-manager-openvpn-gnome
Dézipper le fichier:
unzip client
En haut a droite, cliquez sur l’icône réseau puis sur « Modification des connexions… »:
Cliquez sur le bouton « Ajouter »:
Sélectionnez « Importer une configuration VPN enregistrée … »:
Sélectionnez le fichier client.ovpn, la fenêtre va être pré-remplie. Si ce n’est pas le cas, vérifiez que les noms des éléments dans le fichier .ovpn soient les mêmes que les éléments eux-même:
Sélectionnez la connexion VPN que nous venons de créer en cliquant à nouveau sur l’icône réseau, puis sur « Connexions VPN » puis sur le nom de votre connexion:
Patientez quelques secondes, le tunnel va s’établir:
Vous avez désormais un cadenas sur votre icône de connexion réseau qui signifie que vous êtes connecté en VPN.
Windows
Téléchargez le fichier d’installation sur le site de OpenVPN en cliquant ici. Lancez l’installation, lors de celle-ci vérifiez que « TAP Virtual Ethernet Adapter » et « OpenVPN GUI » soient cochés. « OpenVPN Service » n’est pas nécessaire. Cliquez sur « Next » puis sur « Install »:
Durant l’installation, une fenêtre Windows va vous demander si vous souhaitez installer TAP, cliquez sur « Installer ». Une fois l’installation terminée, cliquez sur « Finish », puis ajoutez le dossier dézipper dans l’emplacement suivant:
C:\Users\VOTREnomUSER\OpenVPN\config\client1
Lancez l’outil « OpenVPN GUI ». Faites un clic droit sur l’icône dans la barre des tâches et cliquez sur « Connecter »:
Vous aurez une notification vous indiquant que la connexion est réussie:
Android
Téléchargez OpenVPN sur le Play Store et copiez le fichier déjà dézippé sur votre smartphone. Une fois l’application lancée, cliquez sur « OVPN profile »:
Sélectionnez le profil .ovpn dans vos fichiers:
Votre profil est importé, vous pouvez personnaliser le nom de votre connexion:
Cliquez sur le profil pour vous connecter. Un avertissement va apparaître, cliquez sur « OK »:
Vous êtes maintenant connecté à votre serveur OpenVPN:
Résolutions problèmes
Si votre tunnel VPN ne fonctionne pas, vérifiez les points suivants:
- Configuration cohérente entre votre serveur et votre client: même numéro de port (1194 par défaut), même protocole (UDP)…
- Les bonnes clés et certificats sont présents sur votre client: client.crt (certificat du client), ca.crt (certificat du serveur), client.key (clé du client) et ta.key (clé TLS)
- Vos machines arrivent à communiquer ensemble
- Les règles de votre firewall si vous en avez un sur votre serveur. Une configuration supplémentaire doit être réalisée afin d’autoriser le trafic nécessaire.
- Les logs du serveur et du client OpenVPN
C’est la fin de cet article. Vous avez appris comment configurer un serveur OpenVPN et à installer des clients Linux, Windows et Android.
Super ! Merci
Bonjour,
peux-tu expliquer ce que signifie cette ligne de configuration dans le serveur openvpn?
push « redirect-gateway def1 bypass-dhcp »
Merci
Bonjour,
La ligne « redirect-gateway def1 bypass-dhcp » sert à forcer la redirection du trafic client dans le tunnel VPN.
Grâce à cette ligne, tous le trafic sera redirigé dans le tunnel et pas seulement le trafic client-server.
Bonjour vincent
merci pour les tutos bien expliqués avec de la clarté
Je voudrais faire un don volontaire pour ton site , pour que ça puisse continuer d’évoluer
Bonjour,
Merci pour votre retour, voici un lien paypal si vous souhaitez faire un don (paypal.me/liversite)
Merci par avance 😉
bonjour,
faut-il obligatoirement passé par un service tier payant (type cactus ou autres) afin d’établir une connexion sécurisé avec open vpn entre deux pc.
Félicitation sur l’ensemble des tutos
Bonjour,
Merci 🙂
Non, c’est le VPN qui est le réseau virtuel sécurisé. Après libre à vous de choisir une solution payante ou non pour établir votre VPN.
Bonjour,
J’essaie sans succès d’utiliser Open VPN avec eMule. Je suis toujours en Low ID lorsque je me connecte avec Open, existe t-il une solution ? Par avance merci !!
Bonjour,
Après quelques recherches, il semblerais que openVPN ne sois pas compatible avec le mode High ID de eMule car il n’accepte pas le « port forwarding ».
Merci pour ce tuto. Mon VPN est désormais OK, la connection est établie mais une fois connecté, je ne peux « pinger » que le serveur OpenVPN mais les autres ressources (PC, imprimante, routeur, sur le réseau distant)
Pouvez-vous me conseiller car je cherche surle réseau Internet je ne trouve pas de réponse à ma question
En vous remerciant par avance
Norédine
nhafsi@srgi.fr
Bonjour,
Vérifiez dans votre fichier « server.conf » si vous avez bien positionné le réseau de votre réseau local distant dans cette ligne :
server X.X.X.X M.M.M.M
Les X pour l’adresse de réseau et les M pour le masque de sous réseau de votre réseau.
Bonjour et merci pour ce super tuto !
Je souhaite utiliser un VPN pour connecter des magasins distant en reseau pour utiliser un logiciel de caisse.
Ce Openvpn peut faire l’affaire ?
Merci par avance !
Bonjour,
Je vous conseille plutôt un VPN IPsec pour une interconnexion entre différents magasins.
Pour ce faire vous pouvez installer PFsense et configurer les VPN dessus.
Bonjour,
Tout d’abord merci pour ce tuto.
j’arrive a me connecter à mon vpn par contre une fois connecté je récupére une adresse en 10.8.0.0
et je n’arrive par la suite à joindre aucune machine du reseau local en face qui est en 192.168.0.0.
Est ce qu’il faut modifier le fichier /etc/openvpn/server.conf pour avoir un pont entre le reseau local et ma connexion vpn,
si oui quelles sont les lignes à modifier.
Merci d’avance pour votre aide.
Bonjour,
Oui il faudra changer dans votre fichier « /etc/openvpn/server.conf » la ligne :
server 10.8.0.0 255.255.255.0
Vous devez rentrer le réseau que vous souhaitez donner à vos postes qui se connectent en VPN 🙂
Bonjour,
J’ai ce message qui apparait,
Sat Oct 09 13:20:59 2021 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Sat Oct 09 13:20:59 2021 TLS Error: TLS handshake failed