Linux

Créer un réseau virtuel privé avec SSH

La nouvelle ( > 4.3 de juillet 2007) version de SSH permet désormais un “Virtual Private Network” entre 2 stations Debian. Trop cool !

Ce VPN va router le traffic d’un ordinateur vers le réseau via une connexion SSH.

SSH et Debian Etch sont requis.

Voici le scénario :

Schéma du tunnel

Ce qui est intéressant, c’est de détourner une connexion avec peu de ports ouverts vers une connexion où tous les ports seront ouverts.

Voici la procédure :

– Sur le client :

$ sudo ssh-keygen -t rsa

On va générer une clé rsa pour root.

Ensuite, rajouter dans le fichier /etc/network/interfaces en remplaçant les “adresseX” :
iface tun0 inet static
pre-up ssh -S /var/run/ssh-myvpn-tunnel-control -M -f -w 0:0 adresse5 true
pre-up sleep 5
address adresse1
pointopoint adresse2
netmask adresse3
up route add -net adresse4 netmask adresse5 gw adresse2 tun0
post-down ssh -S /var/run/ssh-myvpn-tunnel-control -O exit adresse5

Avec comme valeurs :

adresse1 = adresse ip du tunnel coté client “tun0″

adresse2 = adresse ip du tunnel coté serveur “tun0″

adresse3 = masque de sous réseau du tunnel

adresse4 = adresse ip du réseau privé (x.x.x.0)

adresse5 = adresse ip publique eth0

– Sur le serveur :

Editez /etc/ssh/sshd_config:

PermitTunnel point-to-point
PermitRootLogin forced-commands-only

Puis ajoutez ceci dans /root/.ssh/authorized_keys:

tunnel=”0″,command=”/sbin/ifdown tun0;/sbin/ifup tun0″ ssh-rsa AAAA ..snipped.. == root@server

Remplacer ssh-rsa par le contenu de /root/.ssh/id_rsa.pub du client.

Editez /etc/network/interfaces :

iface tun0 inet static
address adresse2
netmask adresse3
pointopoint adresse1

Dans /etc/sysctl.conf, vérifier que net.ipv4.conf.default.forwarding est à 1

 

$ sudo sysctl net.ipv4.conf.default.forwarding=1

Voilà, il ne nous reste plus qu’à activer le tunnel ;

Sur le client :

$ sudo ifup tun0

RTNETLINK answers: File exists
run-parts: /etc/network/if-up.d/avahi-autoipd exited with return code 2

user@client:~$ ping -c 2 192.168.0.101
PING 192.168.0.101 (192.168.0.101) 56(84) bytes of data.
64 bytes from 192.168.0.101 icmp_seq=1 ttl=64 time=305.8 ms
64 bytes from 192.168.0.101 icmp_seq=2 ttl=64 time=299.1 ms

…..

ligne 3 <– Erreur normale !

C’est pas magnifique ?

Vous voilà en réseau local avec votre station distante…

Guide de référence

Software Engineeer at Red Hat, Private Pilot, French guy hiding somewhere in Canada.