Créer son serveur VPN sous Debian
Le mar.27, 2008, dans Debian
Voici un tutoriel tout frais qui va vous permettre comme moi d’avoir son propre serveur VPN (Virtual Private Network).
Un serveur VPN, c’est quoi ? Pennons mon exemple : J’ai un serveur à la maison et j’ai un pc portable avec lequel je bouge beaucoup. J’avais envie d’un système me permettant d’être dans mon réseau local partout où j’irais dans le monde. C’est le but du VPN, il va agir comme un tunnel chiffré entre le client et le serveur via des certificats.
J’ai donc choisis une solution libre : OpenVPN accouplé à OpenSSL pour le chiffrement.
Pour cela, une bête de course n’est pas nécessaire, juste de quoi installer une Debian. Pour ma part j’ai une vieille tour trouvée dans ma cave avec un céléron, 32 Mo de mémoire vive et un vieux chipset graphique. De toute façon, pas question d’installer un environnement graphique : les paquetages minimum sont suffisants.
Voici mon architecture réseau :
Mon routeur : 192.168.0.254
Mon serveur VPN derrière le routeur : 192.168.0.111
L’interface TUN sur le serveur VPN qui va faire le lien : 10.8.0.1
L’interface TUN sur le client : 10.8.0.6
Le client étant connecté sur Internet via une autre connexion que la mienne.
Une fois votre serveur installé et mis à jour, installer ces paquets :
# aptitude install openvpn
# aptitude install liblzo
# aptitude install openssl
Vous êtres prêt pour la suite.
Notre VPN sera sécurisé à l’aide de certificats 1024 bits chiffrés RSA.
Sur le serveur :
cd /usr/share/doc/openvpn/examples/easy-rsa/
Edittez le fichier “vars” et à la fin remplissez les champs du certificat, comme par exemple :
- export KEY_COUNTRY=FR
- export KEY_PROVINCE=France
- export KEY_CITY=Paris
- export KEY_ORG=”MonOrganisation”
- export KEY_EMAIL=”contact@MonOrganisation.fr”
Initialisez les clés :
# . ./vars
# ./clean-all
Nous allons créer le certificat principal :
# ./build-ca
Tous les champs sont dejà rentrés sauf “Common Name” où il faut renseigner (par exemple “principal”)
Ensuite nous allons créer le certificat propre au serveur :
# ./build-key-server serveur
Tous les champs sont dejà rentrés sauf “Common Name” où il faut renseigner (par exemple “serveur”)
Création du certificat pour le client :
# cd /usr/share/doc/openvpn/examples/easy-rsa/
# . ./vars
# ./build-key client
# ./build-key client
Création du paramètre Diffie Hellman :
# ./build-dh
Copie des clés dans le répertoire de configuration d’OpenVPN :
# cp ./keys/ca.crt /etc/openvpn/
# cp ./keys/ca.key /etc/openvpn/
# cp ./keys/serveur.crt /etc/openvpn/
# cp ./keys/serveur.key /etc/openvpn/
# cp ./keys/dh1024.pem /etc/openvpn/
Création du fichier de configuration d’OpenVPN :
# vim /etc/openvpn/openvn.conf
#Port en écoute utilisé pour la connexion VPN
port XXX
#Protocole utilisé (Le protocole udp est plus sécurisé que le tcp)
proto tcp
#Type d’interface réseau virtuelle créée
dev tun
#Nom des fichiers servant à l’authentification des clients via OpenSSL
ca /etc/openvpn/ca.crt
cert /etc/openvpn/serveur.crt
key /etc/openvpn/serveur.key
dh /etc/openvpn/dh1024.pem
#Adresse du réseau virtuel (Le serveur aura l’adresse 192.168.0.1)
server 10.8.0.0 255.255.255.0
#Cette ligne ajoute sur le client la route du réseau du serveur
push “route 192.168.0.0 255.255.255.0″
#Ces lignes indiquent aux clients l’adresse des serveur DNS et WINS
push “dhcp-option DNS 192.168.0.254″
push “dhcp-option WINS 192.168.0.254″
# Cette ligne permet aux clients de voire les autres clients
client-to-client
keepalive 10 120
#Cette ligne active la compression
comp-lzo
#Ces lignes permettent de rendre persistante la connexion
persist-key
persist-tun
#Cette ligne permet d’indiquer le niveau de log souhaité (de 1 à 9)
verb 3
Voila pour la configuration serveur.
Si comme moi vous avez un routeur, pensez à ouvrir le port que vous aurez choisit sur le routeur !
Sur le serveur, il nous reste encore à activer le module tun du noyau :
# modprobe tun
Puis à configurer le réseau :
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t -nat -A POSTROUTING -o eth0 -s 192.168.0.254 -j MASQUERADE
iptables -t nat -A FORWARD -in-interface tun0 -j ACCEPT
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
# /etc/init.d/openvpn restart
Via SCP ou clé USB, importer les certificats clients vers le poste client (les fichiers nécéssaires sont ca.crt, client.crt et client.key).
Mettez les dans votre répertoire /etc/openvpn/
Maintenant, travaillons sur le poste client pour en finir :
Editez le fichier de configuration OpenVPN :
# vim /etc/openvpn/openvpn.conf
#nous sommes client
client
tls-client
#le serveur
remote XX.XX.XX.XX XX #@IP publique du serveur et port d’écoute
proto tcp
dev tun
ifconfig 10.8.0.2 10.8.0.1
#Certification de l’AC
ca /etc/openvpn/ca.crt
#notre certificat
cert /etc/openvpn/client.crt
#clef secrete
key /etc/openvpn/client.key
#negociation
reneg-sec 21600
#compression
comp-lzo
#verbosité
verb 3
Voilà pour la configuration.
Maintenant configurons le réseau :
# echo 1 > /proc/sys/net/ipv4/ip_forward
# route add -net 10.8.0.0 netmask 255.255.255.0 gw 192.168.0.111
# /etc/init.d/openvpn restart
Et maintenant, connectons nous au VPN sur le client :
# openvpn --config /etc/openvpn/openvpn.conf
# ping 192.168.0.111
PING 192.168.0.111 (192.168.0.111) 56(84) bytes of data.
64 bytes from 192.168.0.111: icmp_seq=1 ttl=64 time=3.17 ms
64 bytes from 192.168.0.111: icmp_seq=2 ttl=64 time=2.62 ms
64 bytes from 192.168.0.111: icmp_seq=3 ttl=64 time=3.34 ms
64 bytes from 192.168.0.111: icmp_seq=4 ttl=64 time=2.77 ms
Et voilà le travail.
Vous êtes en réseau local de n’importe où dans le monde.
Cela permet par exemple de détourner des ports fermés lors d’une connection bridée et vous permettrait de les avoir tous ouverts comme à la maison ![]()
Si vous avez la moindre question ou un problème, contactez moi.
32 Comments for this entry
1 Trackback or Pingback for this entry
-
TOBaa » Installer un serveur VPN sur Debian
mai 19th, 2009 on 12 h 49 min[...] Source de cet article [...]
mars 28th, 2008 on 1 h 15 min
Super billet. Merci, je marque l’adresse.
mars 28th, 2008 on 10 h 12 min
Merci beaucoup pour ce billet. L’explication est simple, il viendra remplir mes marques-pages.
mars 28th, 2008 on 14 h 17 min
Merci, n’hésitez pas à me contacter pour des questions ou remarques…
mars 28th, 2008 on 17 h 56 min
Excellent tuto. Simple, clair, précis, accessible.
Très bon boulot.
Quel avantage du VPN par rapport à un proxy socks avec serveur ssh ?
mars 28th, 2008 on 19 h 17 min
Ma réponse est simple, je préconise l’authentification par certificat.
Après je ne connais pas plus le protocole socks, et son utilisation. Je sais juste qu’il ne gère pas les certificats.
Le VPN est bien plus puissant, il permet même l’authentification via PAM, enfin bref, on peux faire tellement de choses avec… !
mars 29th, 2008 on 9 h 17 min
Merci beaucoup pour ce tuto complet!
avril 1st, 2008 on 13 h 02 min
slt
j’ai des prob avec la cration du vpn
en fait je trouve pas le fichier keys
avril 20th, 2008 on 14 h 38 min
Le problème doit venir au niveau de l’installation de open-ssl,
- est tu sous Debian?
- as tu installer les paquets venant des depots ?
- as tu regarder au bon endroit pour les fichiers ?
avril 21st, 2008 on 12 h 30 min
Félicitation! pour votre serveur VPN sous Debian.
Je prépare un mémoire sur le « Déploiement d’un serveur VPN sous LIUX ».
Je dois soutenir vers le mois d’octobre si tout va bien.
Quelle version de linux choisir?Puorquoi?
Pour le matériel je dispose juste d’un PC chez moi si non j’ai un moyen d’accéder à l’internet à l’école pour mes recherches.
Pouvez vous m’accompagnez afin qu je puisse atteindre l’objectif c’est à dire acceder à dister un client sous windows ou linux quelque soit l’endroit où je me trouve.
Merci d’avance.
Conseils et suggestions sont les bienvenus!
avril 21st, 2008 on 12 h 35 min
Félicitation! pour votre serveur VPN sous Debian.
Je prépare un mémoire sur le « Déploiement d’un serveur VPN sous LINUX ».
Je dois soutenir vers le mois d’octobre si tout va bien.
Quelle version de linux choisir?Puorquoi?Quels matériels?
Pour le matériel je dispose juste d’un PC chez moi si non j’ai un moyen d’accéder à l’internet à l’école pour mes recherches.
Pouvez vous m’accompagnez afin qu je puisse atteindre l’objectif c’est à dire acceder à distance un client sous windows ou linux quelque soit l’endroit où je me trouve. J’ai aussi accès dans une entreprise de 4 postes sous windowsXP?
Merci d’avance.
Conseils et suggestions sont les bienvenus!
avril 29th, 2008 on 8 h 43 min
salut, bon, tuto, mais j’ai une question: j’ai moi même un openVPN opérationnel avec plusieurs clients, mais j’ai besoin de rajouter un client. Comment fait on? faut il recréer tout les certificats ? (laborieux quand même) ou existe il une méthode pour rajouter un client sans refaire tout les certificats (clients et serveur) ?
juin 24th, 2008 on 17 h 53 min
ben tu créer un autre certificat avec la même autorité de certification… ça va te prendre 1 minutes…
Tu fais ca pour chaque client.
Si un certificat est compromis, tu peux même le révoquer !!!
juin 26th, 2008 on 9 h 55 min
Salut,
Excellent tuto, je m’en suis servi comme base pour configurer mon serveur VPN.
Tout vas bien quand chaque client est aussi OpenVPN.
La question, est il possible de se connecter (sous Windows) par la création d’un VPN via le panneau de config ?
juin 26th, 2008 on 16 h 27 min
Non, par contre tu peux utiliser OpenVPN-GUI pour windows.
juillet 13th, 2008 on 22 h 30 min
Salut,
Ton tuto est super clair bravo. Par contre la commande
echo 1 > /proc/sys/net/ipv4/ip_forward
ne va pas supporter un reboot
Il faut mieux décommenter la ligne
net.ipv4.ip_forward=1
dans le fichier /etc/sysctl.conf.
Je ne comprend pas trop tes règles de filtrage, elles me semble complexes.
iptables -t -nat -A POSTROUTING -o eth0 -s 192.168.0.254 -j MASQUERADE
et
iptables –table nat –append POSTROUTING –out-interface eth0 -j MASQUERADE
font pratiquement la même chose. tu peux tester :
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Ça fonctionne chez moi, cela évite les formes longues =).
août 16th, 2008 on 12 h 56 min
bonjour et merci le tuto mais moi j ai eu openvpn en tar.zg j ai un probleme avec openvpn, je n arrive pas a demarrer le serveur car je n ai pas openvpn dans /etc/init.d/
septembre 30th, 2008 on 14 h 05 min
merci pour le tuto;
je suis débutant en VPN et je voudrais savoir comment faire un VPN avec IPsec?
Un bon tuto comme celui là me ferais vraiment plaisir.
septembre 30th, 2008 on 19 h 20 min
C’est très cool ce que t’as fait là.Moi j’ai attencore une petite préoccupation.Est-ce possible de le faire sous UBUNTU?
Si oui comment ?J’attends votre réponse avec impatience.
décembre 6th, 2008 on 14 h 05 min
c’est exactement la même procédure… Ubuntu et Debian sont des distributions « soeurs », elle utilisent le même système de paquetages, et les commandes sont les mêmes.
Bon courage !
décembre 18th, 2008 on 9 h 50 min
Bonjour
Excellent tuto. Comment puis-je le mettre en place dans le cadre de l’interconnexion de plusieurs sites repartis à travers plusieurs pays avec des clients windows XP sur chaque site.
Bonne réception
décembre 22nd, 2008 on 14 h 07 min
Bonjour mon cher frere,
Excuse moi de te demander de faire un petit travail, c’est en fait que je veux soutenir sur le theme « Deploiement d’un reseau VPN sous Linux » et je souhaite que de façon ordonée tu me donne un plan etape par etape et avec toutes les informations.
Je sais compter ur votre bonne comprehension.
Merci de m’envoyer ces informations afin que je soutienne le plus vite possible.
Bien à toi.
février 26th, 2009 on 19 h 54 min
tres bon tuto. Merci
mars 5th, 2009 on 0 h 09 min
Bonjour
Merci pour cette bonne ressource.
Concernant SSH et SOCKS, SSH permet de s’authentifier par certificat. VPN offre-t-il d’autres fonctionnalités qui justifient de le préférer ?
Je suggère que ce tutoriel commence par une copie de /usr/share/doc/openvpn/examples/easy-rsa vers ~ ou /tmp, ce qui éviterait la mauvaise pratique de bidouiller dans /usr/share/doc.
Détail : il me semble que « package » se traduit « paquet »
Cordialement, Merwok
mars 23rd, 2009 on 0 h 48 min
merci beaucoup
juste une question.es que je peut utiliser sa sur mon serveur distant pour l’utiliser comme proxy ?
merci
avril 9th, 2009 on 8 h 50 min
Bonjour,
Vous avez fait un bon tuto,ma question est la suivante pour les iptables je vois que vous dites configurations du réseau au niveau du serveur et au niveau du client;la configuration du réseau se fait sur les deux ou seulement sur le srveur?
mai 16th, 2009 on 0 h 23 min
salut, votre tuto est bonne mais j’ai un problème avec ma config. le client se connect avec des erreur tls. Et openVPN prend la couleur jaune. j’ai besoin d’aide
merci
septembre 12th, 2009 on 14 h 01 min
Merci du tutoriel donnant tous les details sur l’installation et configuration du vpn sous debian.J’ai juste parcouru,il a l’air très interressant et donc repondant au besoin.J’ai depuis lors chercher un document de ce type,merci une fois de plus de votre volonté et savoir-faire.
septembre 12th, 2009 on 14 h 04 min
J’aimerais aussi savoir comment attaquer le serveur depuis un poste client sous windows.Quelle config operée au niveau de la station cliente pour pouvoir se connecter au serveur.
novembre 14th, 2009 on 23 h 29 min
Je suis tombé sur ce tutoriel, et je tiens à dire merci. Il est clair et bien illustré.
Mais j’ai un petit problème au début, à l’initialisation des clés pour le certificat. Quand je fais « ./build-ca » ou « ../vars » ça me dit « you must define KEY_DIR ».
Bon je dois définir une KEY_dir, mais où?
Sa doit être un truc de noob! En tout cas merci pour la futur réponse ^^.
novembre 15th, 2009 on 1 h 31 min
ahahah j’avais dit que c’était un problème de noob. En fait je faisais pas l’espace avant le point de ./vars
merci encore.
janvier 14th, 2010 on 15 h 08 min
Bonjour,
J’ai une petite question, est-il possible de se connecter sur ce vpn avec un client windows ?
Si oui saurais tu expliquer la procedure stp ?
Merci d’avance.
mai 14th, 2010 on 17 h 29 min
Bonjour, merci pour le tutoriel mais je bloquer a openvpn.conf apparemment je ne possède pas le fichier ou avec le temps il a du être remplacé en revanche je possède un autre fichier update-resolv-conf si quelqu’un pourrais me guidez sa serais super sympa merci