Je cherchais comment relier deux réseaux simplement tout en redirigeant le trafic du premier vers le second.

Pourquoi faire me direz vous ? Car je cherche à rediriger le trafic que génère mon réseau chez moi, vers une VM chez OVH. Free ayant un peu de mal sur certains peering contrairement à OVH (par exemple sur Free, Youtube lag à mort le soir et WE).

Actuellement je forward simplement le trafic de mon PC avec putty et un tunnel ssh vers une VM. Mais comme dit au dessus, je veux maintenant mettre ce tunnel un niveau au dessus : sur le routeur qui gère mon réseau, de telle sorte que tous les clients soient « redirigés » automatiquement chez OVH.

Heureusement pour moi, SSH est pas mal complet. 🙂

Nous avons donc un réseau local en 10.0.0.0/24 et un réseau distant (où sera le serveur) en 10.1.1.1/24.

On commence par configurer ssh pour qu’il autorise les connexions root et les tunnels (tant qu’à faire). Pour ce faire on édite le fichier sshd_config qui est situé dans /etc/ssh/. On passe « PermitRootLogin » à « yes » et on ajoute, s’il n’est pas présent (c’était mon cas), « PermitTunnel » que l’on passe aussi à « yes ». Puis on restart ssh :
[bash]/etc/init.d/ssh restart[/bash]

Ne pas oublier d’activer l’ip forwarding si besoin.

On peut maintenant passer aux choses sérieuses. On commence par configurer le client (routeur sur le réseau local dans mon cas) en le liant au serveur

[bash]ssh -fNTC -w 0:1 IP.DU.SERVEUR.DISTANT true[/bash]

Pour les options :

  • -f : Permet de lancer ssh en arrière plan, plutôt utile dans notre cas ;
  • -N : Permet de ne pas exécuter de commandes distantes. Vu que l’on veut juste un tunnel, cela nous convient ;
  • -T : « Disable pseudo-tty allocation », assez parlant ;
  • -C : Active la compression. Utile pour les petites connexions, ça l’est moins pour les plus grosses… A vous de voir. Ne pas oublier que la compression bouffe des ressources.
  • -w Demande l’ouverture d’un tunnel entre le client (premier argument, dans notre cas 0 qui deviendra tun0) et le serveur (deuxième argument, donc dans notre cas 1 qui deviendra tun1).

On ajoute l’interface :

[bash]ifconfig tun0 172.16.1.1 172.16.1.2 netmask 255.255.255.252[/bash]

  • tun0 est le nom de l’interface (que l’on a choisi plus haut) ;
  • 172.16.1.1 est l’IP du client sur lequel on est ;
  • 172.16.1.2 est l’IP de la gateway (du serveur)
  • Le netmask est adapté dans ce cas pour un nombre d’IP restreint, ce qui est logique vu qu’on fait du point à point.

On ajoute la route :

[bash]route add -net 10.1.1.0 netmask 255.255.255.0 gw 172.16.1.2[/bash]

Maintenant on passe sur le serveur. On utilise la même commande (mais à l’envers) que sur le client pour créer l’interface :

[bash]ifconfig tun1 172.16.1.2 172.16.1.1 netmask 255.255.255.252[/bash]

De même pour la route :

[bash]route add -net 10.0.0.0 netmask 255.255.255.0 gw 172.16.1.1[/bash]

Maintenant, pour rediriger le trafic, il faut modifier la passerelle par défaut.

[bash]# On commence par la supprimer :
route del default
# Puis on la crée à nouveau avec l’ip de l’interface du tunnel comme gateway :
route add default gw 172.16.1.2[/bash]

Quelques liens :

http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh+1
http://linux.die.net/man/8/route
https://help.ubuntu.com/community/SSH_VPN