Créer un réseau virtuel privé avec SSH
Le sept.19, 2007, dans Debian, Linux
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 :
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…
