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:

  • Raybones

    « VPN pour les geek »,
    Euh non, c’est l’acronyme anglais… Rien a voir avec les Geek hein…

    • incohérence

      Effectivement tu as raison le client Win que tu as cité n’est pas stable.
      Par contre celui là et stable:
      http://openvpn.net/index.php/download.html
      Il est vrai que la configuration ne se fait que par dépose de fichier (pas de fenêtre graphique).
      Et ce n’est pas non plus un MSI donc le déploiement par active directory se fait par VBS où a la main.
      have a fun

      • Issa

        Bonjour,

        bon comme d’hab quand je fais un tuto sur le net je ne trouve pas les même conf :'(

        bon j’utilise un ubuntu 14.04 j’ai install openVPN et créer mes fichiers profil pour android.

        quand j’ajoute mon certificat sous android avec l’appli openv^pn ça fonctionne mais au moment de la connection j’ai le message d’erreur suivant !

        OpenVPN core error : PolarSSL : error parsin cert certificate : X509 – The CRT/CRL/CSR format is invalid, e.g. different type expected.

        voir image 1 joint

        et concernant windows j’ai télécharger l’outil proposé mais je n’ai pas du tout la même interface :

        voir image 2

        du coup je comprend pas trop comment configurer mon android et mon windows.

    • Mickael

      Les geeks aiment bien les acronymes 🙂

  • Pingback: INFO IP AND FRIENDS » Installation d’un serveur OpenVPN sous Debian/Ubuntu()

  • yak

    bonjour

    j’ai suivie toutes les etape mais quand je serait connecté a mon vpn qui est sur mon vps je voix que mon adress de mon pc sur hostip.fr est la meme de que mon fournisseur fai ma fournit et ce n’est pas l’adress ip de mon serveur vps.

    que doit je fair S.V.P

  • tatou

    bonjour!
    Merci pour le tuto
    g bien suivi touts vos etapes! en fait ma connexion VPN est réalisé entre deux vm virtualbox
    l’une LAN et l’autre WAN !
    en fait, la connexion echoue : vpn connexion failed because attempt time out !
    dans mon cas j’ai mis dans le fichier client.conf
    dans remote @LANServeurVPN 443 !
    est ce que pour cela ca n’a pas marché ! et si c le cas quesque vous me suggerez !
    merci !

  • Froufroux

    Bonjour, j’ai bien suivi votre tuto.

    J’arrive bien à me connecter au VPN sur mon raspberry derriere une livebox 2.

    Malheureusement la connexion ne tient qu’une minute pile poil. Et se déconnecte toute seule après. Je ne comprends pas trop pourquoi (le firewall devrait bloquer immédiatement et non 1 minute après). Avez-vous déjà rencontré ce problème ?

  • Pingback: Un serveur VPN simplement sous Ubuntu? « Yet Another Web Overview()

  • juicelink

    Bonjour,

    Merci pour ce tuto très bien détaillé.
    J’aimerai apporter quelques précisions / ajouts, car j’ai eu quelques blocage que j’ai résolu (si ca peut en aider d’autres).

    Mon blocage était que le fichier .conf n’était pas utilisable, ca me filait une erreur (dont ne me souviens plus) :

    – premièrement, coté client, j’ai édité le fichier /etc/default/ufw puis ajouté la ligne :

    DEFAULT_FORWARD_POLICY= »ACCEPT »

    (J’ai trouvé cette info sur le dernier billet qui parle de ce blog)

    – ensuite j’ai préparé mon fichier client.conf de la manière suivante (en remplaçant A B C et D par l’ip de mon serveur bien sur) :

    # Client
    client
    dev tun
    proto tcp
    remote A.B.C.D 443
    resolv-retry infinite
    cipher AES-256-CBC
    ns-cert-type server
    # Cles
    ca ca.crt
    cert julien.crt
    key julien.key
    tls-auth ta.key 1
    # Securite
    nobind
    persist-key
    persist-tun
    pull
    comp-lzo
    verb 3
    mute 5

    J’ai donc principalement ajouté :

    ns-cert-type server
    pull
    mute 5

    Sinon, pour le reste, un grand merci pour ce tuto, j’ai utilisé mon premier VPN grâce à lui 🙂
    Vraiment super bien expliqué et détaillé.

  • Wowoteur

    Bonsoir,
    J’ai suivi le tuto que j’ai déjà utilisé plusieurs fois avec succès.
    Par contre impossible de le faire fonctionner chez moi.
    J’ai une vm sous ESXi où j’ai dédié une carte réseau.
    J’ai fait la configuration, mais que ça soit avec ma Livebox ou ma Numéricable, impossible de me connecter que ça soit via nom de domaine ou ip publique.
    Pourtant j’ai bien fait les règles NAT.
    Est-ce que quelqu’un a une idée?

  • Wowoteur

    Dans les log j’ai ça:
    Mon Dec 17 21:42:19 2012 xxx.xxx.xxxx.xxx:55371 TLS: Initial packet from [AF_INET]xxx.xxx.xxxx.xxx:55371, sid=d597e539 f36e7ceb
    Mon Dec 17 21:42:19 2012 xxx.xxx.xxxx.xxx:55371 TLS Error: cannot locate HMAC in incoming packet from [AF_INET]xxx.xxx.xxxx.xxx:55371
    Mon Dec 17 21:42:19 2012 xxx.xxx.xxxx.xxx:55371 Fatal TLS error (check_tls_errors_co), restarting
    Mon Dec 17 21:42:19 2012 xxx.xxx.xxxx.xxx:55371 SIGUSR1[soft,tls-error] received, client-instance restarting
    Mon Dec 17 21:42:19 2012 TCP/UDP: Closing socket

  • louis

    Est-il possible de configurer le server pour permettre l’utilisation d’Upnp a travers OpenVPN?

  • Yacine

    J’ai essayé de lancer ton script .sh mais il me renvoie l’erreur suivante :
    -bash: syntax error near unexpected token `newline’

    Saurais-tu d’ou vient elle ?
    Merci

  • Logan

    Oui merci pour le tuto
    Mais même en le suivant scrupuleusement l’IP détectée reste inchangée!
    Tout le reste semble fonctionner correctement
    Faut il faire un routage de 0.0.0.0/0.0.0.0?

  • nat

    Bonjour,

    Après le redémarrage, je me retrouve avec l’indication « Périphérique non géré » pour les réseaux sans fil, est-ce normal?
    Et aussi mon fichier /etc/network/interfaces ne m’indique pas mon interface wlan0 seulement l0. Pourtant, elle existe bien quand je fais un ifconfig
    Merci

  • cedric

    bonjour a vous tous. j’ai essayer ton tuto monsieur largo mais j’ai eu un problèmes
    quant je saisi la commande « sudo openvpn server.conf », on me renvoi une une erreur bref ca ne passe pas a ce niveau
    svp aider moin!!!!!!!

  • chawki

    Bonjour
    une fois j’ai lancé le client openvpn un message est affiché :la connection est echoué delai depassé « 

    • Juliee

      J’ai le même problème que toi.

      Cela viens t’il du serveur vpn ou d’une faute de configuration de notre part ?

  • Bonjour, j ai un souci, en lancant openvpn j obtien une erreur : siocsifaddr, no such device, c est koi le souci svp?

    • Mastersey

      @david

      1. mkdir -p /dev/net
      2. mknod /dev/net/tun c 10 200
      3. chmod 600 /dev/net/tun

      Et continues la suite.

  • Pingback: Mydoom()

  • Synced

    J’ai un problème quand je lance le client :

    OpenVPNClient start client_p2901: process started and then immediately exited: []

    De l’aide svp ?

    • Kevin

      exactement le même souci tout est ok jusque au moment de la connexion

      OpenVPNClient start client_p1398: process started and then immediately exited: []

      Toujours pas résolu 🙁

  • mopi

    Bonjour,
    Je suis loin d’être un expert en réseaux et je ne sais comment gérer la partie adresses IP.
    Mon client a l’adresse IP 192.168.0.190 dans le réseaux numéro 1 et veut se connecter sur un serveur situé dans le réseaux 2 et qui a pour adresse IP (dans ce 2ème réseaux) 192.168.254.202
    Comment dois je paramétrer le fichier réseaux ?
    merci

  • LE FAUCHEUR Jean-Yves

    TUTO bien fait, j’avais déjà installé OpenVPN il y a longtemps et ce TUTO m’a permis d’en reinstaller un rapidement.
    Merci

  • Pingback: Installation d’un serveur OpenVPN sous Debian/Ubuntu | Le blog de NicoLargo - Vivi's Home - Le bloc notes()

  • Pingback: Linux | Pearltrees()

  • Simius

    Bonjour,
    Lorsque je tape sudo /etc/init.d/openvpn start
    J’ai droit à un * Autostartin VPN ‘client’ [fail]
    Auriez-vous une idée d’où cela peut venir ?
    Merci

  • Ankhsenamon

    Bonjour,

    Quelqu’un pourrait-il m’expliquer à quoi correspond le CNAME (X509) svp?

    J’ai cherché sur internet, il semblerait que ce soit un alias lié au DNS, or je n’ai pas de serveur DNS.

    Doit-on simplement mettre le nom de la machine cliente?

    Merci

  • Pingback: Serveur Vpn + Vidéo surveillance avec un Raspberry Pi | valoutweak()

  • Bonjour,

    J’ai un problème auquel je ne trouve pas de solutions. J’ai bien réussi à effectuer la connexion VPN entre mon PC sous Windows 7 et mon VPS sauf que quand je fais un ipconfig sur le PC client, j’ai bien mon IP privée obtenue par le VPN mais je ne vois ni les DNS ni la passerelle.. je peux donc à peine envoyer un ping vers le serveur 10.8.0.1 mais pas surfer vers Internet depuis mon VPS. Ai-je raté quelque chose ? Merci pour vos lumières !

  • marmotte

    salut moi j’ai suivi tout le tuto a la lettre openvpn se connecte bien mais aucune page internet ne s’affiche depuis 2 jours que je fouine pour trouver une solution

  • Pingback: Informatique | Pearltrees()

  • Petit conseil, avec OpenVPN j’utilise la directive « topology subnet » qui permet de choisir le masque que l’on veut au lieu du /30

  • Guest

    pleeeeeeeese i have a big problem i want to set up a vpn betwen tow local network so i decided to use openvpn but evry time i have a diferent probleme pleaaaaaaaaaaze help me pleaaase

  • Andressito

    bonjour,

    j’ai eu un problème, en lançant la commande « ./pkitool –initca »

    et j’ai eu le message d’erreur suivant

    « Using CA Common Name: changeme

    grep: /etc/openvpn/easy-rsa/openssl.cnf: Aucun fichier ou dossier de ce type

    pkitool: KEY_CONFIG (set by the ./vars script) is pointing to the wrong

    version of openssl.cnf: /etc/openvpn/easy-rsa/openssl.cnf

    The correct version should have a comment that says: easy-rsa version 2.x « 

    • Fiona

      Meme probleme pour moi

      • William Ashbless

        Tout Pareil. Marche pas.

        • gsgdwwdg

          idem

          • Nidaldz

            J’ai eu le meme soucis. Voici la solution :
            – cd /etc/openvpn/easy-rsa
            – sudo ln -s openssl-1.0.0.cnf openssl.cnf

  • JimFossile

    Bonjour,
    ça fonctionne bien, mais c’est dommage de conseiller de faire du TCP au lieu de l’UDP. Les serveurs sur lesquels on héberge le serveur OpenVPN hébergent souvent aussi des serveurs apache/lighthttpd qui utilisent aussi le port 443. L’UDP permet de faire passer les deux, sans « obstruer » le port 🙂 . Toutefois, j’imagine que tu fais cela pour te rapprocher le plus possible d’une communication en HTTPS et donc rendre le VPN indétectable par rapport à une connexion HTTPS standard. Je ne sais pas si les réseaux qui bloquent les ports s’occupent aussi de vérifier si on utilise du TCP ou de l’UDP.

    Merci du reste, je marque cette page, ça permet de mettre le serveur OpenVPN en place sans trop réfléchir.

    Jim

    • Alexandre T.

      Oula, conseiller de l’UDP au lieu du TCP montre que ces deux protocoles te sont méconnus… D’ailleurs, le rôle principal d’un pare-feu (un vrai, en entreprise) est justement de filtrer sur le protocole de couche 4 (UDP, TCP, ICMP) en plus du numéro du port. Pour résumer, le service TCP 443 est bien différent de l’UDP 443, et cela a un fort impact sur le fonctionnement.

      • JimFossile

        Merci de la réponse. Je vois pas ce qui te permet de dire en quoi je méconnais ces deux protocoles, à part pour le plaisir de détruire ou de te sentir supérieur gratuitement, puisque tu n’en dis pas plus que moi et si j’en parle, c’est bien que ça m’a sorti du cambouis. M’enfin, les routeurs type wifi ouverts qui bloquaient les ports autres que 80 et 443 sur ne m’ont pas bloqué l’utilisation d’OpenVPN en UDP sur le port 443 et cela a correctement fonctionné, c’est donc pour moi une solution tout à fait satisfaisante (peut-être que sur les routeurs en entreprise ce n’est pas le cas parce qu’ils sont mieux configurés, mais ça, je l’avais de toute façon déjà souligné dans mon post). Même si les différences entre entre les deux protocoles sont grandes comme tu le soulignes, je persiste en disant que c’est détectable, mais dans toutes mes situations jamais détecté et que, même si pas forcément nécessaire de remplacer, il aurait été judicieux de dire que OpenVPN tournait aussi en UDP mais que blablabla.

        • Alexandre T.

          Désolé. Je n’avais aucune intention d’être méchant.

          J’ai voulu attirer l’attention des lecteurs potentiels qu’utiliser UDP en lieu et place de TCP est fortement déconseillé. Dans le cas de wifi public, en l’occurrence, seuls l’icmp (le ping !) et l’UDP (port 53 notamment pour le DNS, service de résolution des noms de domaines) peuvent être autorisés, c’est fréquent. Dans ce cas c’est effectivement la seule solution 😉

          L’une des énormes différences principale entre UDP et TCP est l’acquittement des paquets. Je te laisse regarder rapidement sur le net, pas pratique via mon tel de partir dans un exposé (et ce n’est pas le sujet ici).

          Mais pour résumer : TCP >>>> UDP, quand on a le choix.

          • JimFossile

            Merci de ta réponse et de tes excuses. On mesure souvent mal par écrit comment les paroles seront interprétées et du coup, j’ai peut-être été un peu susceptible de mon côté.

            Pour mettre un point final à cette conversation, je poste ce lien qui résume à peu près bien la situation à mon sens : http://anti-hadopi.com/ovpn_modes.html . TCP ou UDP, ça relève d’un choix réfléchi.

          • Mathieu Lecarme

            Oulah, que d’approximations!
            Pour un protocole qui emballe un autre, il est conseillé d’utiliser de l’UDP, qui a plus de souplesse sur la taille de ses paquets, qui permet de limiter la fragmentation. Dans la vraie vie, sur une connexion un peu chaotique, en TCP, ça va être encore pire.

            openvpn, est un vpn, qui permet de sécuriser une connexion vers un autre réseau, ou d’accés à Internet depuis un point de sortie exotique (au Panama, par exemple). Il n’a pas vocation à batailler avec les firewalls pénibles.

            Pour ça, il existe des produits, comme corkscrew qui crée un tunnel en http (du TCP sur le port 443 ne suffit pas à gruger un firewall level 7), et il existe d’autres produits permettant de partager une connexion TCP sur le port 443, entre un SSH et de l’HTTPS, mais j’ai oublié le nom.

          • valorisa

            Sinon je pensais à socat quand on surfe dans un environnement restrictif et non sécurisé comme les réseaux de type Wi-Fi public. Pour contourner le filtrage du port 22 souvent bloqué il y a ce genre de commande bien pratique et qui permet en plus d’utiliser un tunnel SSH via Putty tout en y faisant passer à peu près ce que l’on veut dès l’instant que les applis gèrent le sock 5 : http://www.technomancy.org/networking/forward-one-port-to-another/

            sudo socat TCP-LISTEN:443,reuseaddr,fork TCP:localhost:22

  • titi

    Bonjour et merci pour ce super tuto. Par contre, je l’ai suivi à la lettre et impossible de me connecter. Il me mets l’erreur suivante : ERROR_WINHTTP_AUTODETECTION_FAILED: python/threadpool:210,python/context:59,python/context:37,win/winproxy:141 (pyovpn.util.proxyerr.ProxyError). Auriez-vous une idée du pourquoi du comment? Merci d’avance. Thierry

  • Mohamed Alassane Baro

    Bonjour à tous,

    Mon probleme est le suivant, j’ai bien suivi toutes les configurations ci dessous, et mon vpn marche corerctement. Seul probleme, je n’arrive plus a avoir acces ux atres services de mon reseau local une fois connecté!Malgré les manip decrites ci dessous.

  • Jocelyn Etienne

    À noter: dans les nouvelles version de debian, les fichiers d’exemple de « easy-rsa » ne sont plus dans /usr/share/doc/openvpn/examples/easy-rsa/2.0/ mais dans /usr/share/easy-rsa/

  • Bonjour, j’ajoute une petite contribution pour tout ceux qui comme
    moi ont installé openvpn sur un serveur dédié qui a des règles iptables
    restrictives.

    Pensez à rajouter ces quelques règles si vous avez verrouillé pas mal
    de ports. (il y a moyen de faire plus restrictif mais bon, ça marche) :

    # règles obligatoires pour ouvrir déverrouiller l’accès :
    iptables -I FORWARD -i tun0 -j ACCEPT
    iptables -I FORWARD -o tun0 -j ACCEPT
    iptables -I OUTPUT -o tun0 -j ACCEPT

    # autres règles :
    iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
    iptables -t nat -A POSTROUTING -s 10.8.0.2/24 -o eth0 -j MASQUERADE

    • KiPiCoOl

      Un grand Merci @ toi !

  • ced

    Moi je dis MERCI et BRAVO pour ce tuto simple, clair, net et précis !!!! Ca change des daubes « voie de garage » qu’on trouve sur le net sur ce type de config compliquée !! MERCI ENCORE !!

  • Pingback: openvpn | Aide mémoire()

  • Snakeplissken

    Merci pour ce super tuto ! Je n’avais aucunes connaissances en linux et je viens de passer une grosse semaine à me faire la main et à installer OpenVPN. Par contre, pour ceux que ça peut aider, il faut bien penser à désactiver (ou bien paramétrer) le pare-feu du routeur (je suis derrière une bbox). Ce truc m’a bien fait galérer 🙂

  • Pingback: VPN | Pearltrees()

  • Carmelo

    Bonjour Nico,

    Une fois que la connexion au VPN est effective, comment est-on sûr que les communications sont protégées ?

    Par exemple les résolutions DNS sont elles chiffrées elles aussi ?

  • KiPiCoOl

    Salut;

    Tout d’abord Merci pour ce tuto tres simple et complet.

    J’ai voulu rajouter l’option client-connect coté serveur openvpn linux -> le client Windows ne veut plus se connecter !

    J’ai essayé de rajouté l’option script-security 3 system coté client mais rien n’y fait !

    des que je mets la ligne client-connect, j’ai ca du coté du client windows :

    Tue Feb 25 08:17:57 2014 testvpn/109.52.63.87:49252 Could not create temporary file ‘/tmp/openvpn_cc_fa209c0afc68897fb3c225db7ce62eed.tmp’: No such file or directory
    Tue Feb 25 08:17:57 2014 testvpn/109.52.63.87:49252 Exiting
    Tue Feb 25 08:17:57 2014 testvpn/109.52.63.87:49252 /sbin/route del -net 10.8.2.0 netmask 255.255.255.0
    Tue Feb 25 08:17:57 2014 testvpn/109.52.63.87:49252 ERROR: Linux route delete command failed: could not execute external program
    Tue Feb 25 08:17:57 2014 testvpn/109.52.63.87:49252 Closing TUN/TAP interface
    Tue Feb 25 08:17:57 2014 testvpn/109.52.63.87:49252 /sbin/ifconfig tun0 0.0.0.0
    Tue Feb 25 08:17:57 2014 testvpn/109.52.63.87:49252 Linux ip addr del failed: could not execute external program

    le script coté linux ressemble a ca

    #!/bin/bash
    echo « test message » | mail -s « OpenVPN test » moi@france.fr
    exit 0

    Merci par avance pour votre aide !

    • Jiibii Bii

      si tu as un chroot /etc/openvpn dans ta conf le serveur ne peut pas ecrire dans /tmp

  • Pingback: Tunnels SSH et Tunnels VPN - 0x0ff.info()

  • Pingback: Installation du serveur OpenVPN | Administador de redes()

  • Pingback: OpenVPN avec interface d’administration | Kharec ~ Sandro()

  • Pingback: Grovabrac » Mes découvertes en vrac » Tuto OpenVPN()

  • sfn84

    Hello

    Franchement merci bcp !!
    Je commençais à perdre patience avec des problèmes liés aux certificats, ce tuto m’a débloqué 🙂

  • Pingback: Installation d’OpenVPN sur Centos/RHEL 6.5 : MAKZ.ME()

  • Juju67

    Salut @ tous j’ai un gros problème j’ai suivi le tuto à la lettre et j’arrive a me connecter au vpn sans problème , mon soucis vient du fait que je n’arrive pas a aller sur internet coté client si quelqu’un peux m’aider :/

  • Yaskos Yannick

    slt nico toutes mes félicitations pour ton tuto tres complets et simple.j’ai un leger soucil j’ai configurer un serveur en suivant à la lettre le tuto quand je fait un test sur une machine cliente dans le réseau local le client se connecter tres bien mais quand je remplace l’adresse privée par l’adresse ip publique de mon serveur sa ne passe pas j’ai le message suivant:
    LZO compression initialized
    Thu Jul 03 06:26:10 2014 Control Channel MTU parms [ L:1560 D:168 EF:68 EB:0 ET:0 EL:0 ]
    Thu Jul 03 06:26:10 2014 Socket Buffers: R=[8192->8192] S=[8192->8192]
    Thu Jul 03 06:26:10 2014 MANAGEMENT: >STATE:1404361570,RESOLVE,,,
    Thu Jul 03 06:26:10 2014 Data Channel MTU parms [ L:1560 D:1450 EF:60 EB:135 ET:0 EL:0 AF:3/1 ]
    Thu Jul 03 06:26:10 2014 Local Options hash (VER=V4): ‘2f2c6498’
    Thu Jul 03 06:26:10 2014 Expected Remote Options hash (VER=V4): ‘9915e4a2’
    Thu Jul 03 06:26:10 2014 Attempting to establish TCP connection with 41.205.13.27:443
    Thu Jul 03 06:26:10 2014 MANAGEMENT: >STATE:1404361570,TCP_CONNECT,,,
    Thu Jul 03 06:26:10 2014 TCP connection established with 41.205.13.27:443
    Thu Jul 03 06:26:10 2014 TCPv4_CLIENT link local: [undef]
    Thu Jul 03 06:26:10 2014 TCPv4_CLIENT link remote: 41.205.13.27:443
    Thu Jul 03 06:26:10 2014 MANAGEMENT: >STATE:1404361570,WAIT,,,
    Thu Jul 03 06:26:10 2014 Connection reset, restarting [-1]
    Thu Jul 03 06:26:10 2014 TCP/UDP: Closing socket
    Thu Jul 03 06:26:10 2014 SIGUSR1[soft,connection-reset] received, process restarting
    Thu Jul 03 06:26:10 2014 MANAGEMENT: >STATE:1404361570,RECONNECTING,connection-reset,,
    Thu Jul 03 06:26:10 2014 Restart pause, 5 second(s)
    je ne comprend pas pourquoi. merci d’avance