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 : |
Pour
le routeur/firewall serveur VPN : |
|
Après
la compilation vous devez créer un périphérique
tun sur votre système : [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
Copyright © 04/02/2004, Arnofear
![]() |
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 |