Je me suis penché il y’a peu sur la mise en place d’un VPN, et ce pour plusieurs raisons :

  • des problèmes de peering impactaient un jeu en ligne auquel je joue, provoquant moult déconnexions et autres latences abominables,
  • les dérives sécuritaires de notre gouvernement m’ont convaincu que je devais me préparer à être capable de chiffrer l’intégralité de mon trafic internet,
  • j’étais curieux de le faire depuis un moment déjà.

Bref me voilà donc parti en consultation intensive des comparatifs d’offres de VPN, et de documentation technique sur le sujet. Un article de Bluetouff m’a convaincu qu’il était important d’avoir le contrôle total des deux extrémités du VPN.

J’ai donc recherché du côté des offres de serveurs dédiés et particulièrement les VPS offrant généralement des performance suffisante à un prix à peine plus élevé que celui des abonnements VPN haut de gamme.Coté VPS, l’offre minimale d’AutoVPS fourni les performances matérielles nécessaires à la création d’un VPN pour plusieurs utilisateurs, et les serveurs sont localisés en Allemagne, ce qui répond à mon problème de peering les serveurs de MMOs étant généralement hébergés en Allemagne. D’autres offres existent très certainement sur le marché, mais comme celle-ci correspond à mes critères de coûts, de localisation géographique des serveurs et de réactivité du support, je n’ai pas poussé la recherche plus avant.

Première étape : l’installation du serveur. Elle se fait de façon, rapide, et automatique, pas de soucis particulier de ce côté là.

Une fois le serveur installé et démarré, il convient de modifier le mot de passe de root, puis de créer un utilisateur que nous allons utiliser pour nous connecter en ssh sur le serveur. Cet utilisateur étant bien entendu ajouté à la liste des Sudoers (fichier « /etc/sudoers ») avec tout les droits.

Pour vous éviter de chercher, n’oubliez pas de modifier le fichier « /etc/network/interfaces » pour avoir l’interface ethernet en auto (ligne « auto eth0 » dans le fichier ci-dessous). Et ce, tout simplement pour avoir l’interface ethernet qui redémarre proprement si vous fait un « /etc/init.d/networking restart ».

duncane@vp:~$ cat /etc/network/interfaces
This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp
auto eth0
duncane@vp:~$

Il faut ensuite installer le paquet dont nous allons avoir besoin à l’aide de la commande suivante, si des dépendances sont nécessaires, elles seront automatiquement installées avec le paquet.

sudo apt-get install openvpn

L’installation du serveur est maintenant complète, il ne reste plus qu’à le configurer.

Seconde étape : génération des certificats OpenSSL permettant l’établissement du tunnel crypté.

cd ~
mkdir sslkeys
cd /usr/share/doc/openvpn/examples/easy-rsa/2.0/
cp * ~/sslkeys
cd ~/sslkeys
nano vars

Une fois dans la phase d’édition du fichiers vars, il faut aller à la fin et modifier le bloc :

# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY=""
export KEY_PROVINCE=""
export KEY_CITY=""
export KEY_ORG=""
export KEY_EMAIL=""

Avec la consigne que je reprend simplement du fichier : Ne pas laisser de champs vide dans cette partie.

La génération des certificats qui vont être utilisés pour le cryptage se fait via la suite de commande suivante. Le « .(espace) » avant le ./vars n’est pas une faute, on peut également le remplacer par un « source vars » qui permet de rendre l’export des variables contenu dans le fichier que vous avez édité durable (mais non permanent).

. ./vars
./clean-all
./build-ca
./build-key-server NomDuServeurVPN
./build-key NomDeLUtilisateur
./build-dh
sudo openvpn --genkey --secret keys/ta.key

Nous nous retrouvons avec les fichiers suivants :

ca.crt
ca.key
NomDuServeurVPN.crt
NomDuServeurVPN.key
NomDeLUtilisateur.crt
NomDeLUtilisateur.csr
NomDeLUtilisateur.key
ta.key
dh1024.pem

6 de ces fichiers sont nécessaires au serveur OpenVPN pour pouvoir fonctionner, et il vous faut les mettre dans le dossier /etc/openvpn

sudo cp ./keys/ca.crt /etc/openvpn/
sudo cp ./keys/ca.key /etc/openvpn/
sudo cp ./keys/NomDuServeurVPN.crt /etc/openvpn/
sudo cp ./keys/NomDuServeurVPN.key /etc/openvpn/
sudo cp ./keys/dh1024.pem /etc/openvpn/
sudo cp ./keys/ta.key /etc/openvpn

Les fichiers suivants sont à copier sur le client (via scp par exemple).

ca.crt
NomDeLUtilisateur.crt
NomDeLUtilisateur.key
ta.key

Troisième étape : configuration du daemon OpenVPN.

cd /usr/share/doc/openvpn/examples/sample-config-files/
gunzip server.conf.gz
cp server.conf /etc/openvpn/
cd /etc/openvpn/
nano server.conf

Une fois dans le fichier de configuration de votre serveur, les éléments principaux à trouver sont les suivants :

# Ports en écoute
port 443

# TCP or UDP server?
proto tcp

# ==> port 443 + tcp = HTTPS

# Type d’interface réseau virtuelle créée
dev tun

# Nom des fichiers servant à l’authentification des clients via OpenSSL
ca ca.crt
cert NomDuServeurVPN.crt
key NomDuServeurVPN.key # This file should be kept secret
dh dh1024.pem
tls-auth ta.key 0

# Adresse du réseau virtuel (Le serveur aura l’adresse 10.8.0.1) et persistance du pool
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

# Remplacement de la default gateway sur le client
push "redirect-gateway def1 bypass-dhcp"

keepalive 10 120

# Activation de la compression
comp-lzo

# uset et group pour le processus
user openvpn
group openvpn

# Ces lignes permettent de rendre persistante la connexion
persist-key
persist-tun

# Output a short status file showing
# current connections, truncated
# and rewritten every minute.
status openvpn-status.log

# Niveau de log
verb 1

Quatrième étape : la configuration du client : Elle est relativement succincte, vous trouverez celle que j’emploie ici.

client
dev tun
proto tcp

remote ip.du.serveur.vpn 443

resolv-retry infinite

persist-key
persist-tun

ca ca.crt
cert NomDeLUtilisateur.crt
key NomDeLUtilisateur.key
tls-auth ta.key 1

comp-lzo

verb 3

Sous Windows Vista et Seven, il se peut que vous ayez le message d’erreur, indiquant que les routes n’ont pas pu être crées. Il suffit dans ce cas d’ajouter les lignes suivantes à la configuration du client et d’éxecuter le client avec les privilèges administrateurs.

route-method exe
route-delay 2

Cinquième et dernière étape : Activation de l’IP Masquerading. La dernière étape à faire, sur le serveur, pour que vous puissiez vous connecter à Internet à travers votre tunnel VPN est la suivante :

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE

Pour rendre ce paramètre permanent dans le serveur, il vous faut éditer le fichier « /etc/sysctl.conf » et configurer le paramètre :

net.ipv4.conf.default.forwarding=1

Une fois ces étapes remplies, il vous suffit d’utiliser votre client OpenVPN pour vous connecter, et votre IP publique est dorénavant celle du serveur VPN.

A bientôt pour de nouvelles aventures.

2 Comments

2 responses to Mise en place d’un VPN – OpenVPN, Debian

  1. khaldoun on octobre 2, 2011 at 12:26

    Bonjour,
    Merci pour cette article, pour les VPS on peut trouver chez hetzner en allemagne des vps de bonne qualité a bon prix, a 8 euros on a l’equivalent d’un 20 euros en france

  2. Duncane on octobre 19, 2011 at 13:28

    Effectivemen Hetzner fourni aussi des services de ce type à bas prix, mais avec un support en anglais/allemand.

    AutoVPS fourni un support en français, OVH également, et Dedibox fourni des serveurs à environ 15€ par mois.

Laisser un commentaire