ConfigOpenVPN
Un article de Toulouse Sans Fil, un réseau wifi libre sur Toulouse.
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" [...]
