cd ..
Mise en place d'un serveur VPN avec OpenVpn
Rédaction : Janvier 2007
Doc basé sur : http://openvpn.net/howto.html
Sommaire :
- Installation d'OPENVPN côté serveur
- Installation sur un client Windows XP
- Connexion des clients et test du réseau

1.Installation du serveur OPENVPN :
Dans un premier on installe la librairie LZO :
[root@mi2-08 openvpn-2.0.9]# urpmi liblzo1
- Ensuite on lance l'installation de OPENVPN depuis les sources car URPMI permet d'installer la version 1.6 or la version 2.0 disponible sur le site d'OPENVPN apporte plus de fonctionnalité donc on choisi l'installation avec les sources :
./configure, make puis make install
On créé l'arborescence du serveur :
-> /etc/openvpn/
-> On copie le répertoire easy-rsa dans /etc/openvpn/
$> mkdir /etc/openvpn/keys/
$> touch /etc/openvpn/keys/index.txt
$> touch /etc/openvpn/easy-rsa/keys/serial
$> echo 01 > /etc/openvpn/easy-rsa/keys/serial
Création de la clé et du certificat de l'autorité de certification :
$> source ./vars
$> cd /etc/openvpn/easy-rsa/
$> ./build-ca
[root@mi2-08 easy-rsa]# ./build-ca
Generating a 1024 bit RSA private key
..........++++++
....................++++++
writing new private key to 'ca.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [FR]:
State or Province Name (full name) [NC]:
Locality Name (eg, city) [CAEN]:
Organization Name (eg, company) [tuxhome]:
Organizational Unit Name (eg, section) []:tuxhome
Common Name (eg, your name or your server's hostname) []:server
Email Address [me@tuxhome.org]:
Génération de la clé et du certificat du serveur :
Server.crt , server.key
$> ./built-key-server server
Country Name (2 letter code) [FR]:
State or Province Name (full name) [NC]:
Locality Name (eg, city) [CAEN]:
Organization Name (eg, company) [tuxhome]:
Organizational Unit Name (eg, section) []:tuxhome
Common Name (eg, your name or your server's hostname) []:tuxserver
Email Address [me@tuxhome.org]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:tuxhome
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'FR'
stateOrProvinceName :PRINTABLE:'NC'
localityName :PRINTABLE:'CAEN'
organizationName :PRINTABLE:'tuxhome'
organizationalUnitName:PRINTABLE:'tuxhome'
commonName :PRINTABLE:'tuxserver'
emailAddress :IA5STRING:'me@tuxhome.org'
Certificate is to be certified until Jan 13 13:15:48 2017 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Génération de la clé et du certificat pour le client vpn :
- On utilise le script EASY-RSA « build-key » :
$> build-key client1
- On a exactement les mêmes options que le certificat du serveur sauf le common-name ici client1 au lieu de server.
- Le common name doit être différent sans quoi la génération ne marche pas (avec le fichier index.txt)
Génération des paramètres DIFFIE HELMAN :
$> ./built-dh Cela génère un fichier /etc/openvpn/easy-rsa/keys/dh1024.pem
[root@mi2-08 easy-rsa]# ./build-dh
Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.+......+......................................................+..............................................................+.......................................................+..+.........................+.+....................................................................................................+...............+............................................
Ensuite on recopie les fichiers suivants dans le dossier racine du serveur VPN ici /etc/openvpn :
server.crt
server.csr
server.key
ca.crt
ca.key
dh1024.pem
Voilà l’arborescence que l’on obtient côté serveur :
[root@mi2-08 openvpn]# ls -ltra
total 64
drwxr-xr-x 77 root root 4096 jan 16 13:50 ../
drwxr-xr-x 2 root root 4096 jan 16 13:58 sample/
-rwxr-xr-x 1 root root 63 jan 16 13:58 openvpn-shutdown.sh*
-rw-r--r-- 1 root root 9970 jan 16 13:59 server.conf
-rw-r--r-- 1 root root 1204 jan 16 14:22 ca.crt
-rw------- 1 root root 887 jan 16 14:22 ca.key
-rw-r--r-- 1 root root 716 jan 16 14:22 server.csr
-rw-r--r-- 1 root root 3607 jan 16 14:22 server.crt
-rw------- 1 root root 887 jan 16 14:22 server.key
drwxr-xr-x 5 root root 4096 jan 16 14:27 easy-rsa/
-rw-r--r-- 1 root root 245 jan 16 14:38 dh1024.pem
-rwxr-xr-x 1 root root 782 jan 16 14:41 openvpn-startup.sh*
drwxr-xr-x 4 root root 4096 jan 16 14:41 ./
-rw------- 1 root root 0 jan 16 14:42 ipp.txt
-rw------- 1 root root 355 jan 16 14:48 openvpn-status.log
On peut donc maintenant démarrer le serveur, pour cela on va utiliser le script shell suivant :
/etc/openvpn/openvpn-startup.sh
#!/bin/sh
# A sample OpenVPN startup script
# for Linux.
# openvpn config file directory
dir=/etc/openvpn
# load TUN/TAP kernel module
modprobe tun
# enable IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
openvpn --cd $dir --daemon --config server.conf
2. Installation d'un client Windows XP :
Avant de se connecter il faut installer un client OpenVpn sur la machine XP :
openvpn-2.0.9-gui-1.0.3-install.exe
On vient ensuite configurer le client en ajoutant les clés ainsi que les certificats que l'on a généré au préalable avec OPEN-SSL (par l'intermédiaire des scripts EASY-RSA) :

On créé également un fichier de configuration : client.opvn :
client
dev tun
proto udp
remote 192.168.3.134 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
comp-lzo
verb 3
Ici on a bien réussi à établir la connexion depuis notre client 1 :
Voilà côté client les interfaces réseau, on retrouve celle du client VPN :

Ensuite on essaye de joindre le serveur VPN et un autre client :

Voila la configuration finale du serveur VPN que l’on obtient (qui marche) :
[root@mi2-08 easy-rsa]# awk '{ if ($0 != "") print $0 ;}' /etc/openvpn/server.conf | grep -v "^[#;]"
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh1024.pem
server 10.8.0.0 255.255.255.0
push "redirect-gateway"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 4
[root@mi2-08 easy-rsa]#
Du côté du serveur voila les interfaces réseau :
[root@mi2-08 easy-rsa]# ifconfig
eth0 Lien encap:Ethernet HWaddr 00:0A:E6:05:E0:4D
inet adr:192.168.3.134 Bcast:192.168.3.255 Masque:255.255.255.0
adr inet6: 2001:470:1f01:1890:20a:e6ff:fe05:e04d/64 Scope:Global
adr inet6: fe80::20a:e6ff:fe05:e04d/64 Scope:Lien
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:271700 errors:0 dropped:0 overruns:0 frame:0
TX packets:196848 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:1000
RX bytes:112375753 (107.1 Mb) TX bytes:44042457 (42.0 Mb)
Interruption:20 Adresse de base:0x1000
lo Lien encap:Boucle locale
inet adr:127.0.0.1 Masque:255.0.0.0
adr inet6: ::1/128 Scope:Hôte
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:18377 errors:0 dropped:0 overruns:0 frame:0
TX packets:18377 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:0
RX bytes:1668555 (1.5 Mb) TX bytes:1668555 (1.5 Mb)
tun0 Lien encap:UNSPEC HWaddr 00-00-88-FF-01-00-78-90-00-00-00-00-00-00-00-00
inet adr:10.8.0.1 P-t-P:10.8.0.2 Masque:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:38 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 lg file transmission:100
RX bytes:2950 (2.8 Kb) TX bytes:240 (240.0 b)
[root@mi2-08 easy-rsa]#
Test avec le SNIFFER ETHEREAL sur des paquets du VPN :
Sur le client 1 qui tourne sous windows, on voit bien que tout le trafic qui circule sur le VPN est encapsulé dans un paquet « chiffré » et le protocole utilisé et UDP et le port 1194 du serveur (voir plus haut la configuration du serveur), il est donc impossible pour quelqu'un qui « snif » de récupérer les données en clair.