Pour toute suggestion, ou demande d'aide : lehmann@free.fr
Document en version 0.3 du 14/02/2004.
Ensuite, si le périphérique /dev/net/tun n'existe pas, le créer :
mkdir /dev/net/ && mknod /dev/net/tun c 10 200
La commande suivante installe tout cela sans douleur :
apt-get install liblzo-dev liblzo1 libssl-dev libssl0.9.6 openssl autoconf autoconf2.13 automake autotools-dev
Nous utiliserons ici openvpn-1.3.2.
Copier les sources compressées dans le répertoire /usr/local/src/ et les décompresser. Nous obtiennons alors le répertoire /usr/local/src/openvpn-1.3.2. Se positionner dans le répertoire et taper les commandes suivantes : ./autogen.sh
./configure
make
make install
| | | 192.168.1.1| |192.168.1.2 | | |
| client|--| FW1 |--| FW2 |--|serveur |
|192.168.0.100| |192.168.0.1 | | 192.168.2.1| |192.168.2.100|
Nous avons un client (réseau 192.168.0.0/24) qui tente de se connecter sur un serveur (réseau 192.168.2.0/24) en passant par un réseau non-sûr (réseau 192.168.1.0/24). À chaque sortie/entrée d'un réseau, se trouvent des firewall-routeurs (FW1 et FW2). C'est entre ces 2 machines que nous allons créer un réseau privé virtuel. Ce réseau virtuel reposera sur le réseau 192.168.1.0/24, mais n'utilisera pas ces adresses. Ce nouveau réseau sera 10.4.0.0/24, avec FW1 ayant pour adresse 10.4.0.1 et FW2 ayant pour adresse 10.4.0.2.
Nous allons voir 3 cas :
Sur FW1 :
openvpn --remote 192.168.1.2 --port 8000 --dev tun1 --ifconfig 10.4.0.1 10.4.0.2 --comp-lzo --verb 5
Sur FW2 :
openvpn --remote 192.168.1.1 --port 8000 --dev tun1 --ifconfig 10.4.0.2 10.4.0.1 --comp-lzo --verb 5
Quelques explications s'imposent :
On crée un réseau point à point entre les adresses 10.4.0.1 et 10.4.0.2, sur les ports 8000 à chaque extrémité. On compresse les données (option --comp-lzo) afin d'utiliser moins de bande-passante.
Le mode 5 de verbose peut être omis. Pour information, voici les différents niveaux :
openvpn --genkey --secret LaClef
Copier cette clef sur chaque machine établissant le VPN. Le fichier doit se trouver dans le répertoire courant où nous exécuterons la commande pour lancer le vpn.
Sur FW1 :
openvpn --remote 192.168.1.2 --port 8000 --dev tun1 --ifconfig 10.4.0.1 10.4.0.2 --verb 5 --secret LaClef
Sur FW2 :
openvpn --remote 192.168.1.1 --port 8000 --dev tun1 --ifconfig 10.4.0.2 10.4.0.1 --verb 5 --secret LaClef
mkdir demoCA
cd demoCA
touch index.txt
echo ``01'' > serial
mkdir newcerts
Toutes les autres manipulations vont se faire sur FW1.
Nous allons maintenant créer les clefs de cryptage :
Voici la clef de FW1 (il faut au-moins renseigner le CommonName) :
openssl req -nodes -new -keyout LeFW1.key -out LeFW1.csr
Voici la clef de FW2 (il faut au-moins renseigner le CommonName en mettant un nom différent que précédemment) :
openssl req -nodes -new -keyout LeFW2.key -out LeFW2.csr
Maintenant, nous créons le certificat :
openssl req -nodes -new -x509 -keyout tmp-ca.key -out tmp-ca.crt
Ensuite nous signons les clefs privées avec le certificat (on obtient la clef publique) :
openssl ca -cert tmp-ca.crt -keyfile tmp-ca.key -out FW1.crt -in FW1.csr
openssl ca -cert tmp-ca.crt -keyfile tmp-ca.key -out FW2.crt -in FW2.csr
Mettre la clef de FW2, la clef publique de FW2, et le certificat (c'est-à-dire les fichiers FW2.key, FW2.crt, et tmp-ca.crt) sur la machine FW2.
Créer, toujours sur FW1, les paramètres Diffie Hellman :
openssl dhparam -out dh1024.pem 1024
Nous pouvons maintenant établir le VPN :
Sur FW1 :
openvpn --remote 192.168.1.2 --port 8000 --dev tun1 -ifconfig 10.4.0.1 10.4.0.2 --tls-server --dh dh1024.pem --ca tpm-ca.crt --cert FW1.crt --key FW1.key --reneg-sec 3000 --comp-lzo --verb 5
Sur FW2 :
openvpn --remote 192.168.1.1 --port 8000 --dev tun1 -ifconfig 10.4.0.2 10.4.0.1 --tls-client --ca tpm-ca.crt --cert FW2.crt --key FW2.key --reneg-sec 3000 --comp-lzo --verb 5
Ensuite, pour que le client puisse contacter le serveur :
Sur FW1 :
echo 1 > /proc/sys/net/ipv4/ip_forward
route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.4.0.2
Sur FW2 :
echo 1 > /proc/sys/net/ipv4/ip_forward
route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.4.0.1
Il y a de forte chance que le firewall bloque le traffic passant par le tunnel. Pour résoudre le problème, taper la commande suivante pour FW1 et FW2 (attention, le filtrage est à affiner, car la commande suivante ouvre TOUT pour le VPN) :
iptables -A FORWARD -i tun1 -j ACCEPT
____________ ____________
| Maxime | | Guillaume |
|192.168.1.10| |192.168.2.10|
| |
| |
| |
| 192.168.1.1 | | 192.168.2.1 |
| FW1 | VPN | FW2 |
|195.221.137.1|10.4.0.2<---------------->10.4.0.1|194.200.150.1|
| |
| |
| |
| |
| |
| |
| |
| 195.221.137.2 |
| | | |
-------------------|INTERNET|-------------------
| |
194.200.150.2
Le VPN n'est plus entre 192.168.1.1 et 192.168.1.2, mais entre 195.221.137.1 et 194.200.150.1 .
Les tables de routages sont les suivantes:
Sur FW1 :
echo 1 > /proc/sys/net/ipv4/ip_forward
route add default gw 195.221.137.2
route add -net 192.168.2.0 netmask 255.255.255.0 gw 10.4.0.1
Sur FW2 :
echo 1 > /proc/sys/net/ipv4/ip_forward
route add default gw 194.200.150.2
route add -net 192.168.1.0 netmask 255.255.255.0 gw 10.4.0.2
Sur INTERNET :
Aucune configuration particulière mis à part la reconnaissance des réseaux 192.221.137.0 et 194.200.150.0 (rentré automatiquement dans la table de routage lors de l'activation des interfaces réseaux).