Tuto, mise en place d’un VPN site to site sous Debian en PPTP.
Voici un petit turoriel pour mettre en place un VPN de type site-to-site entre deux serveurs sous Debian.
Voici la topologie que nous allons mettre en place:
N’ayant pas la possibilité de tester dans un véritable environnement de test j’ai mis en place une infrastructure virtualisé à base de machines virtuelles sous VMWARE Workstation.
Voici la configuration mis en place pour l’écriture de ce tutoriel:
Une machine virtuelle qui fera office de serveur VPN sous Debian 6 avec deux cartes réseaux:
- eth0 –> en NAT (simulation ip publique)
- eth1 –> Segment LAN1 (Ip: 192.168.1.1)
Une machine virtuelle qui fera office de client VPN
- eth0 –> en NAT (simulation ip publique)
- eth1 –> Segment LAN2 (Ip: 192.168.2.1)
Et deux autres machines virtuelles sous Debian 6 qui ferons office de machines clientes
- Client1: 192.168.1.5
- Client2: 192.168.2.5
Le but de la manipulation étant de faire en sorte que les machines clientes puissent communiquer entre elles via un tunnel VPN.
Partie serveur VPN
On configure les interfaces cartes réseaux:
vim /etc/network/interfaces
On laisse donc eth0 en dhcp
Et on configure une adresse ip sur eth1, dans le but de simuler un réseau local en 192.168.1.0/24
donc votre fichier interfaces devrais ressembler à ceci:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 auto eth0 iface eth0 inet dhcp metric 100 auto eth1 iface eth1 inet static address 192.168.1.1 netmask 255.255.255.0 gateway 192.168.1.1 metric 200
et on redémarre les cartes réseaux:
service networking restart
On installe le serveur VPN
apt-get update && apt-get install pptpd
On édite le fichier « /etc/pptpd.conf »
vim /etc/pptpd.conf
Ont met ceci à la fin :
#La plage d'adresse ip fournis par le VPN sera de la forme 172.10.1.0 localip 172.10.1.0 #La plage d'adresse fournie sera de 172.10.1.2 à 172.10.1.10 remoteip 172.10.1.2-10
Vous pouvez bien sur configurer ce fichier comme bon vous semble
Puis on édite le fichier « /etc/ppp/pptpd-options »
vim /etc/ppp/pptpd-options
On s’assure que la configuation soit comme ceci :
name pptpd refuse-pap refuse-chap refuse-mschap require-mschap-v2 require-mppe-128 ms-dns 8.8.8.8 #serveur DNS pour résolution de nom proxyarp nodefaultroute
Puis nous allons créer un utilisateur, cet utilisateur sera celui avec lequel notre client VPN se connectera.
vim /etc/ppp/chap-secrets
Et rentrez le compte utilisateur de la façon suivante:
#username pptpd password * sitedistant pptpd motdepasse *
Pour des raisons de sécurité vous pouvez mettre à la place de * l’IP publique de votre site distant.
Enfin on redémarre le service pptpd
service pptpd restart
Maintenant nous allons mettre en place un script qui va permettre à notre serveur VPN de :
- Partager sa connexion internet
- Rediriger les paquets a destinination du site distant via le tunnel VPN
#!/bin/bash ##Denis ROSENKRANZ ##denisrosenkranz.com start() { echo -n "Application des règles IpTables: " #Forwarding echo 1 > /proc/sys/net/ipv4/ip_forward #Cleaning iptables -F iptables -X #On met en place la redirection de paquet dans le cas ou eth0 est connecté à internet iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #On active la redirection de paquets pour les sites distants route add -net 192.168.2.0 netmask 255.255.255.0 dev ppp0 echo " [termine]" echo } stop() { echo -n "Flush des règles IpTables: " iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -F iptables -t nat -F iptables -X iptables -t nat -X route del -net 192.168.2.0 netmask 255.255.255.0 dev ppp0 echo " [termine]" echo } case $1 in start) start ;; stop) stop ;; restart) stop start ;; status) /sbin/iptables -L /sbin/iptables -t nat -L ;; *) echo "Usage: routing {start|stop|restart|status}" esac exit
Que veut dire cette ligne ?
route add -net 192.168.2.0 netmask 255.255.255.0 dev ppp0
La signification de cette ligne est la suivante:
« Tous les paquets à destionnation des adresses ip du type 192.168.2.0/24 passent par le VPN (pp0) »
Ce script est à créer dans le dossier /etc/init.d/ avec comme nom de fichier « routing »
Puis on le rend exécutable et on l’active au démarrage avec les commandes suivantes:
chmod +x /etc/init.d/routing update-rc.d routing defaults #On lance le script avec la commande suivante service routing start
Configuration du serveur client:
Comme pour le serveur VPN nous allons commencer par configurer les cartes réseaux:
vim /etc/network/interfaces
On laisse donc eth0 en dhcp
Et on configure une adresse ip sur eth1, dans le but de simuler un réseau local en 192.168.2.0/24
donc votre fichier interfaces devrais ressembler à ceci:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 auto eth0 iface eth0 inet dhcp metric 100 auto eth1 iface eth1 inet static address 192.168.2.1 netmask 255.255.255.0 gateway 192.168.2.1 metric 200
et on redémarre les cartes réseaux:
service networking restart
Maintenant, nous allons mettre en place le client VPN
apt-get install pptp-linux binutils
Une fois cela fait nous allons tenter une connexion initiale à l’aide de cette commande:
pptpsetup --create pptp --server 172.190.54.36 --username sitedistant --password motdepasse –-encrypt --start
Si vous avez ceci en réponse c’est que vous êtes connectés à votre serveur VPN
Using interface ppp0 Connect: ppp0 /dev/pts/1 CHAP authentication succeeded MPPE 128-bit stateless compression enabled local IP address 172.10.1.2 remote IP address 172.10.1.0
Maintenant nous allons mettre en place un script au démarrage du serveur pour qu’il puisse se connecter au VPN automatiquement au démarrage et faire en sorte que tous les paquets à destination de site distant passent par le VPN.
Tout d’abord nous allons créer le script dans /etc/init.d/
vim /etc/init.d/conectvpnclient
Puis vous le remplissez comme ceci: (en mettant bien vos propres informations dedans)
#!/bin/bash ##Denis ROSENKRANZ ##denisrosenkranz.com start() { #Forwarding echo 1 > /proc/sys/net/ipv4/ip_forward #Cleaning iptables -F iptables -X #On met en place la redirection de paquet dans le cas ou eth0 est connecté internet iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE echo -n "Connexion au VPN" pptpsetup --create pptp --server 172.190.54.36 --username sitedistant --password motdepasse –-encrypt --start route add -net 192.168.1.0 netmask 255.255.255.0 dev ppp0 echo " [termine]" } # Fonction pour arréter la connection au VPN stop() { echo -n "Flush des règles IpTables: " iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT iptables -F iptables -t nat -F iptables -X iptables -t nat -X echo -n "Arrêt de la connextion au VPN: " pptpsetup --delete pptp route del -net 192.168.1.0 netmask 255.255.255.0 dev ppp0 echo " [termine]" echo } case $1 in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: conectvpnclient {start|stop|restart}" esac exit
On le rend exécutable:
chmod +x /etc/init.d/conectvpnclient
Et pour finir on active le script au démarrage de la machine:
update-rc.d conectvpnclient defaults
Et on lance ce script pour démarrer la connexion VPN
service conectvpnclient start
Mise en place des machines clientes
Pour tester le bon fonctionnement de cette infrastructure, j’ai mis en place deux machines virtuelles sous Debian 6 avec la configuration IP suivante:
Machine cliente1
eth0 : Segment LAN1
Fichier /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 auto eth0 iface eth0 inet static address 192.168.1.5 netmask 255.255.255.0 gateway 192.168.1.1
Machine cliente2
eth0 : Segment LAN2
Fichier /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 auto eth0 iface eth0 inet static address 192.168.2.5 netmask 255.255.255.0 gateway 192.168.2.1
Une fois ces deux machines misent en place vous pouvez tester le fonctionnement de cette infrastrucuture en pingant depuis votre machine cliente1 la machine cliente2
ping 192.168.2.5
Si vous avez une réponse positive c’est que votre VPN fonctionne !
3 Commentaires
Bonjour Denis et bravo pour tes tutoriels,
Il s’agit du premier que j’essai de réalisé mais je pense que ce ne sera pas le dernier !
Je suis cependant bloquer à une étape :
Il s’agit de la connexion initial –>
pptpsetup –create pptp –server xxx.xxx.xxx.xxx –username sitedistant –password ****** –-encrypt –start
Using interface ppp0
Connect: ppp0 /dev/pts/1
anon warn[open_inetsock:pptp_callmgr.c:329]: connect: Connection refused
anon fatal[callmgr_main:pptp_callmgr.c:127]: Could not open control connection to xxx.xxx.xxx.xxx
anon fatal[open_callmgr:pptp.c:487]: Call manager exited with error 256
Modem hangup
Connection terminated.
As tu une idée d’où cela peut venir ?
Bonne continuation
Auteur
Salut, peut-tu m’expliquer ta configuration système et réseau?
As-tu un pare-feu entre tes deux machines que tu veux connecter?
Alors,
Il s’agit de 2 machines virtuelles Debian squeeze installer sur 2 serveur vmware esxi différent et distant. Elles utilises chacune 2 cartes réseaux physiques en bridges et tout les pare-feu sont désactivé même au niveau des BOX.
Par contre, je n’avais pas bien vérifier,
ma machine cliente ping bien le serveur mais le serveur n’arrive pas à pinger la machine cliente.