In diesem kleinen Handbuch erfahren Sie, wie Sie UDP-Datenverkehr über SSH mit den Standardtools (ssh, nc, mkfifo) der meisten UNIX-ähnlichen Betriebssysteme senden.
Durchführen eines UDP-Tunnels über eine SSH-Verbindung
Schritt für Schritt Öffnen Sie mit Ihrer SSH-Verbindung einen TCP-Forward-Port
Stellen Sie auf Ihrem lokalen Computer (lokal) über SSH mit der zusätzlichen Option -L eine Verbindung zum entfernten Computer (Server) her, sodass SSH mit TCP-Portweiterleitung:
local# ssh -L 6667:localhost:6667 server.foo.com
Auf diese Weise können TCP-Verbindungen über die Portnummer 6667 Ihres lokalen Computers über den sicheren Kanal an die Portnummer 6667 auf server.foo.com weitergeleitet werden. Richten Sie die TCP / 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 bestimmten IP weiterleitet. Wenn Sie wie ich DNS-Weiterleitungen 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 die bidirektionale Kommunikation zwischen den beiden Kanälen erforderlich. Eine einfache Shell-Pipe überträgt nur die Standardausgabe des linken Prozesses an die Standardeingabe des rechten Prozesses.
server# mkfifo /tmp/fifo
server# nc -l -p 6667 < /tmp/fifo | nc -u 192.168.1.1 53 > /tmp/fifo
Auf diese Weise kann der TCP-Verkehr auf dem Port 6667 des Servers an den UDP-Verkehr auf dem Port 53 von 192.168.1.1 weitergeleitet werden und die Antworten können zurückgegeben werden. Richten Sie die UDP-zu-TCP-Weiterleitung auf Ihrem Computer ein
Jetzt müssen wir das Gegenteil von dem machen, was oben auf dem lokalen Rechner gemacht wurde. Sie benötigen 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
Auf diese Weise kann UDP-Datenverkehr auf Port 53 des lokalen Computers an TCP-Datenverkehr auf Port 6667 des lokalen Computers weitergeleitet werden. Viel Spaß mit Ihrem lokalen DNS-Server :)
Wie Sie jetzt wahrscheinlich erraten haben, wird eine DNS-Abfrage auf dem lokalen Computer, z. B. auf dem 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 nutzen zu können, geben Sie in Ihrer /etc/resolv.conf die folgende Zeile als ersten Nameserver ein:
nameserver 127.0.0.1
In diesem Beispiel (ich glaube, Johns Antwort zeigt dasselbe an einer anderen Stelle) wird beschrieben, wie über eine TCP / SSH-Verbindung auf die UDP / DNS-Dienste eines anderen Computers zugegriffen wird.
Am Ende dieser Seite befindet sich ein weiterer Kommentar mit einem Verweis auf '
socat
'.Derselbe UDP / DNS-Zugriff erfolgt mit,
Siehe socat Beispiele für mehr.
quelle
ssh orig_strm_src socat udp4-listen:4003,reuseaddr,fork STDOUT| socat STDIN udp-sendto:localhost:4003
SSH (mindestens OpenSSH) unterstützt einfache VPNs. Mit der Option
-w
oderTunnel
imssh
Client können Sietun
an beiden Enden ein Gerät erstellen , mit dem jeder IP-Verkehr weitergeleitet werden kann. (Siehe auchTunnel
in der Handbuchseite vonssh_config(5)
.) Beachten Sie, dass hierfür an beiden Enden OpenSSH (und möglicherweise Root-Rechte) erforderlich sind.quelle
ip tuntap add
.tun
Gerät wie folgt:sudo ip tuntap add mode tun
aber wann immer die Verwendung von-w
Option wie folgt aus :ssh $Server -w $port
Ich bekommeTunnel device open failed. Could not request tunnel forwarding.
Was mache ich falsch?Oder Sie können einfach ssf (das für diesen Anwendungsfall entwickelt wurde) mit einem einfachen Befehl verwenden:
Client Seite:
Dieser Befehl leitet den lokalen Port 53 (DNS) über einen sicheren Tunnel zwischen localhost und server.foo.com zu 192.168.1.1 Port 53 um.
Sie benötigen einen SSF-Server (anstelle oder neben Ihrem SSH-Server):
Übrigens arbeiten sowohl die Client- als auch die Serverseite von ssf unter Windows / Linux / Mac. Dies ist eine Userland-Anwendung, sodass Sie weder Tun / Tap noch VPN benötigen.
Um Port 53 umzuleiten, benötigen Sie Administratorrechte - unabhängig vom verwendeten Tool.
Für weitere Informationen, Details, Anwendungsfälle oder Download: https://securesocketfunneling.github.io/ssf/
quelle
Ich konnte nicht
nc
mit SNMP arbeiten, da SNMP-Clients weiterhin einen neuen Quell-UDP-Port auswählen und mehrere gleichzeitig aktiv sein können.Stattdessen habe ich
socat
in diesem Blog-Beitrag einen Beitrag geschrieben , in dem die Vorgehensweise am Beispiel von SNMP beschrieben wird. Im Wesentlichen mit zwei Terminals, beginnend mit einer Übersicht:Terminal eins:
Dadurch wird die SSH-Weiterleitung von TCP-Port 10000 erstellt und socat auf dem Server ausgeführt. Beachten Sie, wie die IP-Adresse des Switches in der socat-Befehlszeile als "switch" angegeben wird.
Terminal zwei:
Das setzt socat auf dem Klienten fest. Das sollte es tun.
quelle
Ein VPN ist eine bessere Lösung, wenn Sie Zugriff auf einen UDP-Port haben.
Wenn Sie nur Zugriff auf den TCP-SSH-Port haben, ist ein SSH-Tunnel so gut wie ein VPN, zumindest für Ping und Packet Backtracking.
quelle