«

»

Août 09 2012

[Tuto]Mise en place d’un VPN Site to Site sous Debian 6

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:

Topologie

Topologie

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)

  1. Mikaël

    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

    1. Denis

      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?

      1. Mikaël

        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.

Laisser un commentaire

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

Lire les articles précédents :
owncloud-logo
[Tuto]Synchroniser ses contacts et son calendrier avec Owncloud sur Windows

Owncloud utilise les protocoles CalDAV pour la synchronisation des calendriers et CarDAV pour la synchronisation des contacts. Nous allons voir...

Fermer