Ce petit guide vous explique comment envoyer du trafic UDP via SSH en utilisant des outils standard (ssh, nc, mkfifo) présents dans la plupart des systèmes d'exploitation de type UNIX.
Réaliser un tunnel UDP à travers une connexion SSH
Étapes à suivre
Ouvrir un port de transfert TCP avec votre connexion SSH
Sur votre machine locale (local), connectez-vous à la machine distante (serveur) via SSH, avec l'option -L supplémentaire pour que SSH effectue un transfert de port TCP :
local# ssh -L 6667:localhost:6667 server.foo.com
Cela permettra aux connexions TCP sur le port 6667 de votre machine locale d'être transférées vers le port 6667 de server.foo.com via le canal sécurisé.
Configurer le transfert TCP vers UDP sur le serveur
Sur le serveur, nous ouvrons un écouteur sur le port TCP 6667 qui transférera les données vers le port UDP 53 d'une IP spécifiée. Si vous souhaitez faire du renvoi DNS comme moi, vous pouvez prendre l'IP du premier serveur de noms que vous trouverez dans /etc/resolv.conf.
Mais d'abord, nous devons créer un fifo. Le fifo est nécessaire pour avoir des communications bidirectionnelles entre les deux canaux. Un simple pipe shell ne communiquerait que la sortie standard du processus de gauche vers l'entrée standard du processus de droite.
server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo
Cela permettra au trafic TCP sur le port 6667 du serveur d'être transféré vers le trafic UDP sur le port 53 de 192.168.1.1, et les réponses de revenir.
Configurer le transfert UDP vers TCP sur votre machine
Maintenant, nous devons faire l'inverse de ce qui a été fait ci-dessus sur la machine locale. Vous avez besoin d'un accès privilégié pour lier le port UDP 53.
local# mkfifo /tmp/fifo
local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo
Cela permettra au trafic UDP sur le port 53 de la machine locale d'être transféré vers le trafic TCP sur le port 6667 de la machine locale. Profitez de votre serveur DNS local :)
Comme vous l'avez probablement deviné, lorsque une requête DNS sera effectuée sur la machine locale, par exemple sur le port UDP 53 local, elle sera transférée vers le port TCP 6667 local, puis vers le port TCP 6667 du serveur, puis vers le serveur DNS du serveur, le port UDP 53 de 192.168.1.1. Pour profiter des services DNS sur votre machine locale, mettez la ligne suivante comme premier serveur de noms dans votre /etc/resolv.conf:
nameserver 127.0.0.1
0 votes
Pouvez-vous publier comment le faire pour les connexions TCP ?
0 votes
@GabrielStaples la fonction mentionnée s'appelle "transfert de port". Vous pouvez simplement rechercher "transfert de port ssh". Voici l'un des résultats de recherche - help.ubuntu.com/community/SSH/OpenSSH/PortForwarding. J'espère que vous trouverez ce dont vous avez besoin.
0 votes
@VictorYarema, merci. J'ai aussi expérimenté et écrit un programme de redirection de port UDP de base en Python: socket_udp_port_forwarding.py dans mon dépôt eRCaGuy_hello_world. Je suis sûr que je pourrais le convertir en TCP aussi.