12

comment installer OpenVPN sur Debian/Ubuntu serveur

A travers ce tuto, je vais essayé au mieux d’expliquer comment installer et paramétrer un serveur OpenVPN à la maison.

Il faut savoir, qu’il aussi possible de monter simplement un tunnel SSH sur son serveur.

Situation de départ

Un serveur Debian ou Ubuntu fraichement installé.

Dans mon cas, mes informations concernant le serveur:

  • Nom: ubserv
  • Adresse réseau: 192.168.1.10/255.255.255.0
  • Serveur DNS: 8.8.8.8

Un client, qui sera une distribution Manjaro.

Le but est que le client Manjaro puisse se connecter au serveur OpenVPN et ce dernier lui attribu une adresse réseau et avoir accès à Internet.

Dans notre cas, le serveur OpenVPN va écouter sur le port 443 pour contourner les problèmes de proxy entreprise. Attention, si sur le serveur il y un serveur web avec SSL d’activer il faut utiliser SSLH. Sur l’interface du serveur OpenVPN sera monté un pont réseau.

Il faut penser, ça ne sera pas vue ici, à paramétrer le routeur/box pour rediriger l’adresse IP Public sur le port 443 vers le serveur OpenVPN.

Toutes les commandes seront éxécutées en tant que root:

sudo -s

Pré-requis

Installation des pré-requis sur le serveur:

apt-get install openvpn bridge-utils

Configuration du serveur OpenVPN

Le fichier de configuration réseau du serveur se trouve dans /etc/network/interfaces.

Configuration réseau de départ:

auto lo eth0
iface lo inet loopback

# The primary network interface
## This device provides internet access.
iface eth0 inet static
  address 192.168.1.10
  netmask 255.255.255.0
  gateway 192.168.1.1

Configuration réseau avec le pont:

auto lo br0

iface lo inet loopback

iface br0 inet static
  address 192.168.1.10
  netmask 255.255.255.0
  gateway 192.168.1.1
  bridge_ports eth0

iface eth0 inet manual
  up ip link set $IFACE up promisc on
  down ip link set $IFACE down promisc off

Si le serveur est une machine virtuelle ajouter au fichier:

bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off

Rédémarrer le service réseau:

service networking restart

Création des scripts up.sh et down.sh, qui vont être utiles pour l’auto-gestion du pont sur le serveur OpenVPN:

nano /etc/openvpn/up.sh
#!/bin/sh

BR=$1
DEV=$2
MTU=$3
/sbin/ip link set "$DEV" up promisc on mtu "$MTU"
/sbin/brctl addif $BR $DEV
nano /etc/openvpn/down.sh
#!/bin/sh

BR=$1
DEV=$2

/sbin/brctl delif $BR $DEV
/sbin/ip link set "$DEV" down

Rendre les scripts éxécutable:

chmod +x /etc/openvpn/up.sh /etc/openvpn/down.sh

Préparation des fichiers de configuration d’OpenVPN

mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/
chown -R $USER /etc/openvpn/easy-rsa/

Pour éviter l’erreure suivante: The correct version should have a comment that says: easy-rsa version 2.x, on créé un lien symbolique:

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

Personnalisation du fichiers vars

nano /etc/openvpn/easy-rsa/vars

Aller à la fin du fichier et changer les valeurs suivantes:

export KEY_COUNTRY="FR"
export KEY_PROVINCE="75"
export KEY_CITY="Paris"
export KEY_ORG="memo-linux.com"
export KEY_EMAIL="contact@memo-linux.com"

Préparation des certificats de sécurités pour le serveur:

cd /etc/openvpn/easy-rsa/
source vars
./clean-all
./build-ca

Création des certificats de sécurités pour le serveurs

./build-key-server ubserv

Diffie Hellman parameters must be generated for the OpenVPN server

./build-dh

Copier les certificats dans le répertoire /etc/openvpn/

cd  keys/
cp ubserv.crt ubserv.key ca.crt dh1024.pem /etc/openvpn/

Création des certificats pour le client manjaro:

cd /etc/openvpn/easy-rsa/
source vars
./build-key manajaro

Copier les fichiers suivant sur le client:

/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/manjaro.crt
/etc/openvpn/easy-rsa/keys/manjaro.key

Exemple de copie avec scp:

scp /etc/openvpn/easy-rsa/keys/manjaro.crt fred@manjaro-pc:/etc/opencpn/

Attention, dans ce cas il faut avoir un serveur SSH qui tourne sur le client Manjaro.

Création du fichier de configuration OpenVPN pour le serveur:

nano /etc/openvpn/server.conf

Voici un exemple, qui fonctionne dans mon cas:

###configuration d'openvpn server
mode server
tls-server

local ubserv ## ip/hostname du serveur
port 443 ## port du serveur, ici je choisi le port 443 pour contourner les problème de proxy entreprise
proto udp

persist-key
persist-tun

#Le pont réseau
dev tap0
up "/etc/openvpn/up.sh br0 tap0 1500"
down "/etc/openvpn/down.sh br0 tap0"

#certificates and encryption
ca ca.crt
cert ubserv.crt
key ubserv.key
dh dh1024.pem
tls-auth ta.key 0

cipher BF-CBC
comp-lzo

#DHCP Information
ifconfig-pool-persist ipp.txt
server-bridge 192.168.1.10 255.255.255.0 192.168.1.100 192.168.1.110 ##Attribution de 10 adresses réseau maxi
push "dhcp-option DNS 10.94.8.24" #envoie du serveur DNS
max-clients 10 ## Limitation à 10 clients simultanés

#log et sécurité
user nobody #on passe l'utilisateur sans droit
group nogroup #on passe le groupe de l'utilisateur sans groupe
keepalive 10 120
status openvpn-status.log # les logs d'openvpn
verb 3

A ce stade, le serveur OpenVPN peut être démarrer:

/etc/init.d/openvpn start

Vérification que tout est OK:

openvpn /etc/openvpn/server.conf

Et vérifcation qu’OpenVPN écoute bien sur le port 443:

netstat -lapuent | grep 443
tcp        0      0 0.0.0.0:1443            0.0.0.0:*               LISTEN      0          11651       2094/nginx
udp        0      0 ubserv:443         0.0.0.0:*                           0          16997       5426/openvpn

Ici OpenVPN écoute sur le port 443 et le serveur web Nginx sur le port 1443, donc pas de conflit entre les deux services.

Configuration d’OpenVPN sur le client

Pré-requis:
installer openvpn et networkmanager-openvpn sur le client.

sudo pacman -S networkmanager-openvpn openvpn

Copie des fichiers nécessaire pour le bon focntionnement du client:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/

Création du fichier de configuration pour le client:

nano /etc/openvpn/client.conf

Voici un exemple, qui fonctionne chez moi:

### Fichier de configuration du client OpenVpn
# On spécifie à OpenVpn que c'est un client
client

# Qu'on utilise tun0
dev tap

# le nom et le port du serveur OpenVpn
remote ubserv 443

# Le client n'a pas besoin de spécifié un port
nobind

# Keep trying to resolve the host name of OpenVPN server.
## The windows GUI seems to dislike the following rule.
##You may need to comment it out.
resolv-retry infinite

# Preserve state across restarts
persist-key
persist-tun

# Les certificats et clé du client créés à partir du serveur
ca /etc/openvpn/ca.crt
cert /etc/openvpn/manjaro.crt
key /etc/openvpn/manjaro.key

# Since we specified the tls-auth for server, we need it for the client
# note: 0 = server, 1 = client
tls-auth /etc/openvpn/ta.key 1

# Specify same cipher as server
cipher BF-CBC

# Utilisation de la compression
comp-lzo

# Log verbosity (to help if there are problems)
verb 3

Vérification que tout est OK:

openvpn /etc/openvpn/client.conf

Configurer Network-Manager sur le client pour se connecter au VPN

Ouvrir NetworkManager:
Puis cliquer sur la petite croix en bas à gauche.
vpn01

Choisir l’interface: VPN puis cilquer sur Créer.
vpn02

Sélectionner OpenVPN et de nouveau Créer.
vpn03

Indiquer l’Ip Public ou le nom DNS du serveur OpenVPN, puis renseigner les certificats et la clé privée.
vpn05

Attention, dans mon cas j’écoute sur le port 443 et j’utilise la compression. Puis cliquer sur Valider.
vpn06

Placer le curseur à 1. Attendre quelques secondes…Et voilà connecté au serveur OpenVPN! :-)
vpn07

Inspiré de help.ubuntu.com


D'autres articles :

Partager cet article:

Il est aussi possible de Flattr l'article en cliquant sur le dernier bouton, pour me payer une Duff!

fred

Autodidacte, technicien informatique système et réseau. Utilisateur au quotidien de GNU/Linux. Écoute et joue du Punk'Hard'Blues'n'Roll et me déplace tous les jours avec mon fidèle destrier, qui est le magnifique ZRX1100.

12 Comments

  1. Pas mal !
    Dommage qu’il n’y ai pas quelques lignes sur la configuration (port fwding) de nginx pour que le tout soit transparent !

  2. Salut Nono,
    comme indiqué au début de l’article, c’est SSLH qui fait le boulot du port fwding ;-)

  3. J’avais compris et j’utilise la même astuce, mais perso, j’ai dû kill des process, car tournant sur le même port (c’était un apache, j’avoue) et même si sshl est assez simple à prendre en main, quelques lignes dessus n’auraient pas nuient, non ?

  4. Oh, au temps pour moi, je n’avais pas suivi le lien.
    Du coup, tuto parfait et surtout complet :) Bravo !

  5. D’autant plus que j’avais déjà participé à l’article sus-nommé :D
    Là, j’ai plus l’excuse du café :D
    Et, c’est sans doute toi qui m’avait fait découvrir sshl du coup :p

  6. Bonjour,

    Je n’ai pas sur mon serveur le dossier la « /usr/share/doc/openvpn/examples/easy-rsa/2.0/ » . Savez-vous comment résoudre ce problème?

  7. Bonjour FraxyGFX,
    tu es sur quelle distribution? Debian ?
    as-tu bien installé le paquet openvpn ?

  8. Bonjour,
    je dois actuellement installer un VPN pour permettre aux utilisateurs extérieurs a mon entreprise de se connecter sur notre réseau.

    Comment installer openvpn pour qu’il fonctionne comme cela?

    Dois je mettre 2 cartes réseaux sur mon serveur avec
    eth 0 sur mon réseau local
    eth 1 @ip public
    mais comment configurer openvpn pour que cela fonctionne?

    J’ai regardé plusieurs tutos mais il me semble que les configurations proposées ne correspondent pas à mes besoins.

    Par avance merci.

  9. Bonjour Oreze,

    pas obligatoire d’avoir deux carte réseaux sur le serveur, cependant il faut bien configurer le routeur pour qu’il redirige les demandes d’accès vers le serveur OpenVPN.

    Exemple:
    l’accès se fait via ubserv.domaine.tld:443
    il faut que le routeur puisse rediriger ubserv.domaine.tld:443 vers le serveur ubserv du réreseau local.

  10. Ok donc je peux très bien déclarer ma ressource dns chez mon hébergeur avec une adresse Ip public et après sur mon routeur je translate tout ce qui arrive sur cette @ip:443 –> serverlocal:443

    Merci d’avoir répondu aussi rapidement, je vais tester cela de suite je passe vous dire si cela fonctionne :)

    Encore merci

Laisser un commentaire

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