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.
[code language= »lang= »]
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.
Choisir l’interface: VPN puis cilquer sur Créer.
Sélectionner OpenVPN et de nouveau Créer.
Indiquer l’Ip Public ou le nom DNS du serveur OpenVPN, puis renseigner les certificats et la clé privée.
Attention, dans mon cas j’écoute sur le port 443 et j’utilise la compression. Puis cliquer sur Valider.
Placer le curseur à 1. Attendre quelques secondes…Et voilà connecté au serveur OpenVPN! :-)
Inspiré de help.ubuntu.com
Pas mal !
Dommage qu’il n’y ai pas quelques lignes sur la configuration (port fwding) de nginx pour que le tout soit transparent !
Salut Nono,
comme indiqué au début de l’article, c’est SSLH qui fait le boulot du port fwding ;-)
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 ?
En fait, je pensais quand mettant le lien sur l’article concerné suffisait ?
Oh, au temps pour moi, je n’avais pas suivi le lien.
Du coup, tuto parfait et surtout complet :) Bravo !
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
no problemo nono ;-)
du coup je me pose la question si les liens sont assez mis en évidence ?
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?
Bonjour FraxyGFX,
tu es sur quelle distribution? Debian ?
as-tu bien installé le paquet openvpn ?
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.
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.
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
c’est beau mais est ce que l’ on peut fait ça sans avoir un reseaux mobiles et wifi
s’ il vous plait merci
Excuser pour les fautes