| Intitulé du document : | Comment installer/configurer un serveur VPN avec OpenVPN ? |
|---|---|
| Localisation : | http://www.opendoc.net/comment-installer-configurer-serveur-vpn-openvpn |
| Auteur : | Alexandre Bray |
| Vos questions : | support@opendoc.net |
| Date de création : | 2010/05/20 |
| Date de modification : | 2010/09/26 |
| source : | Professionnel http://fr.wikipedia.org/wiki/OpenVPN |
| Tags : | |
| Etat de la documentation : | |
| Vous souhaitez contribuer : | Comment soutenir opendoc ? |
| Informations : | Quelle est notre démarche ? |
| Licence : | ![]() opendoc.net est mis à disposition selon les termes de la licence Creative Commons Paternité - Pas d'Utilisation Commerciale - Partage à l'Identique 3.0 non transcrit. |
OpenVPN permet à des pairs de s'authentifier entre eux à l'aide d'une clé privée partagée à l'avance, de certificats ou de couples de noms d'utilisateur/mot de passe. Il utilise de manière intensive la bibliothèque d'authentification OpenSSL ainsi que le protocole SSLv3/TLSv1. Disponible sous Solaris, Linux, OpenBSD, FreeBSD, NetBSD, Mac OS X, Windows 2000, XP et Vista, il offre aussi de nombreuses fonctions de sécurité et de contrôle. OpenVPN n'est pas compatible avec IPsec ou d'autres logiciels VPN. Le paquet tout entier contient un binaire pour les connexions du client et du serveur, un fichier de configuration optionnel et une ou plusieurs clés suivant la méthode d'authentification choisie.
Cette documentation décrira un mode opératoire pour la réalisation de tunnels sous OpenVPN. La particularité et de proposer une solution intégralement routée afin de pourvoir réaliser du filtrage client → serveur ou client → client avec Iptables.
Le contexte de réalisation du projet peut être assimilé a un besoin d'un petite structure concernant la connexion de plusieurs sites. Imaginons une petite structure d'une vingtaine de personnes. Le “SITE 1” serait le bâtiment principal avec les utilisateurs et serveurs. Le “SITE 2” serait une filiale avec des utilisateurs s'appuyant sur la GED 1) hébergé sur le “SITE 1”. Enfin des commerciaux, mobiles, travailent à distance avec leurs pc et synchronisent leurs agenda avec leurs smartphone (calDAV sous Android). C'est un besoin concret en terme flexibilité et de sécurité.
########## ##########
# SITE 1 # # SITE 2 #
########## ##########
Utilisateurs Utilisateurs +---------------+
| SRV ARCHIVAGE |
LAN # # # # LAN2 # # # +--------+------+
192.168.24.0/24 | | | | 192.168.26.0/24 | | | |
+------------+--+--+--+ +----------+--+--+----------------+
| |
| |
| +-------+ +--------+ |
| | SUP 1 | | BACKUP | |
| +---+---+ +---+----+ |
,-:-. |.8 |.10 ,-:-.
( X )-------+-------------+ ( X )
`-:-' DMZ `-:-'
| 192.168.25.0/24 |
| |
| |
| mmmmm m m
| # m mm mm#mm mmm m mm m mm mmm mm#mm
+ -------------- # #" # # #" # #" " #" # #" # # +----------------+
# # # # #"""" # # # #"""" # -----------+ SITE MONOPOSTE | Linux
mm#mm # # "mm "#mm" # # # "#mm" "mm +----------------+ Windows
192.168.242.5 Mac
Smartphone
Vous trouverez ici quelques informations sur l'installation et d'OpenVPN sur différentes distribution.
| N° | Commentaires | Support visuel |
|---|---|---|
| 1 | - Ouvrez une session administrateur - Télécharger l'exécutable sur le site openvpn | |
| 2 | - Débuter l'installtion en double cliquant sur l'application. - Cliquer sur Next > | |
| 3 | - Accepter la licence - Cliquer sur I Agree | |
| 4 | - Sélectionner les éléments suivant à installer : - OpenVPN User-Space Components - OpenVPN GUI - OpenVPN Service - OpenVPN FIle Associations - OpenSSL DLLs - OpenSSL Utilities - TAP-Win32 Virtual Ethernet Adaptater - Add OpenVPN to PATH - Cliquez sur Next > | |
| 5 | - Le répertoire d'installation par défaut est C:\Program Files\OpenVPN - Cliquer sur Install | |
| 6 | - Installer l'interface virtuelle pour OpenVPN - Cliquez sur Continuer | |
| 7 | - OpenVPN est opérationnel. - Cliquer sur Next > puis Finish |
|
Cette installation peut être utilisée pour une installation serveur
en cours …
infos : si vous installez openvpn depuis les packages de votre distribution, easy-rsa sera généralement installé avec.
Vous trouverez ici différents éléments nécessaires pour la création de la CA, CRT, KEY. Pour cela j'utilise Easy-rsa. Les puristes détesteront cette méthode mais elle simplifie grandement la gestion des certificats clients.
| Action | Support |
|---|---|
| copier le répertoire d'easy-rsa | cp -av /usr/share/doc/openvpn/examples/easy-rsa /home/admin |
| editer le fichier vars | cd 2.0 vim vars export KEY_COUNTRY="FR" export KEY_PROVINCE="IDF" export KEY_CITY="PARIS" export KEY_ORG="TEST" export KEY_EMAIL="contact@test.com" |
| inclure les variables | source ./vars |
| création de la CA | ./clean-all /tmp/easy-rsa/2.0$ ./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) [IDF]: Locality Name (eg, city) [PARIS]: Organization Name (eg, company) [TEST]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [TEST CA]: Name []: Email Address [contact@test.com]: |
| création du DIFFIE-HELLMAN | ./build-dh Generating DH parameters, 1024 bit long safe prime, generator 2 | |
| signé le CSR | ./sign-req mycert |
| créer une paire de clés pour un server openvpn | ./build-key-server server Generating a 1024 bit RSA private key ..........++++++ ................................................................................................++++++ writing new private key to 'server.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) [IDF]: Locality Name (eg, city) [PARIS]: Organization Name (eg, company) [test]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [server]: Name []: Email Address [contact@test.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /home/alex/tmp/easy-rsa/2.0/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'IDF' localityName :PRINTABLE:'PARIS' organizationName :PRINTABLE:'test' commonName :PRINTABLE:'server' emailAddress :IA5STRING:'contact@test.com' Certificate is to be certified until Jun 12 15:51:45 2020 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 |
| création d'un paire de clés pour un client openvpn | ./build-key client1 Generating a 1024 bit RSA private key .........................++++++ ......................++++++ writing new private key to 'client1.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) [IDF]: Locality Name (eg, city) [PARIS]: Organization Name (eg, company) [test]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [client1]: Name []: Email Address [contact@test.com]: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /home/alex/tmp/easy-rsa/2.0/openssl.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName :PRINTABLE:'FR' stateOrProvinceName :PRINTABLE:'IDF' localityName :PRINTABLE:'PARIS' organizationName :PRINTABLE:'test' commonName :PRINTABLE:'client1' emailAddress :IA5STRING:'contact@test.com' Certificate is to be certified until Jun 12 16:01:32 2020 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 |
Vous pouvez maintenant créer autant de client que vous le souhaitez !
Le serveur OpenVPN doit posséder les éléments suivant :
Voici une configuration type qui doit se trouvé dans /etc/openvpn/openvpn.conf :
daemon local 192.168.XXX.XXX port 443 proto tcp-server dev tun up /etc/openvpn/cmd/up.sh ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/test.crt key /etc/openvpn/keys/test.key dh /etc/openvpn/keys/dh1024.pem mode server tls-server ccd-exclusive client-config-dir /etc/openvpn/ccd keepalive 2 120 cipher DES-CBC comp-lzo max-clients 15 user nobody group nobody persist-key persist-tun status /var/state/openvpn.status verb 4
| Options | Descriptions |
|---|---|
| daemon | Fonctionne en mode “démon”, cela permet d'être lancé par le système |
| local | Indique l'adresse ip d'écoute. Elle peut être publique ou privé mais attention au DNAT |
| port | Port d'écoute |
| mode server tls-server proto tcp-server | Permet de définir un mode de fonctionnement de type serveur |
| dev tun | Permet d'imposer l'inferface de connexion de type tun |
| up | Permet de définr dans un fichier les routes a ajouter (le contenu de ce fichier sera décrit dans la suite du document) |
| ca cert key dh | Vous devez ici faire correspondre vos fichiers que vous avez générés auparavant. |
| ccd-exclusive | Permet d'imposer une condition d'authentification. |
| client-config-dir /etc/openvpn/ccd | Permet de définir un emplacement qui contiendra l'ensemble des informations propres au client. |
| status /var/state/openvpn.status | Fichier très utile pour vous permettre de statuer sur les connexions actives de votre vpn |
| verb 4 | Permet d'activer le mode verbeux. Plus le chiffre associé est grand plus les logs sont précis. |
Si vous avez bien suivie la procédure, à cette étape votre serveur vpn sous OpenVPN doit pouvoir démarrer et être en écoute. Nous allons voir maintenant comment configurer votre serveur afin que des clients puissent s'y connecter.
Placez vous dans le répertoire /etc/openvpn/ccd et créer un fichier qui portera le même que celui du client créé avec EasyRSA, exemple :
vim client1
Je vais vous présenter 2 type de fichier de configuration. Une simple mais qui ne fonctionne que sous linux et une autre plus complexe mais qui fonctionne pour tous les type d'OS et donc compatible Windows.
ifconfig-push adresse-ip-client adresse-ip-passerelle-openvpn push "route adresse-réseau masque adresse-ip-passerelle"
Prenons par exemple un réseau vpn en 192.168.243.0/24 avec comme adresse de passerelle openvpn 192.168.243.254 et comme adresse client 192.168.243.100
ifconfig-push 192.168.243.100 192.168.243.254 push "route 192.168.243.0 255.255.255.0 192.168.243.254"
La configuration est un peu plus complexe car il faut créer un réseau par client. Le plus simple est donc de créer un réseau en /30 pour avoir :
Je vous conseil de vous aider d' ipcalc. Pour cela prenez votre adresse réseau (192.168.242.0) et appliquez lui un /30. Cela vous permettra de définir votre premier réseau pour votre premier client.
ipcalc 192.168.242.0/30 Address: 192.168.242.0 11000000.10101000.11110010.000000 00 Netmask: 255.255.255.252 = 30 11111111.11111111.11111111.111111 00 Wildcard: 0.0.0.3 00000000.00000000.00000000.000000 11 => Network: 192.168.242.0/30 11000000.10101000.11110010.000000 00 HostMin: 192.168.242.1 11000000.10101000.11110010.000000 01 HostMax: 192.168.242.2 11000000.10101000.11110010.000000 10 Broadcast: 192.168.242.3 11000000.10101000.11110010.000000 11 Hosts/Net: 2 Class C, Private Internet
Comme vous pouvez le constater vous avez toutes les informations nécessaires. Le prochain réseau sera en 192.168.242.4/30
ipcalc 192.168.242.4/30 Address: 192.168.242.4 11000000.10101000.11110010.000001 00 Netmask: 255.255.255.252 = 30 11111111.11111111.11111111.111111 00 Wildcard: 0.0.0.3 00000000.00000000.00000000.000000 11 => Network: 192.168.242.4/30 11000000.10101000.11110010.000001 00 HostMin: 192.168.242.5 11000000.10101000.11110010.000001 01 HostMax: 192.168.242.6 11000000.10101000.11110010.000001 10 Broadcast: 192.168.242.7 11000000.10101000.11110010.000001 11 Hosts/Net: 2 Class C, Private Internet
A partir de ces informations, vous allez pouvoir créer votre fichier de configuration. Toujours dans le répertoire ccd créer un fichier correspondant au nom de votre client et y indiquer les informations suivantes :
ifconfig-push 192.168.242.5 192.168.246.6 iroute 192.168.242.4 255.255.255.252 push "redirect-gateway 192.168.242.6 255.255.255.252" push "route 192.168.242.4 255.255.255.252"
quelques explications :
La gestion du routage pour OpenVPN est très simple. Rappelez vous que dans le fichier de configuration principal, un option est déclarée en indiquant un fichier situé dans /etc/openvpn/cmd/up.sh. C'est ce dernier qui va vous permettre de géré correctement vos route. Voici un exemple qui est compatible avec les deux configurations proposées :
#! /bin/bash ip link set up $1 ip a a 192.168.243.254/32 dev $1 ip r a 192.168.243.0/24 dev $1 ip a a 192.168.242.6/30 dev $1 ip r a 192.168.242.4/30 dev $1
Il ne vous reste plus qu'a ajouter autant de réseau et de route que de client.
Si vous reprenez le contexte de la documentation. Le client mobile doit avoir une connexion VPN active mais aussi pouvoir avoir accès à la DMZ. Pour cela il faut reprendre la configuation du client qui se trouve dans /etc/openvpn/ccd/ et y ajouter l'information suivante :
push "route 192.168.25.0 255.255.255.0 192.168.242.6"
De cette manière le client sera que pour atteindre le réseaux DMZ il devra passer par la passerelle vpn.
Le besoin peut être le suivant :
Le serveur de supervision situé sur le “SITE 1” à besoin de réaliser des accès snmp sur le “SITE 2” afin de recueillir des informations.
D'après le contexte évoqué au début du document, nous allons aborder comment réaliser le routage d'un site distant à travers OpenVPN. Une box sous linux situé sur le “SITE 2” est connecté au serveur VPN comme un client classique avec une configuration de type 1(voir gestion-des-clients). Son adresse ip est côté VPN est 192.168.242.253. SI vous ajouter manuellement des routes avec iproute2 sur votre serveur VPN cela ne fontionnera pas. Il faut faire comprendre à OpenVPN que pour joindre le réseau en 192.168.25.0/25 il faut passer par 192.168.242.253.
Pour cela, dans votre fichier de configuration situé dans /etc/openvpn/ccd veuillez indiquer les informations suivantes :
ifconfig-push 192.168.243.253 192.168.243.254 iroute 192.168.25.0 255.255.255.0 push "route 192.168.243.0 255.255.255.0 192.168.243.254"
client nobind tls-client cipher DES-CBC dev tun float pull comp-lzo verb 4 #http-proxy X.X.X.X 8080 #http-proxy Y.Y.Y.Y 3128 /etc/openvpn/pwd basic status /var/state/openvpn.status #remote Z.Z.Z.Z remote votre-domaine.com dev tun0 proto tcp port 443 ca /etc/openvpn/keys/ca.crt key /etc/openvpn/keys/client1.key cert /etc/openvpn/keys/client1.crt
La plupart des informations ont déjà été décrites fichier-de-configuration du serveur. Néanmoins certaines options peuvent être importantes.
| Options | Descriptions |
|---|---|
| http-proxy | Peut être très utile pour initialiser un tunnel au travers un proxy. Si votre proxy nécessite authentification, vous pouvez indiquer fichier (/etc/openvpn/pwd)qui contiendra le loggin et la mot de passe |
| /etc/openvpn/pwd | le fichier contient : user mot-de-passe |
| remote | Indiquez ici l'adresse ip ou le nom de domaine de votre serveur VPN |