Ce petit guide explique comment envoyer du trafic UDP via SSH à l'aide d'outils fournis en standard (ssh, nc, mkfifo) avec la plupart des systèmes d'exploitation de type UNIX.
Réalisation de tunnels UDP via une connexion SSH
Étape par étape Ouvrez un port de transfert TCP avec votre connexion SSH
Sur votre ordinateur local (local), connectez-vous à l'ordinateur distant (serveur) via SSH, avec l'option -L supplémentaire afin que SSH avec transfert de port TCP:
local# ssh -L 6667:localhost:6667 server.foo.com
Cela permettra aux connexions TCP sur le numéro de port 6667 de votre ordinateur local d'être transférées vers le numéro de port 6667 sur server.foo.com via le canal sécurisé. Configurez 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 au port UDP 53 d’une adresse IP spécifiée. Si vous voulez faire le transfert DNS comme moi, vous pouvez utiliser l'adresse 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 établir une communication bidirectionnelle entre les deux canaux. Un canal de communication simple ne communiquerait que la sortie standard du processus de gauche avec 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é au trafic UDP sur le port 53 de 192.168.1.1 et aux réponses de revenir. Configurez l'UDP pour le transfert TCP sur votre machine
Maintenant, nous devons faire le contraire de ce qui a été fait en haut sur la machine locale. Vous devez disposer 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é au trafic TCP sur le port 6667 de la machine locale. Profitez de votre serveur DNS local :)
Comme vous l'avez probablement deviné, lorsqu'une requête DNS sera effectuée sur la machine locale, par exemple sur le port UDP local 53, elle sera transmise au port TCP local 6667, puis au port TCP du serveur 6667, puis au serveur DNS du serveur. , Port UDP 53 de 192.168.1.1. Pour profiter des services DNS sur votre ordinateur local, insérez la ligne suivante en tant que premier serveur de noms dans votre fichier /etc/resolv.conf:
nameserver 127.0.0.1
Cet exemple (je pense que la réponse de John indique la même chose à un endroit différent) explique comment accéder aux services UDP / DNS d'un autre ordinateur via une connexion TCP / SSH.
A la fin de cette page, se trouve un autre commentaire avec une référence à '
socat
',le même accès UDP / DNS est fait avec,
Reportez-vous aux exemples socat pour plus d'informations.
la source
ssh orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
SSH (au moins OpenSSH) prend en charge les VPN simples. En utilisant l' option
-w
ouTunnel
dans lessh
client, vous pouvez créer untun
périphérique aux deux extrémités, qui peut être utilisé pour transférer tout type de trafic IP. (Voir aussiTunnel
la page de manuel dessh_config(5)
.) Notez que cela nécessite OpenSSH (et probablement des privilèges root) aux deux extrémités.la source
ip tuntap add
.tun
périphérique comme suit:sudo ip tuntap add mode tun
mais quand j'utilise jamais l'-w
option comme ceci:ssh $Server -w $port
je reçoisTunnel device open failed. Could not request tunnel forwarding.
Qu'est-ce que je fais de mal?Ou vous pouvez simplement utiliser ssf (conçu pour gérer ce cas d'utilisation), avec une simple commande:
Côté client:
Cette commande redirige le port local 53 (dns) vers le port 192.168.1.1, via un tunnel sécurisé entre localhost et server.foo.com.
Vous aurez besoin d’un serveur ssf (au lieu de - ou à côté de - votre serveur ssh):
Soit dit en passant, les côtés client et serveur de ssf fonctionnent sous Windows / Linux / Mac. Ceci est une application utilisateur, vous n'avez donc pas besoin de tun / tap ou de VPN.
Pour rediriger le port 53, vous aurez besoin de privilèges d’administrateur, quel que soit l’outil utilisé.
Pour plus d'informations, de détails, un cas d'utilisation ou un téléchargement: https://securesocketfunneling.github.io/ssf/
la source
Je ne pouvais pas
nc
travailler pour SNMP, car les clients SNMP continuaient de choisir un nouveau port UDP source et que plusieurs d'entre eux pouvaient être actifs simultanément.Au lieu de cela, j'ai écrit un article décrivant comment le faire
socat
dans ce blog , en utilisant SNMP comme exemple. Essentiellement, en utilisant deux terminaux, en commençant par un aperçu:Terminal un:
Cela crée le transfert SSH du port TCP 10000 et exécute socat sur le serveur. Notez que l’adresse IP du commutateur est mentionnée dans la ligne de commande socat en tant que «commutateur».
Terminal deux:
Cela met en place socat sur le client. Ça devrait le faire.
la source
Un VPN est une meilleure solution si vous avez accès à un port UDP.
Si vous avez uniquement accès au port TCP SSH, un tunnel SSH est aussi bon qu'un VPN, du moins pour le ping et le retour arrière de paquets.
la source