Ce que j’adore avec l’informatique c’est que quand on croit connaître un sujet, on se rend toujours compte qu’il reste encore une montagne de choses à apprendre.
J’avais fait un article sur le port forwarding avec ssh pour faire des tunnels mais depuis j’ai trouvé beaucoup mieux !
SSH permet de faire un VPN grâce aux interfaces virtuelles TUN/TAP. Ici je vais expliquer la méthode que j’utilise avec une interface TUN.
Les prérequis sont d’avoir un client sous *nix (j’ai pas testé avec windows), un serveur ssh avec accès root et sur Mac il faut installer les drivers tun/tap. Il faut également ajouter “PermitTunnel yes” dans votre sshd_config.
Première étape, établir la connexion ssh avec le serveur.
sudo ssh -w 0:0 root@server.com
Des droits root sont nécéssaire du coté client et serveur pour créer les interfaces tun. L’option -w spécifie qu’on crée les interfaces et 0:0 spécifie le numéro des interfaces coté client:serveur. Sur Mac l’interface tun peut être différente de 0, vous pouvez alors utiliser “any:0″ qui permettra d’utiliser n’importe quelle interface tun coté client (le mac).
Ensuite il faut configurer les interfaces des 2 cotés :
server# ifconfig tun0 172.16.0.1 netmask 255.255.255.252
server# ifconfig tun0 up
client# ifconfig tun0 172.16.0.2 netmask 255.255.255.252
client# ifconfig tun0 up
Sur Mac il faut rajouter une ip de destination dans le ifconfig :
clientMac# ifconfig tun15 172.16.0.2 netmask 255.255.255.252 172.16.0.1
A partir de maintenant vous devriez pouvoir faire un ping du client sur l’ip de l’interface tun du serveur.
Ensuite il faut que le serveur autorise l’ip forwarding et qu’on active le NAT.
server# echo 1 > /proc/sys/net/ipv4/ip_forward
server# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
A partir d’ici il n’y a plus de manipulation sur le serveur, il ne reste qu’a configurer les routes coté client.
client# route add 192.168.1.0/24 172.16.0.1
Maintenant vous avez accès au réseau du serveur (192.168.1.0/24) !
Si vous souhaitez faire passer tout votre traffic par le VPN c’est possible aussi, il suffit d’ajouter une route vers l’ip du serveur avec comme gateway l’ip de la gateway coté client pour ne pas perdre la connexion et ensuite mettre la gateway du réseau distant (celui du serveur) comme gateway par défaut sur la machine client.
Il est possible de scripter tout ça, d’utiliser une authentification par clé, de backgrounder la connexion ssh, etc… mais c’est une autre histoire
Recent Comments