jmanteau

Mon coin de toile - A piece of Web

UDP over SSH port forwarding

Posted: Jul 10, 2011
UDP over SSH port forwarding

Il est courant d’utliser les tunnels SSH pour faire transiter divers flux TCP. Cependant on ne peut utiliser le port forwarding directement avec du TCP (exemple du DNS ou SNMP). Ce billet vous montre les étapes à effectuer pour atteindre ce but.

Etapes par étapes

Ouvrir un tunnel SSH avec TCP forward port

Depuis votre machine, se connecter au serveur SSH distant avec l’option -L pour utiliser le port forwarding :

local# ssh -L PORT_TCP_LOCAL:localhost:PORT_TCP_DISTANT IP_SERVEUR_SSH

La commande précédente transfère depuis le port_tcp_local de localhost vers le port_tcp_distant de server.

Mise en place de TCP to UDP sur le serveur

Sur le serveur SSH on ouvre un listener sur le port PORT_TCP_DISTANT qui transfèrera les données vers le port UDP du serveur voulu (par exemple dans le cas d’un DNS forwarding l’IP du resolveur DNS).

Avant tout il faut créer un FIFO qui fait office de transfert en local. Une fifo est une communication bidirectionnel entre deux processus. La fifo est à distinguer du pipe qui est unidirectionnel (gauche output vers droit input).

server# mkfifo /tmp/fifo

server# nc -l -p PORT_TCP_DISTANT < /tmp/fifo | nc -u IP_SERVEUR_UDP PORT_UDP_DISTANT > /tmp/fifo

Cela permet au trafic TCP du serveur SSH d’être transmis vers le le port du serveur distant portant le service UDP nous intéressant et de transmettre également le retour.

Mise en place du UDP sur TCP sur votre machine

Maintenant nous devons effectuer la manoeuvre opposée sur notre machine.

local# mkfifo /tmp/fifo

local# sudo nc -l -u -p PORT_UDP_LOCAL < /tmp/fifo | nc localhost PORT_TCP_LOCAL > /tmp/fifo

Cela permet au trafic UDP provenant du PORT_UDP_LOCAL d’être transféré dans le tunnel SSH écoutant sur le PORT_TCP_LOCAL