Jouons à cache-cache

Aujourd’hui, en raison des diverses lois liberticides mises en oeuvre pour controler l’activité des usagers sur Internet dans notre beau pays de la plainte, je me suis abonné à un très bon service de VPN fourni par la société Suédoise VPNtunnel.

Le service est impeccable, la conf OpenVPN fonctionne out-of-the-box, et ainsi la route par defaut de ma machine client prend le chemin de la Suède. Nickel.

Mais vous me connaissez, j’aime bien me compliquer la vie. Le service en question ne fournit pas d’IP fixe, et c’est bien normal au vu de l’objectif même de l’offre; seulement voila, la machine que j’ai raccordé à ce service n’est pas une bête workstation, mais plutot un serveur situé “quelque part”. Évidemment, je me connecte via ssh à cette machine, et il m’est fort désagréable de devoir retrouver son IP en permanence. Pas question de bidouiller un truc à base de dynamic DNS, on est pas des sauvages tout de même.

Le problème, je vous le donne en mille, c’est que lorsque je ssh vers l’IP publique habituelle de cette machine, le paquet de retour emprunte la route par défaut, le tunnel donc, et que le serveur en question, c’est une machine virtuelle, dont le port SSH est translaté par le dom0. Oui je sais ça commence à donner mal à la tête. En un mot comme en cent, la connexion SSH n’aboutit jamais, passant par un endroit et sortant par un autre.

La solution: PF le magnifique !

Je vous entretenais il y a quelques temps déjà de la fabuleuse directive route-to, mais cette dernière ne s’applique pas au cas présent. Fort heureusement, sa soeur jumelle, reply-to réalise exactement le travail voulu, et ce en 2 coups de cuiller à pot. Démonstration:

Sur mon dom0, une machine Debian/GNU Linux, je redirige le traffic du port 2323 sur le port 22 de ma machine virtuelle NetBSD de cette façon:

Mais lorsque le domU souhaite répondre à l’IP qui le sollicite sur le port 22, il emprunte sa route par défaut, et nous nous retrouvons dans un bon vieux cas de routage asymétrique, la lose. On peut lire dans le man de pf.conf la prose suivante:

Et j’ai envie de dire “pile poil”. Voyons ce que cela nous donne:

Wooooh, trop balèse Watson !

Moyennant ces quelques lignes, nous pouvons constater, heureux:

C’est la classe ou bien ?