«

»

Déc 20 2012

Dernier [Tuto] avant la fin du monde : OpenVPN sur Debian

Bonjour à tous, dans ce dernier tutoriel avant la fin du monde et aussi avant les fêtes de fin d’années, nous allons voir comment mettre en place un VPN sécurisé avec la solution OpenVPN sous Debian 6.

Qu’est-ce que OpenVPN ?

OpenVPN est un logiciel libre permettant de créer un réseau privé virtuel (VPN).
La particularité d’OpenVPN est qu’il permet une connexion client-serveur l’aide d’une clé privée partagée à l’avance et de certificats. Il utilise pour cela la bibliothèque d’authentification OpenSSL ainsi que le protocole SSLv3/TLSv1.

OpenVPN est disponible pour tous les systèmes d’exploitations, que ce soit Linux, Mac OSx ou Windows.

Mise en place de la platerforme de test

Pour effectuer ce tutoriel nous allons avoir besoins de deux machines virtuelles:

  • La première qui fera office de serveur VPN
  • La seconde qui fera office de machine de test pour tester le fonctionnement de la route vers le réseau interne.

En gros, voici à quoi notre infrastructure va ressembler.

Topologie que nous allons mettre en place

Topologie que nous allons mettre en place

Configuration des machines virtuelles sous VMWare

La première machine virtuelle que nous allons appeler « vpn-server » devra posséder:

  • Une carte réseaux en NAT (simulation ip publique)
  • Une carte réseau en mode lan, que nous appeler simplement LAN

La seconde machine virtuelle que nous allons appeler « lan-server » ne possédera qu’une seule carte réseau en mode lan et sur le même lan que la première machine virtuelle soit LAN.

Maintenant nous allons faire en sorte que nos deux machine virtuelles puissent communiquer entre elles sur le LAN.

Configuration de la machine vpn-server>

Sur cette machine nous allons commencer par configurer les NIC (Network Interface Cards)

eth0 étant la carte configuré en NAT et eth1 étant la carte configuré sur le LAN.

Voici donc le fichier /etc/network/interfaces associé:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
auto eth0
iface eth0 inet dhcp
metric 1

auto eth1
iface eth1 inet static
address 192.168.60.1
netmask 255.255.255.0
gateway 192.168.60.1
metric 2

On relance les interfaces réseaux avec la commande:

service networking restart

Et on active l’ip_forward

echo 1 > /proc/sys/net/ipv4/ip_forward

Attention l’IP forward sera desactivé au redémarage de la machine pour qu’il sois pris en compte automatiquement éditez le fichier /etc/sysctl.

Configuration de la machine « lan-server »

Sur la seconde machine virtuelle nous allons configurer la NIC de la façon suivante:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
 auto eth0
iface eth0 inet static
address 192.168.60.2
netmask 255.255.255.0
gateway 192.168.60.1

On redémarre la NIC avec la commande suivante:

service networking restart

Et on tente de pinger la machine vpn-server :

ping 192.168.60.1

Si le ping est OK c’est que vos machines communiquent entre elles.

Installation et configuration de OpenVPN

Sur vpn-server, nous allons installer le package OpenVPN disponible dans les dépôts de Debian:

apt-get update
apt-get install openvpn

Une fois OpenVPN installé nous allons pouvoir mettre en place les différentes clefs et certificats nécéssaires à la mise en place de notre VPN.

On copie Easy-RSA dans le dossier d’OpenVPN

cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

On créer les certificats nécéssaires à l’utilisation d’OpenVPN

Tout d’abord on va dans le dossier easy-rsa et on édite le fichier vars.

cd /etc/openvpn/easy-rsa
nano vars

A la fin du fichier remplissez les différents champs à votre convenance:

Voici le mien par exemple:

export KEY_COUNTRY="CA"
export KEY_PROVINCE="QC"
export KEY_CITY="Montreal"
export KEY_ORG="denisrosenkranz.comn"
export KEY_EMAIL="cert@denisrosenkranz.com"

Enregistrez le fichier et tapez les commandes suivantes:

. ./vars
./clean-all
./build-dh

On créer notre CA avec la commande suivante:

./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) [CA]:
State or Province Name (full name) [QC]:
Locality Name (eg, city) [Montreal]:
Organization Name (eg, company) [denisrosenkranz.comn]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [denisrosenkranz.comn CA]:
Name []:
Email Address [cert@denisrosenkranz.com]:

Une fois cela fait nous pouvons créer nos clef et certificats pour notre serveur et pour nos clients.

Création de la clef et du certfificat pour le serveur:

./build-key-server vpn-server

Generating a 1024 bit RSA private key
.............++++++
..........................................................++++++
writing new private key to 'vpn-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) [CA]:
State or Province Name (full name) [QC]:
Locality Name (eg, city) [Montreal]:
Organization Name (eg, company) [denisrosenkranz.comn]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [vpn-server]:
Name []:
Email Address [cert@denisrosenkranz.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
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:'CA'
stateOrProvinceName   :PRINTABLE:'QC'
localityName          :PRINTABLE:'Montreal'
organizationName      :PRINTABLE:'denisrosenkranz.comn'
commonName            :PRINTABLE:'vpn-server'
emailAddress          :IA5STRING:'cert@denisrosenkranz.com'
Certificate is to be certified until Dec 18 14:34:45 2022 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

Et enfin nous allons créer un certificat client:

./build-key vpn-client

Generating a 1024 bit RSA private key
...........................................++++++
.....................++++++
writing new private key to 'vpn-client.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) [CA]:
State or Province Name (full name) [QC]:
Locality Name (eg, city) [Montreal]:
Organization Name (eg, company) [denisrosenkranz.comn]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [vpn-client]:
Name []:
Email Address [cert@denisrosenkranz.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
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:'CA'
stateOrProvinceName   :PRINTABLE:'QC'
localityName          :PRINTABLE:'Montreal'
organizationName      :PRINTABLE:'denisrosenkranz.comn'
commonName            :PRINTABLE:'vpn-client'
emailAddress          :IA5STRING:'cert@denisrosenkranz.com'
Certificate is to be certified until Dec 18 14:36:01 2022 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

Et voila nos certificat et nos clefs sont crées maintenant nous allons pouvoir configurer notre serveur VPN.

Dans le dossier /etc/openvpn nous allons créer le fichier server.conf, ce fichier sera donc le fichier de configuration

nano /etc/openpvn/server.conf

Votre fichier devrais ressember à ceci:

#IP de l'interface auquel les clients VPN vont se connecter
local 192.168.10.128

port 1194
proto udp

dev tun

#Chemin des différents certificats
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/vpn-server.crt
key /etc/openvpn/easy-rsa/keys/vpn-server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem

#Adresse réseau qui sera attributés aux clients VPN
server 192.168.87.0 255.255.255.0

#On "pousse" la route 192.168.60.0 pour que nos client VPN puissent se connecter au réseau local
push "route 192.168.60.0 255.255.255.0"

Enfin vous pouvez lancer votre serveur VPN ave la commande suivante:

service openvpn restart

Maintenant que nous allons notre serveur OpenVPN fonctionnel nous allons pouvoir se connecter à partir d’un client.

Configuration d’un client OpenVPN sous Windows

Pour pouvoir se connecter à notre serveur VPN sous windows, il faut installer le client OpenVPN que vous trouverez à l’adresse suivante:
http://openvpn.net/index.php/download.html

Installez le logiciel.

Une fois le logiciel installé, récupérez sur votre serveur VPN les fichier suivants de trouvant dans le dossier /etc/openvpn/easy-rsa/keys à l’aide d’un client sftp (WinSCP, FileZilla etc..):

  • ca.crt
  • vpn-client.key
  • vpn-client.crt

Et copiez les dans le dossier C:\Program Files\OpenVPN\config ou C:\Program Files (x86)\OpenVPN\config (dépendant de votre système d’exploitation).

Dans ce même dossier créez un fichier client.ovpn et l’editer de la façon suivante:

client
dev tun
proto udp

remote 192.168.10.128 1194

ca ca.crt
cert vpn-client.crt
key vpn-client.key

Enregistrez le fichier et lancez OpenVPN GUI

Si ce message s’affiche c’est que vous êtes correctement connecté au VPN.

Vous eptes connectés au VPN

Vous êtes connectés au VPN

Maintenant, à partir de votre machine Windows, essayez de faire un ping sur 192.168.60.1 et sur 192.168.60.2

Si vous obtenez ceci c'est que tout est OK !

Si vous obtenez ceci c’est que tout est OK !

Si vous obtenez ceci c’est que tout est OK !

Vous pouvez aussi essayer de vous connecter en SSH sur 192.168.60.2

Voila ce tutoriel est terminé.

Je vous souhaites à tous de bonnes fêtes de fin d’année et une joyeuse fin du monde !

(7 commentaires)

1 ping

Passer au formulaire de commentaire

  1. soufiane

    Bonjour,Merci pour votre super tutoriel,dans le cas ou j’ai pas une addres IP-Public (192.168.10.128)comment je peux faire ??

  2. Cédric

    Bonjour,
    D’abord merci pour ce tuto qui ma permis de mettre en place OpenVPN, parcontre j’ai un problème :
    Lorsque je veux ping la machine server depuis le poste client (qui lui à bien une adresse IP attribué par le VPN) ca me met une defaillance générale
    (problème de route?)

    Ensuite j’aimerais associer OpenVPN avec un RADIUS et AD (les 2 de chez windows….) y a t-il de grosse manip a faire sur OpenVPN?

    Cédric

  3. Tang55

    Tout d’abord merci pour ce tuto :)

    J’ai cependant une petite question :
    Comment s’effectue la configuration IP des clients ?
    Le serveur OpenVPN fait-il office de serveur DHCP ou on doit configurer l’IP en « dur » sur le client ?
    (pour le subnet définit dans la ligne « server 192.168.87.0 255.255.255.0 »

    1. Denis

      Salut,

      Les adresses IP sont attribuées automatiquement aux client via la plage IP suivante:

      #Adresse réseau qui sera attribués aux clients VPN
      server 192.168.87.0 255.255.255.0
      

      La première adresses attribuée sera 192.168.87.1 et la dernière sera 192.168.87.254.

  4. Vincent

    Efficace, merci !

  5. Vincent

    Avec cette configuration es-ce que plusieurs clients simultanés peuvent se connecter au serveur ?

    1. Denis

      Bien sur, il suffit de générer des certificats pour chaque clients.

      Dans le dossier /etc/openvpn/easy-rsa

      Tu tape les commandes suivantes:

      . ./vars
      ./build-key vpn-client2
      

      Tu récupère dans le dossier keys les fichiers
      ca.crt
      vpn-client2.crt
      vpn-client2.key

      Et tu configure ton client VPN comme dans le tuto avec ces nouveaux certificats.

      Voici par exemple les log d’OpenVPN avec deux clients connectés:

      OpenVPN CLIENT LIST
      Updated,Thu Dec 20 17:58:22 2012
      Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
      ROUTING TABLE
      Virtual Address,Common Name,Real Address,Last Ref
      GLOBAL STATS
      Max bcast/mcast queue length,0
      END
      c 20 17:58:26 2012
      ROUTING TABLE
      Virtual Address,Common Name,Real Address,Last Ref
      192.168.87.10,vpn-client2,192.168.2.55:1194,Thu Dec 20 17:59:20 2012
      192.168.87.6,vpn-client,192.168.2.13:1194,Thu Dec 20 17:58:22 2012
      GLOBAL STATS
      Max bcast/mcast queue length,0
      END
      
  1. Tech Digest 20 02 13 ← 3615alex

    […] Installation d’un VPN avec OpenVPN : http://denisrosenkranz.com/… […]

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Lire les articles précédents :
tux-bonne-annee
Le site fête sa première année !

Le 1er décembre 2011 j'ai posté le premier article de ce blog.

Fermer