Implantation

Ce tutoriel développe la mise en place d'un VPN inter-sites et entre un serveur OpenVPN derrière un routeur et des nomades sans utiliser IPSec.

Il existe 3 solutions pour mettre en place un VPN :

- une solution propriétaire basée sur IPSec comme Cisco ou PPTP de Micro$oft ...
- une solution Open Source IPSec comme OpenS/WAN (qui reprend le développement de FreeS/WAN)
- une solution Open Source qui
n'utilise pas IPSec comme cIPe, vTun ou OpenVPN.

Les clients Windows ne fonctionnent pas très bien avec IPSec à moins d'utiliser des client$ VPN commerciaux.
Le protocole IPSec n'est pas prévu pour fonctionner derrière du NAT (checksum des paquets donc pas de ré-écriture)
Le protocole PPTP est instable, insécurisé mais fonctionne derrière du NAT.
cIPe ressemble à OpenVPN, mais sont développement a l'aire de stagner (?).

OpenVPN est robuste et sécurisé, il utilise une interface TUN (tunnel IP) ou TAP (tunnel ethernet).
Le tunnel TCP ou UDP en point-to-point est crypté avec SSL/TLS et une authentification X509 ou un mot de passe peut être demandé en complément.
Il fonctionne en tant que "serveur <-> multi-clients" ou "client <-> client" sous Windows 2000/XP, Linux, Mac OS X, Solaris et *BSD.
OpenVPN fonctionne derrière du NAT et gère les changements d'adresses pour les clients connectés en DHCP (avec un FAI par exemple).

Il est vivement recommandé d'utiliser un tunnel UDP à la place de TCP.
TCP fonctionne en mode connexion, ce qui veut dire que chaque datagramme intègre un numéro de séquence et un accusé de réception.
Si un accusé de réception et manquant, l'expéditeur considère que le datagramme est perdu et le ré-expédiera avec un délai d'attente supérieur.
Le délai d'attente peut dépasser la minute dans certains cas, malgré le mécanisme de fenêtrage.
Dans le cas d'un tunnel VPN, la gestion dynamique du délai est présente à l'intérieur du tunnel et en dehors du tunnel.
De ce fait si la connexion de base se dégrade et perd des paquets, TCP va alors ajuster les délais et renvoyer les datagrammes perdus.
La connexion TCP à l'intérieure du tunnel fait de même, ce qui dégradera la transmission voir la coupera.


La version 2 d'OpenVPN permet, entre autre, de mettre en oeuvre un serveur VPN écoutant sur une seule interface TUN/TAP les demandes de connexion de plusieurs clients. C'est cette configuration qui sera développée dans ce tutoriel.

Installation des packages ou source

Pour le routeur/firewall serveur VPN :
bridge-utils-0.9.6-5mdk (interface TAP)
openssl-0.9.7c-3mdk
libopenssl0.9.7-0.9.7c-3mdk
libopenssl0.9.7-devel-0.9.7c-3mdk
liblzo1-1.08-3mdk
liblzo1-devel-1.08-3mdk
openvpn-2.0*.tar.gz
(./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libdir=/lib --enable-password-save –enable-iproute2)


Pour les routeurs/firewall clients et nomades :
libopenssl0.9.7-0.9.7c-3mdk
liblzo1-1.08-3mdk
openvpn-2.0*.tar.gz

Pour le routeur/firewall serveur VPN :
bridge-utils_0.9.6-5_i386.deb (interface TAP)
openssl_0.9.7d-1_i386.deb
libssl0.9.7_0.9.7d-1_i386.deb
liblzo1_1.08-1_i386.deb
openvpn_2.0-1_i386.deb


Pour les routeurs/firewall clients et nomades :
openssl_0.9.7d-1_i386.deb
libssl0.9.7_0.9.7d-1_i386.deb
liblzo1_1.08-1_i386.deb
openvpn_2.0-1_i386.deb








Après la compilation vous devez créer un périphérique tun sur votre système :
[root@vpn user]# mkdir /dev/net

[root@vpn user]# mknod /dev/net/tun c 10 200









Configuration des Firewalls (IPTables)

Sur vos routeurs vous devez modifier votre script IPTables pour qu'il autorise les transactions d'OpenVPN. Reportez vous au tutoriel IPTables.


Création des certificats et des clefs RSA

Sur le serveur VPN nous allons générer les certificats et clefs nécessaire pour OpenVPN. Je vous conseil d'utiliser un fichier de configuration Openssl adapté, voici
le mien.

Créez le répertoire /etc/ssl/openvpn et lancez les commandes suivantes :

vpn:/etc/ssl/openvpn# mkdir certs private newcerts crl
vpn:/etc/ssl/openvpn# echo '01' > serial; touch index.txt
vpn:/etc/ssl/openvpn# ll
total 5
drwxr-xr-x  2 root  root    1024 2004-12-12 18:44 certs
drwxr-xr-x  2 root  root    1024 2004-12-12 18:47 crl
-rw-r--r--  1 root  root       0 2004-12-12 18:45 index.txt
drwxr-xr-x  2 root  root    1024 2004-12-12 18:44 newcerts
drwxr-xr-x  2 root  root    1024 2004-12-12 18:44 private
-rw-r--r--  1 root  root       3 2004-12-12 18:45 serial


Création d'un certificat autosigné :

vpn:/etc/ssl/openvpn# openssl req -nodes -new -x509 -keyout private/cakey.pem -out cacert.pem -days 3650 -config openssl-vpn.cnf

Generating a 1024 bit RSA private key
.........++++++.........
writing new private key to 'private/cakey.pem'
-----
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) [Haute-Savoie]:
Locality Name (eg, city) []:alex
Organization Name (eg, company) [alex]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:Autorité de Certification pour alex.fr
Email Address []:root@alex.fr


Création de la clef et de la requête de certificat à faire signer par votre autorité pour le serveur VPN :

vpn:/etc/ssl/openvpn# openssl req -nodes -new -keyout vpn.alex.fr.key -out vpn.alex.fr.csr -config openssl-vpn.cnf

Generating a 1024 bit RSA private key
.........++++++.........
writing new private key to 'vpn.alex.fr.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) [Haute-Savoie]:
Locality Name (eg, city) []:alex
Organization Name (eg, company) [alex]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:vpn.dmz.alex.fr (bien mettre le FQDN de votre machine)
Email Address []:root@alex.fr

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Vérification et signature de la requête de certificat :

vpn:/etc/ssl/openvpn# openssl ca -out vpn.alex.fr.crt -in vpn.alex.fr.csr -config openssl-vpn.cnf

Using configuration from openssl-vpn.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Jan 8 17:37:36 2005 GMT
Not After : Jan 8 17:37:36 2006 GMT
Subject:
        countryName         = FR
        stateOrProvinceName = Haute-Savoie
        organizationName    = alex
        commonName          = vpn.dmz.alex.fr
        
emailAddress        = root@alex.fr
X509v3 extensions:
X509v3 Basic Constraints:
  CA:FALSE
Netscape Comment:
  OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
  94:80:A6:0D:67:40:CC:55:BF:EC:9A:6A:82:14:F9:38:1C:7F:B6:86
X509v3 Authority Key Identifier:
  keyid:B1:FC:83:69:B0:1F:0E:4A:9E:86:6A:9B:19:50:41:CF:F9:32:B0:6A
DirName:/C=FR/ST=Haute Savoie/L=alex/O=alex/CN=Autorité de Certification pour alex.fr/emailAddress=root@alex.fr
serial:00

Certificate is to be certified until Jan 8 17:37:36 2006 GMT (365 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


Création des paramètres Diffie Hellman pour le cryptage du tunnel :

vpn:/etc/ssl/openvpn# openssl dhparam -out dh1024.pem 1024

Generating DH parameters, 1024 bit long safe prime, generator 2
This is going to take a long time
.....+.....++*++*++*

Copiez les fichiers vpn.alex.fr.crt, vpn.alex.fr.key, cacert.pem et dh1024.pem dans le répertoire /etc/openvpn/tls/



Le certificat et clef pour le deuxième routeur/firewall (fw.lexa.lan) :

fw:/etc/ssl/openvpn# openssl req -nodes -new -keyout fw.lexa.lan.key -out fw.lexa.lan.csr -config openssl-vpn.cnf

Generating a 1024 bit RSA private key
.........++++++.......++++++
writing new private key to 'fw.lexa.lan.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) [Haute-Savoie]:
Locality Name (eg, city) []:alex
Organization Name (eg, company) [alex]:
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:fw.lexa.lan (bien mettre le FQDN de votre machine)
Email Address []:root@alex.fr

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

fw:/etc/ssl/openvpn# openssl ca -out fw.lexa.lan.crt -in fw.lexa.lan.csr -config openssl-vpn.cnf

Using configuration from openssl-vpn.cnf
DEBUG[load_index]: unique_subject = "yes"
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 2 (0x2)
 Validity
Not Before: Jan 8 18:09:38 2005 GMT
Not After : Jan 8 18:09:38 2006 GMT
Subject:
        countryName         = FR
        stateOrProvinceName = Haute-Savoie
        organizationName    = alex
        commonName          = fw.lexa.lan
        
emailAddress        = root@alex.fr
X509v3 extensions:
X509v3 Basic Constraints:
 CA:FALSE
Netscape Comment:
 OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
 07:D9:ED:12:A1:3A:AE:1F:CA:A9:6A:7A:D8:B7:61:DA:91:1F:E4:BA
X509v3 Authority Key Identifier:
 keyid:B1:FC:83:69:B0:1F:0E:4A:9E:86:6A:9B:19:50:41:CF:F9:32:B0:6A
DirName:/C=FR/ST=Haute Savoie/L=alex/O=alex/CN=Autorité de Certification pour alex.fr/emailAddress=root@alex.fr
 serial:00

Certificate is to be certified until Jan 8 18:09:38 2006 GMT (365 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


Copiez les fichiers fw.lexa.lan.crt, fw.lexa.lan.key et cacert.pem dans le répertoire /etc/openvpn/tls/ du routeur/firewall fw.lexa.lan.
Faites de même pour l'autre routeur/firewall et les nomades, après avoir créé les certificats et clefs en indiquant bien leur FQDN dans le champs
"Common Name".

Configuration d'OpenVPN

Comme indiqué dans
l'exemple d'implantation, nous allons créer un VPN entre 3 réseaux, par l'intermédiaire de leur routeur/firewall, puis connecter plusieurs nomades vers le serveur OpenVPN (vpn.dmz.alex.fr).



Les nomades, depuis leur connexion ADSL, seront reliés au serveur VPN par un tunnel ethernet (interface TAP). De cette manière les nomades se retrouveront dans le même LAN et n'auront pas de problèmes de routage.
Les routeurs seront reliés au serveur VPN par un tunnel IP (interface TUN). Plusieurs réseaux IP seront alors interconnectés et pourront accéder au réseau 192.168.1.0/24. Une fois dans ce réseau, leur table de routage (informé par le serveur VPN) leur permettra de passer dans le réseau 192.168.0.0/24.
Par contre les machines des réseaux 192.168.0.0/16 ne pourront pas initier de connexions vers les réseaux situés derrière les clients VPN mais seulement leur répondre suite à une requête.

Note : Si vous souhaitez mettre en place un tunnel TUN et TAP sur le même serveur OpenVPN, je vous conseil de configurer d'abord le tunnel TAP puis le TUN. Comme vous devrez créer un bridge pour le tunnel TAP, il est plus logique de commencer par cette interface puisque le tunnel TUN passera par l'IP du bridge.

Configuration du serveur VPN avec une interface TAP

Créez un fichier
/etc/openvpn/serverTAP-vpn.alex.fr.conf qui contiendra :

# Configuration pour OpenVPN 2.0
# Fichier : 1 serveur TAP <-> multi-clients TAP.


# Utilisation d'une interface TAP.
dev tap0

# OpenVPN utilise le port UDP 1194 par défaut.
port 1194


# Serveur en tunnel UDP.
proto udp

# Indiquez l'adresse IP que votre serveur écoutera.
local 192.168.1.5

# Pour configurer OpenVPN en serveur TAP, vous avez le choix
# entre le mode classique ou simplifié :

#########################
# Mode server simplifié :
# Le tunnel sera établi avec l'IP 192.168.1.5 pour le serveur,
# et les clients auront une IP entre 192.168.1.15 et 192.168.1.19.
# Ici, j'autorise 5 clients, mais vous pouvez en connecter des centaines.
server-bridge 192.168.1.5 255.255.255.0 192.168.1.15 192.168.1.19
#########################

#########################
# Mode server classique :
#
;mode server
;tls-server
;ifconfig-pool 192.168.1.15 192.168.1.19 255.255.255.0
;push "route-gateway 192.168.1.5"
#########################

# Permet d'ajouter les routes suivantes sur chaque clients après

# établissement du tunnel.
push "route 192.168.0.0 255.255.255.0"
push "route 192.168.2.0 255.255.255.0"
push "route 192.168.3.0 255.255.255.0"
push "route 192.168.4.0 255.255.255.0"


# Autorise OpenVPN à sortir après 3600 secondes d'inactivité
# sur l'interface TUN/TAP.
inactive 3600

# Limite la connexion à 5 clients VPN.
max-clients 5

# Paramètres Diffie-Hellman pour crypter le tunnel
# (sur serveur tls uniquement)
dh /etc/openvpn/tls/dh1024.pem

# Notre fichier CA.
ca /etc/openvpn/tls/cacert.pem

# Notre clef public pour vpn.alex.fr.
cert /etc/openvpn/tls/vpn.alex.fr.crt

# Notre clef privée pour vpn.alex.fr.
key /etc/openvpn/tls/vpn.alex.fr.key

# Cette option permet d'en remplacer 2 autres (ping et ping-restart).
# Le serveur envoi des ping toutes les 15 secondes pour vérifier que
# la connexion est toujours active avec les clients. Utile aussi pour
# les firewalls stateful comme IPTables. Au bout de 120 secondes sans
# réponses le client est considéré comme éteint.
keepalive 15 120

# Si les négociations TLS échoues, la transaction s'arrête.
tls-exit

# On Chroot le daemon OpenVPN dans un répertoire au choix.
chroot /tmp

# Change l'UID et GID root par défaut en "nobody" et "nogroup".
user nobody
group nogroup

# Accepte seulement les connexions avec des machines ayant un
# Common Name X509 égal à nomade*.
# On peut utiliser le prefix du Common Name, ici tous les CN commençant
# par nomade (nomade1.alex.fr, nomade2.alex.fr, ...)
;tls-remote nomade

# Active la compression LZO des informations dans le tunnel.
comp-lzo

# Utilisez cette option si le daemon est en mode écoute.
ping-timer-rem

# Options facilitant la connexion après un redémarrage.
persist-key
persist-tun

# Verbosity level.
# 0 -- quiet except for fatal errors.
# 1 -- mostly quiet, but display non-fatal network errors.
# 3 -- medium output, good for normal operation.
# 9 -- verbose, good for troubleshooting
verb 3

# Fichier de statut des connexions en cours, régénéré chaque minutes.
status /etc/openvpn/logs/openvpnTAP-status.log

# Par défaut les messages de log vont dans syslog.
# Vous pouvez les mettre dans un fichier à part.
log-append /etc/openvpn/logs/openvpnTAP.log

# Pour une double sécurité, en plus de SSL/TLS, vous pouvez créez un
# "firewall HMAC" qui aidera à bloquer des attaques DoS et UDP port flooding.
#
# Générez une clef :
# openvpn --genkey --secret secret.key
#
# Le serveur et chaque clients doivent avoir une copie de cette clef.
# Le second paramètre doit être '0' sur le serveur et '1' sur les clients.
;tls-auth /etc/openvpn/tls/secret.key 0

# Sélection de la cryptographie.
# Elle doit être présente aussi sur les clients.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES


Mise en service du serveur VPN avec une interface TAP

Créez un fichier
/etc/openvpn/startTAP-vpn.alex.fr.sh pour monter le bridge avant le tunnel :

#!/bin/bash

OPENVPN="/usr/sbin/openvpn"

# On créer un tunnel persistant en mode TAP.
$OPENVPN --mktun --dev tap0

# On créer une nouvelle interface de type "bridge".
brctl addbr br0

# On ajoute l'interface du réseau DMZ et l'interface virtuelle TAP dans le bridge.
brctl addif br0 tap0
brctl addif br0 eth0

# On configure les interfaces en mode promiscuous (elles écoutent tout,
# mais n'ont pas d'adresses IP)
ifconfig eth0 0.0.0.0 promisc up
ifconfig tap0 0.0.0.0 promisc up

# On configure l'IP de l'interface "bridge" avec l'ancienne adresse de eth0.
ifconfig br0 192.168.1.5 netmask 255.255.255.0 broadcast 192.168.1.255

# On remet la passerelle par défaut, qui a été effacée lors de la création du bridge.

route add default gw 192.168.1.10

# On ajoute les routes pour atteindre les réseaux de la zone LOC.

route add -net 192.168.0.0 netmask 255.255.255.0 gw 192.168.1.11
route add -net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.11
route add -net 192.168.3.0 netmask 255.255.255.0 gw 192.168.1.11
route add -net 192.168.4.0 netmask 255.255.255.0 gw 192.168.1.11

Démarrez le serveur OpenVPN :
vpn:/etc/openvpn# ./startTAP-vpn.alex.fr.sh
vpn:/etc/openvpn# openvpn --daemon --config serverTAP-vpn.alex.fr.conf


Vérifiez les routes et interfaces :

vpn:/etc/openvpn# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.4.0    192.168.1.11  255.255.255.0  UG  0  0  0  br0
192.168.3.0    192.168.1.11  255.255.255.0  UG  0  0  0  br0
192.168.2.0    192.168.1.11  255.255.255.0  UG  0  0  0  br0
192.168.1.0    0.0.0.0       255.255.255.0  U   0  0  0  
br0
192.168.0.0    192.168.1.11  255.255.255.0  UG  0  0  0  br0

0.0.0.0        192.168.1.10  0.0.0.0        UG  0  0  0  br0

vpn:/etc/openvpn# ifconfig
br0   Lien encap:Ethernet HWaddr 00:FF:88:6F:6E:53
      inet adr:192.168.1.5 Bcast:192.168.1.255 Masque:255.255.255.0
...

eth0  Lien encap:Ethernet HWaddr 00:FF:88:6F:6E:53
...

lo    Lien encap:Boucle locale
      inet adr:127.0.0.1 Masque:255.0.0.0
...

tap0  Lien encap:Ethernet HWaddr 00:AF:16:6F:61:22
...


vpn:/etc/openvpn# netstat -paute
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat Utilisatr Inode PID/Program name
...
udp    0    0   vpn.dmz.alex.fr:1194  *:*      root    1764  769/openvpn
...



Configuration d'un nomade sous Linux avec une interface TAP

Créez un fichier /etc/openvpn/clientTAP-nomade1.alex.fr.conf qui contiendra :

# Configuration pour OpenVPN 2.0
# Fichier : valable pour plusieurs clients TAP <=> 1 serveur TAP.


# Utilisation d'une interface TAP.
dev tap0

# Indiquez l'IP publique de votre serveur OpenVPN et le numéro de port.
remote 123.123.123.1 1194

# Client en tunnel UDP.
proto udp

# Ne pas utiliser tls-client en mode server mais bien client.
client

# Notre fichier CA.
ca /etc/openvpn/tls/cacert.pem

# Notre clef public pour nomade1.alex.fr.
cert /etc/openvpn/tls/nomade1.alex.fr.crt

# Notre clef privée pour nomade1.alex.fr.
key /etc/openvpn/tls/nomade1.alex.fr.key

# Si les négociations TLS échoues, la transaction s'arrête.
tls-exit

# On Chroot le daemon OpenVPN dans un répertoire au choix.
chroot /tmp

# Change l'UID et GID root par défaut en "nobody" et "nogroup".
user nobody
group nogroup

# Active la compression LZO des informations dans le tunnel.
comp-lzo

# Options facilitant la connexion après un redémarrage.
persist-key
persist-tun

verb 3

# Pour une double sécurité.
# Le second paramètre doit être à '1' sur les clients.
;tls-auth /etc/openvpn/tls/secret.key 1

# Sélection de la cryptographie.
# Elle doit être présente aussi sur le serveur.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES


Mise en service des clients VPN Linux avec une interface TAP

Démarrez vos clients en utilisant la commande :
client:/etc/openvpn# openvpn --daemon --config clientTAP-nomade1.alex.fr.conf
ou
client:/etc/openvpn# /etc/init.d/openvpn start

Vérifiez les routes et interfaces :

client:/etc/openvpn# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
192.168.4.0   192.168.1.5  255.255.255.0  UG  0  0  0  tap0
192.168.3.0   192.168.1.5  255.255.255.0  UG  0  0  0  tap0
192.168.2.0   192.168.1.5  255.255.255.0  UG  0  0  0  tap0
192.168.1.0   0.0.0.0      255.255.255.0  U   0  0  0  
tap0
192.168.0.0   192.168.1.5  255.255.255.0  UG  0  0  0  tap0
82.82.82.1    0.0.0.0      255.255.255.0  U   0  0  0  eth0
0.0.0.0       82.82.82.1   0.0.0.0        UG  0  0  0  eth0

client:/etc/openvpn# ifconfig
eth0   Lien encap:Ethernet HWaddr 00:FF:88:6F:6E:53
      inet adr:82.82.82.1 Bcast:82.82.82.255 Masque:255.255.255.0
...

lo    Lien encap:Boucle locale
      inet adr:127.0.0.1 Masque:255.0.0.0
...

tap0  Lien encap:Ethernet HWaddr 00:AF:16:6F:61:22
      inet adr:192.168.1.15 Bcast:192.168.1.255 Masque:255.255.255.0
...


Configuration d'un nomade sous Windows avec un tunnel TAP

Installez openvpn-2.0*-install.exe sous Windows 2000 ou XP et surtout
RÉDÉMARREZ juste après pour éviter des problèmes.

Créez un fichier C:\Program Files\OpenVPN\config\clientTAP-nomade2.alex.fr.ovpn qui contiendra :

# Configuration pour OpenVPN 2.0
# Fichier : valable pour plusieurs clients TAP <=> 1 serveur TAP.


# Utilisation d'une interface TAP.
dev tap0

# Indiquez l'IP publique de votre serveur OpenVPN et le numéro de port.
remote 123.123.123.1 1194

# Client en tunnel UDP.
proto udp

# Ne pas utiliser tls-client en mode server mais bien client.
client

# Notre fichier CA.
ca cacert.pem

# Notre clef public pour nomade2.alex.fr.
cert nomade2.alex.fr.crt

# Notre clef privée pour nomade2.alex.fr.
key nomade2.alex.fr.key

# Si les négociations TLS échoues, la transaction s'arrête.
tls-exit

# Active la compression LZO des informations dans le tunnel.
comp-lzo

# Options facilitant la connexion après un redémarrage.
persist-key
persist-tun

verb 3

# Pour une double sécurité.
# Le second paramètre doit être à '1' sur les clients.
;tls-auth secret.key 1

# Sélection de la cryptographie.
# Elle doit être présente aussi sur le serveur.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES


Mise en service des clients VPN Windows 2000/XP

Vous pouvez activer OpenVPN en tant que service pour qu'il se lance automatiquement au démarrage de Windows. Il faut que votre fichier de configuration ait l'extension .ovpn
Ou alors faites un raccourcis du fichier C:\Program Files\OpenVPN\config\clientTAP-nomade2.alex.fr.ovpn dans le bureau pour le lancer manuellement.

Configuration du serveur VPN avec une interface TUN

Créez un fichier
/etc/openvpn/serverTUN-vpn.alex.fr.conf qui contiendra :

# Configuration pour OpenVPN 2.0
# Fichier : 1 serveur TUN <-> multi-clients TUN.

# Utilisation d'une interface TUN.
dev tun0

# On utilise le port UDP 1195 cette fois car le serveur TAP écoute déjà sur 1194.
port 1195


# Serveur en tunnel UDP.
proto udp

# Indiquez l'adresse IP que votre serveur écoutera.
local 192.168.1.5

# Pour configurer OpenVPN en serveur TUN, vous avez le choix
# entre le mode classique ou simplifié :

#########################
# Mode server simplifié :
# Le tunnel sera établi avec l'IP 10.0.0.1 pour le serveur,
# et les clients auront une IP entre 10.0.0.4 et 10.0.0.251.
server 10.0.0.0 255.255.255.0
#########################

#########################
# Mode server classique :
#
;mode server
;tls-server
#
# l'IP 10.0.0.1 pour le serveur.
# l'IP 10.0.0.2 pour l'interface réservée aux clients.
;ifconfig 10.0.0.1 10.0.0.2
#
# Définit la plage d'adresses qui sera utilisée pour les clients.
;ifconfig-pool 10.0.0.4 10.0.0.251
# Ajoute la route vers le réseau 10.0.0.0/24 par 10.0.0.2.
;route 10.0.0.0 255.255.255.0
#
# Si l'option client-to-client est activée :
;push "route 10.0.0.0 255.255.255.0"
# Sinon :
;push "route 10.0.0.1"
#########################

# Autorise les clients à communiquer entre eux, comme s'ils étaient
# connectés directement. Sans cette option les clients ne voient que
# leur serveur VPN.
client-to-client

# Limite la connexion à 2 clients VPN.
max-clients 2

# Enregistre les associations d'adresses attribuées aux clients
# dans un fichier pour leur redonner lors d'une reconnexion.
ifconfig-pool-persist ipp.txt

# Permet d'ajouter les routes suivantes sur chaque clients après
# établissement du tunnel.
push "route 192.168.0.0 255.255.255.0"
push "route 192.168.2.0 255.255.255.0"
push "route 192.168.3.0 255.255.255.0"
push "route 192.168.4.0 255.255.255.0"

# Paramètres Diffie-Hellman pour crypter le tunnel
# (sur serveur tls uniquement)
dh /etc/openvpn/tls/dh1024.pem

# Notre fichier CA.
ca /etc/openvpn/tls/cacert.pem

# Notre clef public pour vpn.alex.fr.
cert /etc/openvpn/tls/vpn.alex.fr.crt

# Notre clef privée pour vpn.alex.fr.
key /etc/openvpn/tls/vpn.alex.fr.key

# Cette option permet d'en remplacer 2 autres (ping et ping-restart).
# Le serveur envoi des ping toutes les 15 secondes pour vérifier que
# la connexion est toujours active avec les clients. Utile aussi pour
# les firewalls stateful comme IPTables. Au bout de 120 secondes sans
# réponses le client est considéré comme éteint.
keepalive 15 120

# Si les négociations TLS échoues, la transaction s'arrête.
tls-exit

# On Chroot le daemon OpenVPN dans un répertoire au choix.
chroot /tmp

# Change l'UID et GID root par défaut en "nobody" et "nogroup".
user nobody
group nogroup

# Active la compression LZO des informations dans le tunnel.
comp-lzo

# Utilisez cette option si le daemon est en mode écoute.
ping-timer-rem

# Options facilitant la connexion après un redémarrage.
persist-key
persist-tun

# Verbosity level.
# 0 -- quiet except for fatal errors.
# 1 -- mostly quiet, but display non-fatal network errors.
# 3 -- medium output, good for normal operation.
# 9 -- verbose, good for troubleshooting
verb 3

# Fichier de statut des connexions en cours, régénéré chaque minutes.
status /etc/openvpn/logs/openvpnTUN-status.log

# Par défaut les messages de log vont dans syslog.
# Vous pouvez les mettre dans un fichier à part.
log-append /etc/openvpn/logs/openvpnTUN.log

# Pour une double sécurité, en plus de SSL/TLS, vous pouvez créez un
# "firewall HMAC" qui aidera à bloquer des attaques DoS et UDP port flooding.
#
# Générez une clef :
# openvpn --genkey --secret secret.key
#
# Le serveur et chaque clients doivent avoir une copie de cette clef.
# Le second paramètre doit etre '0' sur le serveur et '1' sur les clients.
;tls-auth /etc/openvpn/tls/secret.key 0

# Sélection de la cryptographie.
# Elle doit être présente aussi sur les clients.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES



Configuration des autres routeurs clients VPN avec une interface TUN

Créez un fichier
/etc/openvpn/client-fw.lexa.lan.conf qui contiendra :

# Configuration pour OpenVPN 2.0
# Fichier : valable pour plusieurs clients TUN <=> 1 serveur TUN.

# Utilisation d'une interface TUN.
dev tun0

# Indiquez l'IP publique de votre serveur OpenVPN et le numéro de port.
remote 123.123.123.1 1195

# Client en tunnel UDP.
proto udp

# Ne pas utiliser tls-client en mode server mais bien client.
client

# Notre fichier CA.
ca /etc/openvpn/tls/cacert.pem

# Notre clef public pour fw.lexa.lan.
cert /etc/openvpn/tls/fw.lexa.lan.crt

# Notre clef privée pour fw.lexa.lan.
key /etc/openvpn/tls/fw.lexa.lan.key

keepalive 15 120

tls-exit

chroot /tmp

user nobody
group nogroup

comp-lzo

ping-timer-rem

persist-key
persist-tun

verb 3

# Pour une double sécurité.
# Le second paramètre doit être à '1' sur les clients.
;tls-auth /etc/openvpn/tls/secret.key 1

# Sélection de la cryptographie.
# Elle doit être présente aussi sur le serveur.
;cipher BF-CBC # Blowfish (default)
;cipher AES-128-CBC # AES
;cipher DES-EDE3-CBC # Triple-DES


Faites de même pour le routeur fw.exal.org en changeant votre clef public et clef privée.



Mise en service du serveur VPN avec une interface TUN

Démarrez le serveur OpenVPN en utilisant la commande :
vpn:/etc/openvpn# openvpn --daemon --config serverTUN-vpn.alex.fr.conf
ou
vpn:/etc/openvpn# /etc/init.d/openvpn start
qui lancera tous les fichiers .conf situés dans /etc/openvpn/

Vérifiez les routes et interfaces :

vpn:/etc/openvpn# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
10.0.0.2       0.0.0.0       255.255.255.255 UH  0  0  0  tun0
10.0.0.0       10.0.0.2      255.255.255.0   UG  0  0  0  tun0

192.168.4.0    192.168.1.11  255.255.255.0   UG  0  0  0  br0
192.168.3.0    192.168.1.11  255.255.255.0   UG  0  0  0  br0
192.168.2.0    192.168.1.11  255.255.255.0   UG  0  0  0  br0
192.168.1.0    0.0.0.0       255.255.255.0   U   0  0  0  br0
192.168.0.0    192.168.1.11  255.255.255.0   UG  0  0  0  br0
0.0.0.0        192.168.1.10  0.0.0.0         UG  0  0  0  br0



Le serveur TUN aura l'adresse IP 10.0.0.1/24

vpn:/etc/openvpn# ifconfig
br0   Lien encap:Ethernet HWaddr 00:FF:88:6F:6E:53
      inet adr:192.168.1.5 Bcast:192.168.1.255 Masque:255.255.255.0
...

eth0  Lien encap:Ethernet HWaddr 00:FF:88:6F:6E:53
...

lo    Lien encap:Boucle locale
      inet adr:127.0.0.1 Masque:255.0.0.0
...

tap0  Lien encap:Ethernet HWaddr 00:AF:16:6F:61:22
...


tun0  Lien encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00
      inet adr:10.0.0.1 P-t-P:10.0.0.2 Masque:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
...

vpn:/etc/openvpn# netstat -paute
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat Utilisatr Inode PID/Program name
...
udp    0    0   vpn.dmz.alex.fr:1194  *:*      root    1764  769/openvpn
udp    0    0   vpn.dmz.alex.fr:1195  *:*      root    1817  828/openvpn
...




Mise en service des clients VPN avec une interface TUN

Démarrez chaque clients sur les autres routeurs en utilisant la commande :
fw:/etc/openvpn# openvpn --daemon --config client-fw.lexa.lan.conf
ou
fw:/etc/openvpn# /etc/init.d/openvpn start

Vérifiez les routes et interfaces :

fw:/etc/openvpn# route -n
Table de routage IP du noyau
Destination Passerelle Genmask Indic Metric Ref Use Iface
10.0.0.5       0.0.0.0  255.255.255.255  UH   0  0  0  tun0
10.0.0.1       10.0.0.5 255.255.255.255  UG   0  0  0  tun0

192.168.5.0    0.0.0.0  255.255.255.0    U    0  0  0  eth1
192.168.4.0    10.0.0.5 255.255.255.0    UG   0  0  0  tun0
192.168.3.0    10.0.0.5 255.255.255.0    UG   0  0  0  tun0
192.168.2.0    10.0.0.5 255.255.255.0    UG   0  0  0  tun0
192.168.0.0    10.0.0.5 255.255.255.0    UG   0  0  0  tun0

123.123.123.0  0.0.0.0  255.255.255.0    U    0  0  0  eth0
0.0.0.0        123.123.123.2 0.0.0.0     UG   0  0  0  eth0

fw:/etc/openvpn# ifconfig
eth0  Lien encap:Ethernet HWaddr 00:13:A5:E4:99:04
      inet adr:123.123.123.2 Bcast:123.123.123.255 Masque:255.255.255.0
...

eth1  Lien encap:Ethernet HWaddr 52:54:3C:FB:E1:12
      inet adr:192.168.5.254 Bcast:192.168.5.255 Masque:255.255.255.0
...

lo    Lien encap:Boucle locale
      inet adr:127.0.0.1 Masque:255.0.0.0
...

tun0  Lien encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00
      inet adr:10.0.0.6 P-t-P:10.0.0.5 Masque:255.255.255.255
      UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
...

fw:/etc/openvpn# netstat -paute
Connexions Internet actives (serveurs et établies)
Proto Recv-Q Send-Q Adresse locale Adresse distante Etat Utilisatr Inode PID/Program name
...
udp    0    0   *:1195  *:*            root    1841  794/openvpn
...




Source : http://openvpn.net/20notes.html


Dernière modification : 05/12/05

 

Copyright © 04/02/2004, Arnofear

Contrat Creative Commons Ce document est publié sous licence Creative Commons
Paternité - Pas d'Utilisation Commerciale - Partage des Conditions Initiales à l'Identique :
http://creativecommons.org/licenses/by-nc-sa/3.0/deed.fr