In diesem kleinen Leitfaden erfahren Sie, wie Sie UDP-Datenverkehr über SSH mit Standardwerkzeugen (ssh, nc, mkfifo) unter den meisten UNIX-ähnlichen Betriebssystemen senden.
UDP-Tunneling über eine SSH-Verbindung durchführen
Schritt für Schritt Öffnen Sie einen TCP-Forward-Port mit Ihrer SSH-Verbindung
Stellen Sie auf Ihrem lokalen Computer (lokal) eine Verbindung mit dem entfernten Computer (Server) über SSH her, mit der zusätzlichen Option -L, sodass SSH mit TCP-Portweiterleitung:
local# ssh -L 6667:localhost:6667 server.foo.com
Dadurch können TCP-Verbindungen an der Portnummer 6667 Ihres lokalen Computers über den sicheren Kanal an die Portnummer 6667 auf server.foo.com weitergeleitet werden. Richten Sie das TCP auf UDP-Weiterleitung auf dem Server ein
Auf dem Server öffnen wir einen Listener auf dem TCP-Port 6667, der Daten an den UDP-Port 53 einer angegebenen IP weiterleitet. Wenn Sie die DNS-Weiterleitung wie ich durchführen möchten, können Sie die IP des ersten Nameservers verwenden, die Sie in /etc/resolv.conf finden. Aber zuerst müssen wir ein FIFO erstellen. Das FIFO ist für eine bidirektionale Kommunikation zwischen den beiden Kanälen erforderlich. Ein einfaches Shell-Pipe würde nur die Standardausgabe des linken Prozesses an die Standardausgabe des rechten Prozesses übermitteln.
server# mkfifo /tmp/fifo server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo
Dadurch wird der TCP-Datenverkehr am Port 6667 des Servers an UDP-Datenverkehr am Port 53 von 192.168.1.1 weitergeleitet, und die Antworten werden zurückgegeben. Richten Sie die UDP-TCP-Weiterleitung auf Ihrem Computer ein
Jetzt müssen wir das Gegenteil von dem tun, was oben auf dem lokalen Computer getan wurde. Sie benötigen einen privilegierten Zugriff, um den UDP-Port 53 zu binden.
local# mkfifo /tmp/fifo local# sudo nc -l -u -p 53 < /tmp/fifo | nc localhost 6667 > /tmp/fifo
Dadurch kann UDP-Datenverkehr auf dem Port 53 der lokalen Maschine an TCP-Datenverkehr an Port 6667 der lokalen Maschine weitergeleitet werden. Genießen Sie Ihren lokalen DNS-Server :)
Wie Sie wahrscheinlich bereits vermutet haben, wird eine DNS-Abfrage auf dem lokalen Computer, z. B. am lokalen UDP-Port 53, an den lokalen TCP-Port 6667, dann an den TCP-Port 6667 des Servers und dann an den DNS-Server des Servers weitergeleitet UDP-Port 53 von 192.168.1.1. Um DNS-Dienste auf Ihrem lokalen Computer zu nutzen, setzen Sie die folgende Zeile als ersten Nameserver in Ihre /etc/resolv.conf:
nameserver 127.0.0.1