Installation d’un serveur OpenVPN sous Debian/Ubuntu

Date: 6/10/2010 | Catégories: Open-source,Planet-libre,Reseau,Web | Tags: ,,,,,,,

Dernière mise à jour de ce billet: Le 20 octobre 2013.

Sur la longue route menant à la protection de la vie privée sur Internet, on entend de plus en plus parler des réseaux privés virtuels (VPN pour les geek). Cette technique permet la création d'une liaison chiffrée entre votre machine et un serveur hébergé sur Internet (par exemple chez un fournisseur d’accès se trouvant en France ou à l'étranger). Tous vos accès à Internet seront alors vus à partir de l'adresse IP de ce serveur VPN et non plus par celle de votre machine.

Avec la généralisation des systèmes de surveillance mis en place pour les lois de type Hadopi&Co, les offres de VPN payantes ont tendances à fleurir en ce moment sur le marché.

Nous allons dans ce billet voir comment installer et configurer son propre serveur VPN sous Ubuntu basée sur OpenVPN, une solution libre et compatible avec des clients multi-OS.

Toute petite introduction à OpenVPN

OpenVPN n'est pas un VPN IPSec. C'est un VPN SSL se basant sur la création d'un tunnel IP (UDP ou TCP au choix) authentifié et chiffré avec la bibliothèque OpenSSL.

Quelques avantages des tunnels VPN SSL:

  • Facilité pour passer les réseaux NATés (pas de configuration à faire)
  • Logiciel clients disponibles sur GNU/Linux, BSD, Windows et Mac OS X.

Installation du serveur OpenVPN

Nous allons détailler l'installation du serveur OpenVPN sur une distribution Ubuntu Server LTS 10.04 (mais la procédure doit être la même sur Debian like).

On commence par installer OpenVPN à partir des dépôts officiels:

sudo aptitude install openvpn

On copie ensuite les fichiers de configurations:

sudo mkdir /etc/openvpn/easy-rsa/

sudo cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

sudo chown -R $USER /etc/openvpn/easy-rsa/

Configuration du serveur OpenVPN

A l'aide des scripts installés dans le répertoire /etc/openvpn/easy-rsa/ nous allons configurer OpenVPN pour utiliser une authentification par clés et certificats.

On commence par éditer le fichier /etc/openvpn/easy-rsa/vars:

export KEY_COUNTRY="FR"

export KEY_PROVINCE="06"

export KEY_CITY="Nissa"

export KEY_ORG="nicolargo.com"

export KEY_EMAIL="dtc@hadopi.fr"

Ensuite on lance la séquence suivante qui va générer les clés (.key) et les certificats (.crt):

cd /etc/openvpn/easy-rsa/

source vars

./clean-all

./build-dh

./pkitool --initca

./pkitool --server server

sudo openvpn --genkey --secret keys/ta.key

On copie ensuite les clés et les certificats utiles pour le serveur dans le répertoire /etc/openvpn/:

sudo cp keys/ca.crt keys/ta.key keys/server.crt keys/server.key keys/dh1024.pem /etc/openvpn/

Puis on génère un répertoire /etc/openvpn/jail dans lequel le processus OpenVPN sera chrooté (afin de limiter les dégâts en cas de faille dans OpenVPN) puis un autre répertoire (/etc/openvpn/clientconf) qui contiendra la configuration des clients:

sudo mkdir /etc/openvpn/jail

sudo mkdir /etc/openvpn/clientconf

Enfin on créé le fichier de configuration /etc/openvpn/server.conf:

# Serveur TCP/443

mode server

proto tcp

port 443

dev tun

# Cles et certificats

ca ca.crt

cert server.crt

key server.key

dh dh1024.pem

tls-auth ta.key 1

key-direction 0

cipher AES-256-CBC

# Reseau

server 10.8.0.0 255.255.255.0

push "redirect-gateway def1 bypass-dhcp"

push "dhcp-option DNS 208.67.222.222"

push "dhcp-option DNS 208.67.220.220"

keepalive 10 120

# Securite

user nobody

group nogroup

chroot /etc/openvpn/jail

persist-key

persist-tun

comp-lzo

# Log

verb 3

mute 20

status openvpn-status.log

; log-append /var/log/openvpn.log

Ce fichier permet de créer un serveur VPN SSL routé basée sur le protocole TCP et utilisant le port HTTPS (443) enfin de maximiser sont accessibilité depuis des réseaux sécurisés par des Firewalls. Les clients obtiendrons une nouvelle adresse IP dans le range 10.8.0.0/24.

On teste la configuration en saisissant la commande suivante:

cd /etc/openvpn

sudo openvpn server.conf

On doit obtenir les messages suivants:

Si le serveur démarre correctement, on peut terminer la configuration sur serveur OpenVPN en décommentant la dernière ligne du fichier /etc/openvpn/server.conf :

log-append /var/log/openvpn.log

On lance le serveur avec la commande:

sudo /etc/init.d/openvpn start

A ce stade les machines clientes vont pouvoir se connecter au serveur VPN. Par contre impossible d'aller plus loin que ce dernier car l'adresse 10.8.0.x ne sera par routée en dehors de votre serveur. Il faut donc configurer le serveur pour qu'il joue le rôle de routeur entre l'interface VPN (tun0) et l'interface physique (eth0) et de NATeur entre les adresses en 10.8.0.x et son adresse IP réelle.

Configuration du routage:

sudo sh -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'

Pour rendre ce paramètrage de routage permanant (même après un reboot), il faut ajouter la ligne suivante au fichier /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Puis configuration d'IpTables (si utilisé sur votre serveur) :

# règles obligatoires pour ouvrir déverrouiller l’accès :

sudo iptables -I FORWARD -i tun0 -j ACCEPT

sudo iptables -I FORWARD -o tun0 -j ACCEPT

sudo iptables -I OUTPUT -o tun0 -j ACCEPT

# autres règles : Translation d'adresses

sudo iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

sudo iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o eth0 -j MASQUERADE

Pour rendre cette règle de NAT persistante après un reboot de votre serveur, il faut commencer par créer un script de chargement de règles de Firewall (ou utiliser  un script existant):

sudo sh -c "iptables-save > /etc/iptables.rules"

Puis éditer votre fichier /etc/network/interfaces pour y ajouter la ligne suivante après la définition de votre interface réseau principale ("iface eth0 inet..." par exemple):

pre-up iptables-restore < /etc/iptables.rules

Le serveur est maintenant prêt à accueillir les clients. Nous allons donc voir dans le chapitre suivant comment déclaration un client sur le serveur.

Création d'un compte client OpenVPN

Imaginons que l'on veuille créer une clés pour le client "pcportablenicolargo" (c'est un exemple :)), alors il suffit de saisir les commandes suivantes sur le serveur:

cd /etc/openvpn/easy-rsa

source vars

./build-key pcportablenicolargo

Note: si vous souhaitez protéger l'accès à vos clés par un mot de passe (c'est à dire qu'un mot de passe sera demandé à la monté du tunnel VPN), il faut utiliser la commande ./build-key-pass en lieu et place de ./buil-key.

Le script ./build-key va générer 3 fichiers dans le répertoire /etc/openvpn/easy-rsa/keys:

  • pcportablenicolargo.crt: Certificat pour le client
  • pcportablenicolargo.csr: Certificat à garder sur le serveur
  • pcportablenicolargo.key: Clés pour le client

On copie les fichiers nécessaires un sous répertoire du répertoire /etc/openvpn/clientconf/ préalablement créé:

sudo mkdir /etc/openvpn/clientconf/pcportablenicolargo/

sudo cp /etc/openvpn/ca.crt /etc/openvpn/ta.key keys/pcportablenicolargo.crt keys/pcportablenicolargo.key /etc/openvpn/clientconf/pcportablenicolargo/

On va ensuite dans le répertoire /etc/openvpn/clientconf/pcportablenicolargo/:

cd /etc/openvpn/clientconf/pcportablenicolargo/

Puis on créé le fichier client.conf (il faut remplacer A.B.C.D par l'adresse publique de votre serveur VPN que vous pouvez obtenir avec la commande "wget -qO- ifconfig.me/ip"):

# Client

client

dev tun

proto tcp-client

remote A.B.C.D 443

resolv-retry infinite

cipher AES-256-CBC

; client-config-dir ccd

# Cles

ca ca.crt

cert pcportablenicolargo.crt

key pcportablenicolargo.key

tls-auth ta.key 1

key-direction 1

# Securite

nobind

persist-key

persist-tun

comp-lzo

verb 3

Pour assurer la compatibilité avec le client Windows OpenVPN, on fait une copie du fichier client.conf vers client.ovpn:

sudo cp client.conf client.ovpn

On devrait ainsi avoir les fichiers suivants dans le répertoire /etc/openvpn/clientconf/pcportablenicolargo/:

  • ca.crt: Certificat du serveur
  • client.conf: Fichier de configuration du client OpenVPN (Linux, BSD, MacOS X)
  • client.ovpn: Fichier de configuration du client OpenVPN (Windows)
  • hennionn.crt: Certificat du client
  • hennionn.key: Clés du client
  • ta.key: Clés pour l'authentification

Il ne reste plus qu'à mettre ces fichiers dans une archive ZIP et de la transmettre sur le PC client:

sudo zip pcportablenicolargo.zip *.*

Update

Pour les plus fainéants, j'ai créé un script (dépôt source sous GitHub) permettant d'automatiser les étapes décrites dans ce paragraphe et donc de permettre simplement la déclaration d'un nouveau client VPN sur votre serveur:

/Update

Attribuer une adresse IP statique à un client VPN

Ce qui est expliqué dans ce chapitre est optionnel.

Pour des raisons de sécurité (par exemple l'application de filtre IP), il est parfois nécessaire d'affecter une adresse IP statique à un client VPN. Pour cela, il faut créer un répertoire qui va contenir les configurations statiques:

sudo mkdir /etc/openvpn/ccd

sudo ln -s /etc/openvpn/ccd /etc/openvpn/jail/ccd

Ensuite on édite à l'intérieur de ce répertoire un fichier correspondant au CNAME (X509) de l'utilisateur dont on veut rendre la configuration statique (par exemple pcportablenicolargo):

sudo vi /etc/openvpn/ccd/pcportablenicolargo

ifconfig-push 10.8.0.18 10.8.0.17

La syntaxe est la suivante: ifconfig-push @IPCLIENTTUNNELVPN @IPSERVEURTUNNELVPN.

Ainsi quand le client pcportablenicolargo se connectera au serveur VPN il obtiendra une adresse en 10.8.0.18. Le bout du tunnel VPN (coté serveur) sera lui en 10.8.0.17.

Note: A chaque modification de ce répertoire il faut en faire une copie vers le chroot (jail, à adapter à votre configuration):

cp /etc/openvpn/ccd/* /etc/openvpn/jail/ccd

On dé-commente la ligne suivante au niveau de la configuration du serveur (/etc/openvpn/server.conf):

client-config-dir ccd

Puis on relance le serveur:

sudo /etc/init.d/openvpn restart

Configuration d'un client OpenVPN sous Ubuntu

Les opérations suivantes sont à faire sur le PC client que l'on veut connecter au serveur VPN.

On part sur le principe ou le fichier pcportablenicolargo.zip a été téléchargé et dézippé dans le répertoire /etc/openvpn/pcportablenicolargo.

Gnome permet de configurer de manière graphique le client OpenVPN. Pour celà il faut ajouter les packages suivants sur sa distribution (Ubuntu Desktop 10.10 dans mon exemple):

sudo aptitude install openvpn resolvconf network-manager-openvpn-gnome

Il faut redémarrer la machine pour finaliser l'installation.

Déclaration du VPN sous Ubuntu

Ensuite on clique gauche sur l'icone réseau du Tableau de bord > Connexions VPN > Configurer le VPN.

On clique sur le bouton Importer.

On va dans le répertoire /etc/openvpn/pcportablenicolargo et on sélectionne le fichier client.conf.

La fenêtre suivante devrait s'afficher:

Il ne reste plus qu'à cliquer sur Appliquer.

Utilisation du VPN sous Ubuntu

Rien de très compliqué :). Si vous avez nommé votre déclaration de VPN Client alors, il suffit de cliquer gauche sur l'icone réseau du Tableau de bord > Connexions VPN > Client.

L'icône réseau du tableau de bord devrait se voir modifier (apparition d'un petit cadenas).

Pour ce déconnecter du VPN: Tableau de bord > Connexions VPN > Déconnecter le VPN.

Si vous avez une erreur lors de la connexion, vous pouvez essayer la méthode fournie par ce lecteur dans ce commentaire.

Configuration d'un client OpenVPN sous Windows

Update

Après quelques tests sous Windows XP, le client que je préconise ci dessous n'est vraiment pas concluant (impossible de se connecter au serveur une fois sur deux, pas de log...).

Je conseille donc l'utilisation d'une solution libre “OpenVPN  Windows” (à télécharger sur le site http://openvpn.net/index.php/open-source/downloads.html).

Une fois installé, il suffit de décompresser l'archive pcportablenicolargo.zip dans le répertoire C:\Programs Files\Openvpn\conf\ et de se connecter à partir du bouton qui se trouve dans la barre des taches.

/Update

On part sur le principe ou le fichier pcportablenicolargo.zip a été téléchargé et dézippé dans le répertoire c:\vpn\pcportablenicolargo.

On va utiliser le client OpenVPN pour Windows nommé "OpenVPN Acccess Server Windows client" téléchargeable sur le site suivant (il nécessite l'installation préalable du framework .NET 3.5 SP1, téléchargeable sur le même site).

Déclaration du VPN sous Windows

Une fois le logiciel téléchargé puis installé. Il suffit de cliquer sur le nouvel icône dans la barre des taches. La fenêtre suivante devrait apparaître. Il faut alors cliquer sur le bouton + pour ajouter une nouvelle connexion VPN.

Ensuite on sélectionne l'option d'importation locale (1) et on clique sur Import (2):

On sélectionne ensuite le fichier client.ovpn qui se trouve dans c:\vpn\pcportablenicolargo\:

On sauvegarde la configuration:

La nouvelle connexion VPN devrait apparaître dans la fenêtre principale:

Utilisation du VPN sous Windows

Il suffit de cliquer sur le nouvel icône dans la barre des taches.  Il faut alors cliquer sur le bouton correspondant à votre connexion VPN définie dans le paragraphe précédant.

Une fois la connexion établie, on a le message suivant:

Pour se déconnecter du VPN, il suffit de cliquer sur le bouton... "Disconnect" (bravo):

Surveiller les connexions VPN

Dans la configuration fournie en exemple, le processus OpenVPN server va écrire toute les minutes un état des clients connectés au serveur dans le fichier /etc/openvpn/openvpn-status.log.

On a, par exemple, les informations suivantes:

OpenVPN CLIENT LIST
Updated,Fri Jan 21 15:48:06 2011
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client1,27.12.245.248:10086,306367,620864,Fri Jan 21 13:58:25 2011
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.8.0.10,client1,27.12.245.248:10086,Fri Jan 21 15:47:14 2011
GLOBAL STATS
Max bcast/mcast queue length,0
END

Sources:

  • °nimura

    Merci Nico, ton blog c’est de la bombe et ta conf open VPN aussi, j’ai testé ça marche nickel,

    Les points de vigilances rencontrées sont : le nattage + Iptables + routage.

    Thanx a lot.

  • Eth0

    Bonsoir Nicolargo j’ai repris ma conf de serveur :/ comme ça ne marchait pas et là avec la commande:

    ifconfig eth0 | grep « inet ad » | cut -f2 -d: | awk ‘{print $1}’

    pour la creation du compte client j’obtiens une adresse en 10.0.2.15, et qui n’est pas publique donc je suis un peu perdu là

  • Olivier

    Merci Nico pour ton travail
    Je voulais savoir Combien de clients openvpn peut supporter un serveur sous Ubuntu 10.10 en simultané.
    J’ai besoin de monter une solution qui puisse supporter plusieurs centaines de connexions simultanées
    Sachant que mon serveur est une bête de course avec 16 Go.
    Merci pour ta réponse

    • Difficile de répondre sans avoir plus d’information. Plus que le nombre d’utilisateurs simultanés, c’est surtout le débit de leur flux qui est dimensionnant pour ton serveur. Le mieux est de faire des tests avec 1 utilisateur « type » puis de surveiller pendant l’utilisation la conso mémoire du process OpenVPN mais aussi la CPU.

  • Pingback: Jonathan Vinial » Installation d’un serveur OpenVPN sour FreeBSD – Mode bridge()

  • Dave

    Bonjour,

    Tout d’abord, merci pour ce tuto.

    J’ai installé le serveur vpn sur un serveur Debian.
    Tout fonctionne normalement. Le serveur ,’est pas hébergé chez moi (il est au boulot)

    J’ai créé un compte utilisateur.

    Chez moi :
    J’ai 2 pc : 1 sur windows seven (appelé PC1) et 1 pc sur ubuntu (PC2)
    les 2 sont derrière une freebox.

    – Le PC1 sous seven arrive à se connecter au vpn.
    J’ai installé une virtual box sur le PC1 et installé Ubuntu. -> La connexion vpn fonctionne également.

    – Sur le PC2 (ubuntu), impossible de se connecter en passant par le manager (délai de connexion dépassé…)

    Par contre, lorsque je lance openvpn cient.conf dans le terminal, j’obtiens « Initialization Sequence Completed »

    et là, je m’aperçois que je pinger l’adresse 10.8.0.1 (ip du sevreur distant). Donc ca fonctionne.

    Par contre, impossible de pinger sur 192.168.1.3 (ip local du serveur distant) et j’ai vraiment besoin de pouvoir accéder au réseau 192.168.0.x

    Je désespère 🙁

    Ce qui est hallucinant, c’est que le PC1 se connecte sans problème (seven et ubuntu sur virtualbox)

    Si vous avez une idée…

    Merci d’avance.

    • Dave as tu trouvé la solution ? Parce que j’ai le même problème : J’ai un serveur OpenVPN hébergé sur un serveur dédié et il y a aussi un serveur MineCraft qui tourne dessus… Lorsqu’un client passe par le VPN, seul le premier peut se connecter à MineCraft et pas les autres … Après impossible même de ping le serveur…

      Donc si tu as trouvé une solution cela m’intéresserai 🙂

  • Dave

    Non pas de réponse.

    Je comptais sur une réponse de l’auteur du blog mais je suppose qu’il est débordé.

    En attendant, je vais vérifier si ce n’est pas ma version d’ubuntu.

    Si je trouve une solution, je la posterai.

    Bon courage

  • sedos

    Bonjour a tous,
    Es ce qu’on peut faire la configuration sur un Ubuntu desktop au lieu de ubuntu server?Quelle est la conséquence si on fait la configuration sur un ubuntu desktop?
    merci.

  • Bonjour;
    Jai mis en place cette solution pour mon entreprise,
    Tout semble fonctionner, mais je me heurte à un gros problème de latence…
    dès qu’on fait la moindre chose en passant par la connexion VPN, par exemple naviguer dasn des partages SMB, la latence monte en flèche ce qui bien sur ralenti considérablement les accès…

    Je souhaite remplacer notre actuel pptp par openvpn, mais pour l’instant ce problème de latence est bloquant…
    J’ai bien sur essayé différent réglade de MTU de 1300 à 1500 mais cela ne semble pas régler le problème…

    • Je te conseille d’essayer de monter ton tunnel OpenVPN en UDP et non pas en TCP. Cela devrait améliorer les performances.

      Tiens nous au courant de tes tests.

      • sedos

        bjr,
        Quand moi j’ai utilisé le tunel en TCP avec le port 443 comme l’indique ton le tuto,j’ai une boucle de tentative de connexion.Es ce le meme probleme?

  • Super tuto. Très clair et précis.
    J’ai particulièrement apprécié le dtc@hadopi.fr >_<

  • Sousuke

    Bonjour.

    Super tuto, mon VPN fonctionne à merveille suite à la lecture et mise en application de ce tuto ! Je l’ai déjà recommandé !

    J’ajouterai ceci, NicoLargo, au tutoriel pour ceux qui souhaite ajouter un mot de passe à l’ouverture du tunnel (protection des certificats) :

    « Pour protéger la clé avec un mot de passe, il faut utiliser ./build-key-pass au lieu de ./build-key. »

    • @Sousuke: merci pour cette précision, le viens juste de modifier le billet pour prendre en compte ta remarque sur ./build-key-pass.

  • Pingback: Installer et configurer OpenVPN | Sheebypanda's blog()

  • Maverick

    Bonjour à tous, j’ai installé le tunnel, je me connecte bien, je ping le serveur en 10.8.0.1 MAIS mon navigateur ne passe pas par le vpn pour aller sur le net. Y a t il un proxy à paramétrer quelque part? Des routes sont ajoutés dans windows (10.8.0.1->pass 10.8.0.5->interface 10.8.0.6). Mais ma route par defaut 0.0.0.0 est definie sur ma box. Que dois je faire pour utiliser mon openvpn pour naviguer? Merci

    • Maverick

      J’ai mis détection automatique du proxy dans firefox et j’ai rien, enfin mon ip est toujours celle de ma box…

      • Maverick

        Je m’auto répond!
        J’ai dû :
        => commenter la ligne « push redirect-gateway… »
        => rajouter dans mon client.ovpn « redirect-gateway def1 »
        => Et voilà, c’est tout, pas de proxy à régler du coup!
        Enjoy ^^

        • Cette solution n’a pas fonctionné pour moi sous debian squeeze

          J’ai du commenter ces lignes dans mon fichier /etc/openvpn/server.conf

          #push « redirect-gateway def1 bypass-dhcp »
          #push « dhcp-option DNS 4.4.4.4 »
          #push « dhcp-option DNS 8.8.8.8 »

          Ensuite j’ai ajouter le paquet dnsmasq , puis rajouter ces options dans le server.conf:
          push « redirect-gateway def1 »
          push « dhcp-option DNS 10.8.0.1 »

          Et rajouter cela dans le fichier /etc/dnsmasq.conf

          listen-address=127.0.0.1,10.8.0.1
          bind-interfaces

          Il faut aussi faire en sorte que dnsmask redémarre après openvpn lors d’un reboot.
          J’ai donc rajouter cette commande dans mon rc.local avant le exit 0

          /etc/init.d/dnsmasq restart

          Maintenant je peux accéder à internet depuis mon navigateur

          Enjoy

  • cyberio

    Bravo et merci ! 😉

  • D

    Super ! J’ai mis en place mon VPN, ça va m’être utile pour déjouer les multiples administrateurs systèmes 😀

    Quelques remarques :

    Il manque « sudo » à « openvpn –genkey –secret keys/ta.key »
    À un moment, vous parlez de hennionn, qui es-ce ? Je pense que vous parliez de pcportablenicolargo
    Les DNS de Google sont-elles vraiment utiles ici ?
    Chez moi le port 443 est déjà pris

  • Haqqtion

    Nickel !! tout fonctionne tuto très clair, j’ai essayé de nombreuses fois d’installer un openvpn et pour la première fois j’ai réussi 🙂

    N’oubliez pas comme moi de lancer openvpn à la fin 🙂

  • Martin

    Bonjour, un tout grand merci pour ce tuto : ) mais voila j’ai un problème lorsque j’essaye de me connecteur j’ai un problème de certificats ???
    -> Fri Oct 14 23:38:20 2011 VERIFY ERROR: depth=1, error=certificate is not yet valid

    et je ne sais pas quoi faire si quelqu’un peut m’aidé je suis preneur…

    Merci d’avance

  • Stephane

    Bonjour,
    Lorsque j’essaye de me connecter sous windows avec openvpn, j’ai ce message dans la fenêtre de connection :
    TCP: connect to monip:443 failed, will try again in 5 seconds: Connection refused (WSAECONNREFUSED)
    Quelqu’un à une idée ?

    Martin, tu as bien mi :
    Sign the certificate ? [y/n] :y
    1 out of 1 certificate requests certified, commit ? [y/n] y quand tu fais un ./build-key ?

  • siddou

    Bonjour,
    je n’arrive pas à attribuer d’addresse static à mes clients en suivant la procedure.
    Tu n’utilise pas
    client-config-dir /ccd
    dans le openvpn.conf?
    Cette ligne est-elle necessaire?

  • abdel

    Hello merci pour ce super tuto c est le plus clair du net ! par contre le lien vers ton script auto de config client est HS ; peut tu le remettre en ligne si ta le temps 😉 thanks

  • Pingback: Installation d’un serveur OpenVPN sous Debian/Ubuntu | PYORKOVISION()

  • Dom

    Salut Nico

    Je suis Newbie, j’ai installé selon ton tuto Openvpn serveur sur une Débian Squeeze 64bits de base sur un PC dédié connecté à une Freebox à mon boulot, j’ai ouvert les ports TCP et UDP 22 et 443 sur la Freebox.

    Maintenant, pour tester, je me connecte depuis mon domicile avec un PC Windows 7 64bits derrière une Freebox sur mon serveur VPN avec Openvpn-Gui, le logo dans le systray passe bien au vert et donc je suis bien connecté mais le but de la manip était de pouvoir me connecter à internet via le VPN afin de permettre à un ami qui est immobilisé sur un lit d’hôpital pour de long mois de se connecter sur le hot spot wifi de l’hôpital avec son PC portable et de passer outre le blocage de certains ports qui l’empêche d’utiliser certains services en ligne comme la téléphonie sur IP par exemple !

    J’ai bien configuré IP table et le forwarding de ma Débian comme indiqué dans le tuto mais lorsque que je vais voir le statut de la connexion IPV4 en DHCP de mon Windows, celui ci n’a pas pu récupérer
    l’adresse IP de la passerelle, le champ reste vide et les DNS 4.4.4.4 et 8.8.8.8, cela correspond à quoi ?

    Le statut de ma connexion Windows TAP-Win32 est :
    DHCP Activé : oui
    Adresse IPV4 : 10.8.6
    Masque : 255.255.252.0
    Passerelle par défaut IPV4 : Rien ???
    Serveurs DNS : 4.4.4.4
    8.8.8.8

    Serveur WINS IPV4 : Rien

    Que doit je faire pour permettre la connexion à internet via le VPN ?

    Dom

    • Dom

      J’ai trouvé la solution.

      Sur Windows 7 Ouvrir une console DOS en mode administrateur et saisir :
      route add 10.8.0.0 mask 255.255.255.0 192.168.0.254

      Il faut mettre les IPs qui conviennent évidement.

  • bessifi

    bonsoir
    lorsque je tape zip pcportablenicolargo.zip *.*
    il m’affiche « commande inconnu »
    en fait j’ai installé mon serveur sur debian sur son dark hole

  • bessifi

    sudo vi /etc/openvpn/ccd/pcportablenicolargo

    ifconfig-push 10.8.0.18 10.8.0.17
    ça fonctionne non plus

    • db

      J’ai exactement le même soucis et n’arrive pas à fixer mes IP du réseau vpn. Je suppose un pb du coté du CNAME, comment vérifier son nom exact coté client une fois paramétré? De mème le role de « client-config-dir ccd » et son interférence avec le « chroot ».

      Je continue à y travailler, mais toute nouvelle est bonne à prendre.Si je trouve, j’explique.

      • kyoshiro38

        Met « client-config-dir /ccd » dans ton server.conf
        Ensuite, tu copie le répertoire ccd dans jail plutôt que de faire un lien symbolique. Apparement, ca pose problème avec le chroot.

  • Jules

    Salut,

    Je trouve que c’est vraiment long à se connecter…

    C’est normal ?

    (sinon merci pour tout)!

  • edelweiss

    Bonjour,
    J’ai essayé votre tuto avec un serveur en Ubuntu et un client en Windows 7. Je rencontre cependant des problemes pour connecter mon client.
    Sur le serveur, je constate:
    – le client essaye de se connecter (adresse IP du client visible),
    – sequence de connexion (tentative permanente du client) se termine toujours par « TCP/UDP: Closing socket »
    D’avance, un grand merci à celui qui pourra m’apporter son aide.

    edelweiss

  • DB

    Bonjour et merci, la connexion vpn de linux à linux et de windows à linux et réciproquement fonctionne parfaitement bien.

    Mais j’ai une question. Je me suis aperçu que la connexion d’un ordinateur distant situé sur un LAN distant transite par le serveur vpn local. Le temps d’accès Internet de l’ordinateur distant est donc quasiment doublé par rapport au temps d’accès direct du même ordinateur distant sur le LAN distant que l’on obtient en déconnectant le vpn.
    Y a t’ il moyen d’avoir sur l’ordinateur distant simultanément la connexion vpn et l’accès rapide direct à internet? En fait c’est le cas général d’un poste connecté loin de chez lui sur un réseau local mais qui souhaite pouvoir également avoir accès à ses dossiers et profiter de la bande passante de l’accès internet local.
    Merci pour la réponse.

  • mothership

    Bonjour,

    très bon article et le script fonctionne a merveille.

    par contre j’ai un problème avec « sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE », « iptables : no chain/target/match by that name ». Après quelques recherches je comprend que « MASQUERADE » n’est intégré de base dans le kernel des distributions de mon hébergeur(sous openvz). Mais je n’ai rien trouver permettant de contourner cette option. Il y a bien cette page : http://www.linux-france.org/prj/edu/archinet/systeme/ch62s03.html où dans la partie ip masquerade on nous propose des commandes mais je ne veut pas me lancer dans n’importe quoi!

    de l’aide quelqu’un ?

    • demzu

      Salut, j’ai exactement le même problème que toi sur mon serveur VPS, je ne peux donc pas aller plus loin. As-tu trouvé une solution.

  • nummi

    Slt!

    Tout marche parfaitement mais j’avais une petite question concernant ton script d’ajout de client, lorsque j’execute ce script avec un CRON (permissions root), le certificat client n’est pas créé. Tu as une idée d’ou pourrait venir le problème ? :/

    Merci pour le tuto super simple en tout cas 😀 !

  • ptit6sky

    Bravo pour ce tuto, tout à fonctionné à merveilles.

    Juste pour le client : J’ai du modifier la « direction de clé » dans la config du VPN. J’ai du la passé de « aucun » à « 1 »

    Je ne connais pas la traduction anglaise de ce terme.

    Encore merci beaucoup.

  • Rixou

    Debian 6
    Impossible que le VPN re-forctionne après un reboot de mon serveur a distance.
    Pourtant mon pc se connecter bien ( au niveau client il me demande un mdp et se connecte ) mais au niveau serveur c’est la ou je pense qu’il y a un PB.
    Pourtant j’ai redémarrer openVPN une foi la machine relancer mais rien a faire.
    Merci si vous avez une solution.

    • Salut,
      Tu ne précises pas vraiment ce qui ne fonctionne plus mais si cela vient de la connexion Internet avec le VPN j’ai une petite idée. La règle iptables n’est pas persistante au redémarrage c’est pour ça qu’ Internet ne fonctionne plus car il n’y a plus de forwarding.

      Si Nico peut update l’article avec
      -Met à jours tes règles iptables:
      sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
      -Sauvegarder ses règles iptables:
      sudo sh -c « iptables-save > /etc/iptables.rules »
      -Editer le fichier /etc/network/interfaces et ajouter après « iface ethX …. » la ligne suivante:
      pre-up iptables-restore < /etc/iptables.rules

      @+

      Maintenant les règles seront restaurées à chaque fois que la carte réseau est montée.

      • C’est fait ! Merci pour le correctif

  • Vincent

    Salut,
    Ta solution fonction, sauf que c’est très lent… je DL à 200Ko/s avec le VPN alors que sans je suis à 1,2mo/s.
    Le serveur utilisé est un serveur 1Gbs Full Duplex donc ça ne vient pas de là. A mon avis c’est le port 443 qui n’est pas top, j’ai tenté de le remplacer par 80 mais rien à faire… OpenVPN refuse de redémarrer. Une idée ?
    Merci d’avance.

    • Il est normal que le débit en VPN soit plus lent (ajout header / compression / 1 bond en plus). Par contre le ratio 200 Ko vs 1200 Ko me semble très important. Les choses à vérifier: la charge CPU des machines clients et serveurs lors de la montée en débit.

      • Vincent

        Justement, ce qui est très étrange c’est que les CPUs ne sont pas élevés !
        Je pensais donc remplacer TCP par UDP, qu’en pensez-vous ?

        • A essayer…

          • Vincent

            Hum, j’essaie donc !
            Simple question aussi > Si je choisis le port 80 en remplacement du 443 (SSL), quels changements ? Et comment changer ce port ? J’ai tenté de le changer en « dur » dans le fichier server.conf, mais alors OpenVPN refusait totalement de redémarrer oO.

        • Dis-moi, comment on l’utilise ton script pour créer des clients ?

  • cynthia

    bonjour Monsieur Nico largos j’ai quelque probleme à Implémenter une solution de télétravail avec OpenVPN

  • benoit

    J’adore qu’un plan se deroule sans accroc ;o)
    Bravo, procedure nickel ! J’ai juste modifié une commande « push » pour qu’il n’envoie pas tout dans le tunnel, mais juste la route dont j’ai besoin.
    Merci pour la procedure !

  • Salam

    Bonjour,
    Après avoir fait comme il faut, je lance le client qui m’envoie ce message d’erreur là:
    OpenVPNClient start client_p7929: process started and then immediately exited: []
    Il faut noter que mon serveur (sous ubuntu) est dans le même réseau local(windows 7)

  • danyocean

    Mon client Windows n’arrive pas à se connecter, la barre de connexion reste indéfiniment.
    Au niveau du firewall côté serveur faut-il régler quelquechose?

    • Si tu as des règles de filtrage entrante, il faut autoriser les requêtes vers le port TCP/443.

  • Vraiment sympa ce tutoriel, par contre, dans mon cas, la connection au vpn s’effectue, mais impossible d’accéder au net, ni au reste de mon réseau, je ne comprend pas.

  • Pingback: Test Ubuntu Server 12.04LTS + OpenVpn()

  • awaxs92

    Super Tuto Nico !!
    En revanche, j’ai un soucis pour atteindre les machines se trouvant sur mon reseau privé.

    Config Lan:
    1)Freebox
    2)Routeur Cisco Linksys WRT320n (avec ouverture du port serveur VPN)
    3)Ubuntu Server 12.04LTS +OpenVpn (192.168.5.x
    4)Windows 7 avec Client VPN connecté a l’exterieur de mon LAN

    Mon windows 7 se connecte sans problème au VPN et il récupère bien un IP de type 10.8.0.6

    En revanche, il m’est impossible de faire un ping sur des adresse de mon sous réseau 192.168.5.x malgré les regles ajoutées dans iptables…

    sudo sh -c ‘echo 1 > /proc/sys/net/ipv4/ip_forward’
    net.ipv4.ip_forward = 1
    sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
    sudo sh -c « iptables-save > /etc/iptables.rules »

    Ensuite modification de /etc/network/interfaces avec :
    pre-up iptables-restore < /etc/iptables.rules

    Est ce que qqun aurait se probleme …?

  • Openclient

    Bonsoir, Merci tout d’abord pour ce lien interessant pour l’installation et la configuration d’un serveur Openvpn. De mon côté, Tout se passe bien sauf la redirection vers l’internet que j’ai pas réussie à établir. Merci de m’informer comment le fichier /etc/networking/interfaces soit configuré ( sous ubuntu) ou une copie exemple. Mon but est de me connecter par mon client openvpn local à partir du serveur openvpn qui est également dans le meme réseau local. Merci beaucoup pour tout éclaircissement.

  • Bonjour
    Un grand merci pour le travail que vous faite, ça m’a aidé a plusieurs reprises.
    Vos articles sont bien fait, merci pour le partage d’expérience.
    Cordialement

  • Vincent

    Bonjour,

    Quelques remarques et questions : vous avez oublié de préciser qu’il fallait avoir installé les paquets pour la compression LZO, ce qui explique le mauvais débit de certaines personnes ;).
    Pour les questions, j’aurais voulu savoir quelques petits trucs :
    – Comment supprimer un client OpenVPN ?
    – Comment faire fonctionner votre script de création de clients ?

    Cordialement ;).

    • goutbulgare

      Memes questions a propos de la suppression d’un acces client et du ovcreateclient.sh

      Procedure claire et efficace. Merci beaucoup.

  • Jean

    Bonjour, j’execute toutes les procédures normelement, mais une fois arriver à la ligne « sudo openvpn server.conf » je n’ai pas le résultat attendu, j’obtiens:

    root@server:/etc/openvpn# openvpn server.conf
    Sat Jul 7 15:10:12 2012 OpenVPN 2.1.0 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] [MH] [PF_INET6] [eurephia] built on Jul 20 2010
    Sat Jul 7 15:10:12 2012 NOTE: OpenVPN 2.1 requires ‘–script-security 2’ or higher to call user-defined scripts or executables
    Sat Jul 7 15:10:12 2012 Diffie-Hellman initialized with 1024 bit key
    Sat Jul 7 15:10:12 2012 /usr/bin/openssl-vulnkey -q -b 1024 -m
    Sat Jul 7 15:10:12 2012 Control Channel Authentication: using ‘ta.key’ as a OpenVPN static key file
    Sat Jul 7 15:10:12 2012 Outgoing Control Channel Authentication: Using 160 bit message hash ‘SHA1’ for HMAC authentication
    Sat Jul 7 15:10:12 2012 Incoming Control Channel Authentication: Using 160 bit message hash ‘SHA1’ for HMAC authentication
    Sat Jul 7 15:10:12 2012 TLS-Auth MTU parms [ L:1560 D:168 EF:68 EB:0 ET:0 EL:0 ]
    Sat Jul 7 15:10:12 2012 ROUTE: default_gateway=UNDEF
    Sat Jul 7 15:10:12 2012 Note: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
    Sat Jul 7 15:10:12 2012 Note: Attempting fallback to kernel 2.2 TUN/TAP interface
    Sat Jul 7 15:10:12 2012 Cannot allocate TUN/TAP dev dynamically
    Sat Jul 7 15:10:12 2012 Exiting

    Pourriez-vous m’aider? Merci.

    • Vincent

      Il est possible que vous rencontriez une erreur lorsque vous tentez de configurer la translation d’adresse NAT avec la commande suivante :

      iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
      iptables: No chain/target/match by that name.

      ou

      sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
      iptables: No chain/target/match by that name.

      Cette erreur survient très généralement sur des VPS qui utilisent la virtualisation OpenVZ. Pour remédier à ce problème, il faut contacter votre prestataire de services et demander d’activer tun/tap.

      Il faut ensuite vérifier le nom de votre interface avec la commande ifconfig.

      En fonction, soit vous utilisez la même commande qui est décrite précédemment, sinon :

      iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE

      A+

      • Jean

        Bonjour Vincent, merci de m’avoir répondu, et désolé d’avoir mis autant de temps pour rédiger ma réponse.
        J’ai demandé à mon hébergeur de me l’activer, car il n’y apparait pas sur mon panel. Je ne vais pouvoir vous dire si le problème vient bien de tun/tap, étant donné que mon hébergeur ne veut pas me l’activer! J’ai donc demandé mon remboursement …

        Merci d’avoir pris le temps de me répondre, si cela se reproduit, moi ainsi que les lecteurs de nicolargo savont d’où vient ce problème.

        Jean.

        • Henry

          J’ai le même problème:
          iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j MASQUERADE
          iptables: No chain/target/match by that name.

          Quelqu’un a-t-il trouvé une solution?

          Merci

  • Merci pour ce tuto et j’ai essayé d’approfondir sans succès.

    J’ai voulu le faire en login/password avec une base de données MySQL. Ça paraît simple mais en réalité, c’est à se torturer l’esprit simplement parce que j’aimerais éviter de monter une usine à gaz avec FreeRadius … c’est simplement pour gérer 10 à 30 connexions donc mettre FreeRadius me paraît disproportionné.

    Pouvez-vous nous faire un petit tuto ?

    Pour mon problème actuel et cette demande d’aide par un tuto, j’ai tout mis ici : http://www.debian-fr.org/impossible-de-faire-un-openvpn-avec-une-base-user-mysql-t39541.html

    Le problème est : AUTH-PAM: BACKGROUND: user ‘xyz’ failed to authenticate: Permission denied alors que le active est bien à 1 et que le mot de passe est bien en SHA1.

    Merci beaucoup.

  • lerm

    J’ai un petit problème avec le client windows,
    Il met connexion et tourne en boucle à l’infini

    Je ne sais pas d’ou vient le problème.

    Si vous pouviez m’aider merci

  • vong

    comment creer fichier hennion.crt et hennion.key????

  • haikuhell

    Bonjour

    Merci pour ce tuto.
    Je complète car j’ai du faire cette manipulation liée à un problème de version du fichier openssl.cnf

    cd /etc/openvpn/easy-rsa
    sudo rm openssl.cnf
    sudo ln -s openssl-1.0.0.cnf openssl.cnf

    source : https://bugs.launchpad.net/ubuntu/+source/openvpn/+bug/998918

  • michokot

    Salut et Merci pour ce super tuto.
    Nickel ! Rien à dire.C’est craiment terrible 😀

    2 choses:
    1) dans ton script ovcreateclient.sh tu peux remplacer :
    remote `wget -qO- whatismyip.org` 443
    par
    remote `curl ifconfig.me` 443

    car actuellement la 1ère commande avec wget ne fonctionne plus (pour moi..)

    2) Jette un oeil sur cette page:
    http://blog.sebastien.raveau.name/2009/06/internet-by-all-means.html
    Notamment la partie qui permet de rediriger tous les ports UDP vers le port UDP sur lequel écoute openvpn.
    Ce qui fait que, avec un seul port udp ouvert à l’extérieur d’un SI on peut se connecter en vpn 😀
    Même chose possible avec une autre instance d’openvpn en tcp (sauf le ssh par ex..)
    Enfin pour tester la sortie d’un SI vers un port, on peut utiliser le script proposé :
    http://www.sebastien.raveau.name/projects/hdm-openvpn-scan.rb

    En tous cas, merci encore pour ce tuto très clair, et pour avoir pensé à faire simple et secure 😉

  • margroup

    bonjour tous merci pour le tuto c’est vraiment excellent mais j’ai un petit soucis car à chaque fois que je l’ance la commande suivante :
    root@margroup-desktop:/etc/openvpn# gedit server.conf

    ca ne passe pas et pourtant le tunnel est en place.voila ce qu’il m’affiche:

    Tue Sep 11 13:24:34 2012 OpenVPN 2.1_rc19 i486-pc-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Oct 13 2009
    Tue Sep 11 13:24:34 2012 NOTE: OpenVPN 2.1 requires ‘–script-security 2’ or higher to call user-defined scripts or executables
    Tue Sep 11 13:24:34 2012 Diffie-Hellman initialized with 1024 bit key
    Tue Sep 11 13:24:34 2012 /usr/bin/openssl-vulnkey -q -b 1024 -m
    Tue Sep 11 13:24:34 2012 TLS-Auth MTU parms [ L:1542 D:138 EF:38 EB:0 ET:0 EL:0 ]
    Tue Sep 11 13:24:34 2012 TCP/UDP: Socket bind failed on local address [undef]:1194: Address already in use
    Tue Sep 11 13:24:34 2012 Exiting

    j’aimerais savoir comment faire pour remedier à cela s’il vous plait

  • akkro

    Merci bcp nicolargo pour ce très bon tutoriel.

    Sinon, ne pas oublier d’ouvrir le port 443 du serveur.

  • Charly

    Bonjour,
    Merci pour ce tuto très bien fait. J’ai une question :
    Je dispose d’un serveur OpenVpn routé avec des utilisateurs qui communiquent en mode « client to client ». Mon problème c’est que tous le trafic est autorisé entre eux, et je souhaiterai qu’ils ne puissent utiliser que le ou les ports de mon choix (ex : UDP 1058…).
    Merci pour votre aide.

    • Le plus simple est de mettre en place des règles de Firewall « IpTables » sur l’interface tun0 qui est créée lors de la montée du tunnel VPN.

      • Charly

        Le truc c’est que je ne suis pas à l’aise avec « Iptables » pouvez-vous me donner un exemple s’il vous plait ?

        PS : Je suis tombé par hasard sur votre blog et je le trouve très intéressant, surtout la partie sur Nagios. J’ai l’habitude de suivre des tutos sur le net, mais à chaque fois il manque des choses alors qu’avec ce tuto tout à marché du premier cou, félicitation.