Comment installer son VPN privé avec OpenVPN

Dans ce tutoriel, nous allons apprendre à créer un serveur VPN grâce à OpenVPN, c'est un client/serveur VPN open source. Il permet de créer assez facilement un VPN sur n'importe quel machine Linux ou Windows et de s'y connecter avec pratiquement tous les systèmes d'exploitation.

Introduction

Ce tutoriel se base sur une distribution Linux Debian (7 et 8). L'adresse (hostname) de notre serveur sera example.com et l'adresse IP de notre serveur sera 192.168.0.100. Il convient donc de remplacer ces informations par celles de votre serveur. Pour le VPN, nous prendrons utiliserons le réseau virtuel 10.8.0.0/24 et les DNS de Google : 8.8.8.8 et 8.8.4.4.

Installation

Afin de faciliter l'installation d'OpenVPN, nous allons utiliser les paquets présents sur les dépôts de Débian. Comme notre serveur utilisera des certificats SSL pour authentifier les clients, nous allons également installer OpenSSL ainsi que easy-rsa qui nous permettra de créer facilement les scripts SSL:

apt-get update
apt-get install openvpn openssl easy-rsa

Configuration

Création des certificats

Avant toute chose, nous allons générer tous les certificats qui seront par la suite utilisés par le serveur.

Pour ce faire, nous allons copier le dossier d'easy-rsa dans le dossier de configuration d'openVPN :

cp -R /usr/share/easy-rsa/ /etc/openvpn/easy-rsa/
cd /etc/openvpn/easy-rsa/

Ce dossier comprend un fichier de configuration où sont présentes toutes les variables par défaut : le fichier vars. N’hésitez pas à le modifier à votre guise.

Les scripts ne chargent pas automatiquement la configuration, il faut donc le faire manuellement :

source vars
./clean-all

On va maintenant pouvoir commencer la création de nos certificats.

Le premier a créer est celui de l’autorité de certification : elle servira à signer numériquement tous les certificats afin de les authentifier :

./build-ca

Vous n'avez qu'à compléter les champs demandés comme vous le souhaitez.

Le second certificat a générer est celui du serveur :

./build-key-server VPN

Complétez également les champs comme vous le souhaitez, mais ne mettez pas de mot de passe sur le certificat. Sinon, le mot de passe vous sera demandé à chaque démarrage d'OpenVPN.

Le troisième "certificat" utilisé par OpenVPN est une clé Diffie-Hellman. Elle permet l'échange des certificats de manière sécurisée. Pour la générer :

./build-dh

Pour finir, afin d'augmenter la sécurité, nous allons utiliser une clé TLS qui sera utilisée par le client pour se connecter :

openvpn --genkey --secret keys/ta.key

Configuration serveur

La création des certificats effectuée, il faut maintenant configurer le serveur OpenVPN du coté du VPS.

Le fichier de configuration serveur est celui-ci : /etc/openvpn/server.conf

Donc, soit vous partez de l'exemple de configuration présents dans les fichiers d'exemple d'OpenVPN (/usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz), soit vous utilisez mon fichier de configuration

Maintenant que notre serveur est configuré, nous allons pouvoir le redémarrer :

service openvpn restart

A ce stade, si un client se connecte sur notre serveur, il n'aura aucun accès à internet (il 'aura seulement accès au réseau virtuel du VPN). Il faut donc router le trafic entre le réseau du VPN est Internet.

Pour cela, la première étape est d'activer l'ip forward :

echo 1 > /proc/sys/net/ipv4/ip_forward

Cette commande permet seulement d'activer l'ip forward jusqu'au prochain redémarrage. Pour l'activer en permanence, il faut éditer le fichier /etc/sysctl.conf et dé-commenter la ligne suivante (ou la rajouter si elle n'est pas présente) :

net.ipv4.ip_forward = 1

Seconde étape : rediriger le trafic provenant de l'interface du VPN vers l'interface du réseau extérieur. Pour cela, nous allons utiliser iptables. Récupérez le fichier de configuration d'iptables :

wget -O /etc/init.d/iptables_vpn http://pastebin.com/raw.php?i=YTtYPHDj

Ensuite, nous allons faire en sorte que ce script se lance au démarrage du VPS :

chmod +x /etc/init.d/iptables_vpn
update-rc.d iptables_vpn defaults
/etc/init.d/firewall

La configuration du VPS est maintenant terminée.

Création d'un certificat pour client

1ère méthode :

Utilisez ce script : https://gitlab.com/remyj38/Creation-de-client-openvpn/

Suivez les instructions présentes dans le readme pour l'utiliser.

2e méthode:

Nous allons retourner dans le dossier de easy-rsa et recharger la configuration :

cd /etc/openvpn/easy-rsa/
source vars

On peut maintenant utiliser le script d'easy-rsa pour générer le certificat du client :

./build-key nom_du_client

Après avoir généré la clé, il nous faut créer une configuration pour le client. Comme pour la configuration du serveur, soit vous utilisez la configuration donnée en exemple (/usr/share/doc/openvpn/examples/sample-config-files/client.conf), soit vous utilisez la mienne : http://pastebin.com/avwBMbpb

Le fichier de configuration est a nommer en .ovpn.

Dans ma configuration, il y a quelques champs a modifier :

  • L'ip du serveur a remplacer par l'ip de votre VPS,
  • Le nom du client sur les propriétés cert et key.
  • Le contenu entre les balises ca par le contenu du fichier ca.crt (dans le dossier keys du dossier d'easy-rsa)
  • Le contenu entre les balises cert par le contenu du fichier nom_du_client.crt (dans le dossier keys du dossier d'easy-rsa)
  • Le contenu entre les balises key par le contenu du fichier nom_du_client.key (dans le dossier keys du dossier d'easy-rsa)
  • Le contenu entre les balises tsl-auth par le contenu du fichier ta.key (dans le dossier keys du dossier d'easy-rsa)

Configuration client

Sur Windows

Utilisez le setup présent sur le site d'openVPN : http://openvpn.net/index.php/open-source/downloads.html

Ensuite, placer le fichier de configuration dans le dossier de configurations d'OpenVPN (C:\Program Files\OpenVPN\config\ par défaut).

Lancez OpenVPN (toujours le lancer en administrateur). Lorsqu'il est lancé, clic droit sur l’icône dans la barre de notifications et connecter.

Sur Linux

Installez les paquets d'openVPN et d'openSSL :

apt-get install openvpn openssl

Placez ensuite la configuration dans le dossier /etc/openvpn sous le nom de client.conf.

OpenVPN est installé en tant que service. Il démarrera donc avec le système d'exploitation.

Sinon, lancez-le manuellement :

service openvpn restart

Sur Mac

Installez TunnelBlick : https://code.google.com/p/tunnelblick/wiki/DownloadsEntry#Tunnelblick_Stable_Release

Éditez votre configuration et supprimez-y tous les commentaires (TunnelBlick ne les supporte pas). Double cliquez sur votre configuration pour l'ajouter dans la liste des VPNs disponible dans TunnelBlick.

Sur Android

Installez OpenVPN connect depuis le Play Store. Importez ensuite votre configuration

Voila, vous avez maintenant un VPN fonctionnant sur tous les systèmes d'exploitation.

Vous avez une question ou une suggestion ? N'hésitez pas à réagir dans les commentaires !