ConfigOpenVPN

Un article de Toulouse Sans Fil, un réseau wifi libre sur Toulouse.

Image:Travaux.gif Cette page présente un projet en cours.
Son contenu n'est pas finalisé.

Cette page détaille la configuration d'OpenVPN[1] (http://openvpn.net/) pour relier un client VPN au réseau de Toulouse Sans Fil en l'absence de voisin accessible en WiFi. Cet exemple de configuration vise en premier lieu une plateforme basée sur la distribution GNU/Linux OpenWRT [2] (http://www.openwrt.org) mais peut-être adapté pour tout autre système.

Sommaire

Avant propos

Avant de procéder à l'installation d'OpenVPN, vous voulez peut-être configurer la TSFbox selon nos recommandations basées sur la distribution GNU/Linux OpenWRT [3] (http://www.openwrt.org) : dans ce cas, suivez d'abord la procédure indiquée sur cette page.

Pour plus d’informations sur OpenVPN ou son utilisation sur d’autres systèmes qu’OpenWRT, vous pouvez également consulter cette page.

Installation/Mise à jour des paquets

L’installation d’OpenVPN nécessite également l’installation des paquets kmod-tun, liblzo, zlib et libopenssl. Il faudra également prévoir un client NTP (Network Time Protocol) tel que ntpclient pour mettre la plateforme à l’heure ; les certificats SSL sur lesquels repose la sécurité du VPN nécessitent une plateforme « à l’heure ».

L’installation nécessite un espace total de près de 900ko. Avant de procéder à l’installation, vérifiez que la plateforme dispose d’assez d’espace libre avec la commande df.

root@drien:~# df
Filesystem           1k-blocks      Used Available Use% Mounted on
none                      7152      3052      4100  43%       /tmp
/dev/mtdblock/4     2048       576      1472  28%        /jffs
mini_fo:/jffs           1216      1216         0   100%        /

Dans cet exemple, il reste 1472ko libres, ce qui est donc suffisant. On vérifie alors que l'on a accès à Internet sur la plateforme, on télécharge la liste des paquetages et on installe les paquetages liés à OpenVPN.

ipkg update
ipkg install ntpclient openvpn

En fonction de la rapidité de la mémoire de votre plateforme, cette étape peut être plus ou moins longue (sur une plateforme basée sur un SOC Atheros telle que la LS2 ou la Fonera, cette opération dure systématiquement plusieurs minutes, bloquant même le terminal !).

Configuration de la mise à l’heure automatique

Si cela n’a pas été déjà fait comme indiqué dans nos recommandations, automatisez la mise à jour régulière de l’heure système. Pour cela, ajoutez cette ligne dans la table cron (dans /etc/cron/root) qui provoquera une mise à jour de l’heure toutes les 30 minutes.

*/30 * * * * /usr/sbin/ntpclient -s -h pool.ntp.org

Si votre plateforme ne dispose pas d’horloge système (comme c’est le cas sur les WRT, Meraki, Fonera, LS2, etc.) cette étape est incontournable car les certificats SSL sur lesquels repose la sécurité d’OpenVPN nécessitent une plateforme « à l’heure ».

Configuration d’OpenVPN

Si cela n’a pas fait par l’installation du paquet, créez un dossier /etc/openvpn qui contiendra toute la configuration d’OpenVPN.

mkdir /etc/openvpn

Contactez-nous pour obtenir un certificat. Un certificat se décompose en 3 fichiers : un fichier ca.crt relatif au serveur VPN, un fichier xxx.crt et un fichier xxx.key, tous deux propres à chaque client. Placez ces trois fichiers dans le dossier /etc/openvpn par un moyen sécurisé tel que scp. Ne copiez jamais votre certificat sur un média non sécurisé tel que samba ou http !

Placez le contenu suivant dans un fichier nommé /etc/openvpn/client.conf en prenant soin d’adapter les deux lignes commençant par cert et key selon le nom des fichiers propres à votre certificat.

client
dev tap
proto udp
remote gandibox.toulouse-sans-fil.net 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca /etc/openvpn/ca.crt
cert /etc/openvpn/xxx.crt
key /etc/openvpn/xxx.key
ns-cert-type server
comp-lzo
verb 0

A ce stade, vous devez pouvoir lancer OpenVPN en ligne de commande pour faire un test.

root@drien:/etc/openvpn# openvpn --config /etc/openvpn/client.conf –float
Thu Jun  5 22:09:04 2008 OpenVPN 2.0.9 mipsel-linux [SSL] [LZO] [EPOLL] built on Sep 30 2007
[...]
Thu Jun  5 22:09:06 2008 TUN/TAP device tap0 opened
Thu Jun  5 22:09:06 2008 /sbin/ifconfig tap0 172.31.0.3 netmask 255.255.0.0 mtu 1500 broadcast 172.31.255.255
Thu Jun  5 22:09:06 2008 Initialization Sequence Completed

Ouvrez une autre console et constatez par un ifconfig qu’une nouvelle interface tap0 a été crée et comporte une adresse IP commençant par 172.31. Vous devez pouvoir pinguer le serveur qui a pour adresse 172.31.254.254

root@drien:~# ping 172.31.254.254
PING 172.31.254.254 (172.31.254.254): 56 data bytes
64 bytes from 172.31.254.254: icmp_seq=0 ttl=64 time=23.0 ms
64 bytes from 172.31.254.254: icmp_seq=1 ttl=64 time=23.3 ms

--- 172.31.254.254 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 23.0/23.1/23.3 ms

Tuez OpenVPN par un CTRL+C.

Automatiser le lancement d’OpenVPN au boot

Créez un fichier /usr/sbin/start-openvpn et placez-y le contenu suivant :

#!/bin/sh

# A simple script to run ntpdate multiple times to set the date
# before running openvpn. Useful on devices that do not have an RTC
# and so don't have the right time and date set at boot time.

while [ $((`date +%Y` < 2005 )) = 1 ]; do

      /usr/sbin/ntpclient -c 1 -s -h pool.ntp.org;
      sleep 5s;
done

# Date correctly set. Running openvpn now
mkdir -p /var/run
openvpn --writepid /var/run/openvpn.pid --daemon --config /etc/openvpn/client.conf --float

exit

Rendez-le exécutable.

chmod 755 /usr/sbin/start-openvpn

puis automatisez son lancement à chaque boot, par exemple en le rajoutant dans le fichier /etc/init.d/done

#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org

START=95
boot() {
        [ -d /tmp/root ] && {
                lock /tmp/.switch2jffs
                firstboot switch2jffs
                lock -u /tmp/.switch2jffs
        }

        # set leds to normal state
        . /etc/diag.sh
        set_state done

        # launch openvpn
        /usr/sbin/start-openvpn &
}

Inclure l’interface réseau OpenVPN dans le démon de routage olsrd

Afin de rendre accessible votre plateforme à l’ensemble du réseau, il est nécessaire d’inclure l’interface OpenVPN dans le processus automatique de routage.

Modifiez le fichier de configuration /etc/olsrd.conf de manière à inclure l’interface tap0 créée par OpenVPN dans son processus de diffusion des routes. Pour cela, ajoutez "tap0" à la liste des interfaces sur lesquelles travaille olsrd.

[...]
Interface "wl0" "tap0"
[...]