Ich habe einen Entwicklungsserver, auf den nur von 127.0.0.1:8000 zugegriffen werden kann, nicht von 192.168.1.x: 8000. Als schnellen Hack gibt es eine Möglichkeit, etwas einzurichten, um auf einem anderen Port (z. B. 8001) zu lauschen, sodass ich über das lokale Netzwerk 192.168.1.x: 8001 verbinden und den Datenverkehr zwischen dem Client und 127.0 tunneln kann 0,1: 8000 & le;
networking
tcp
tunneling
port-forwarding
warte auf den Zug
quelle
quelle
Antworten:
Ssh ist die einfachste Lösung.
Dadurch wird der lokale Port 8001 auf Ihrer Workstation an die localhost-Adresse auf remote-server.com, Port 8000
-g
, weitergeleitet. Dies bedeutet, dass andere Clients in meinem Netzwerk eine Verbindung zu Port 8001 auf meiner Workstation herstellen können. Andernfalls können nur lokale Clients auf Ihrer Workstation eine Verbindung zum weitergeleiteten Port herstellen.-N
Das heißt, ich leite nur Ports weiter und starte keine Shell.-f
bedeutet, nach einer erfolgreichen SSH-Verbindung und Anmeldung in den Hintergrund zu treten.Port 8001 bleibt für viele Verbindungen offen, bis ssh stirbt oder getötet wird. Wenn Sie zufällig unter Windows arbeiten, ist dies auch mit dem hervorragenden SSH-Client PuTTY möglich. Verwenden Sie 8001 als lokalen Port und localhost: 8000 als Ziel und fügen Sie in den Einstellungen eine lokale Portweiterleitung hinzu. Sie können es nach einer erfolgreichen Verbindung mit PuTTY hinzufügen.
quelle
[email protected]
? Es ist definitiv nicht für die Portweiterleitung erforderlich, aber wenn ssh dieses Argument hat, versucht es, sich dort zu verbinden. Und wenn diese lästige Option auf Hostname gesetzt wird, wird sie ausgegeben…port 22: Connection refused
(nein, ich habe den 22-Port nicht verwendet) . Sofern ich nichts vermisse, funktioniert der Befehl einfach nicht.[email protected]
ist nur ein beispiel und du solltest es nicht wörtlich nehmen. Sie müssen dies durch den Namen des Computers, zu dem Sie eine Verbindung herstellen möchten, und Ihren Benutzernamen auf diesem Computer ersetzen. Diese Informationen werden benötigt, um eine SSH-Verbindung herzustellen. Erst nachdem die SSH-Verbindung hergestellt wurde, können Ports über diese Verbindung weitergeleitet werden.-N
bedeutet nicht, dass keine SSH-Verbindung besteht. Es bedeutet einfachdo not execute a remote command
(siehe Manpage ). Das<user>@<host>
Argument ist notwendig, da dies tut , eine SSH - Verbindung öffnen<host>
(die für OP Fall wärelocalhost
), und leitet den gewünscht Port durch diesen SSH Tunnel. Es ist eine Lösung für das OP-Problem, aber nicht die einfachste. Um ohne Verwendung von ssh zu localhost weiterzuleiten, können Siesocat
odernetcat
wie in StephaneChazelas und Antworten vonMit
socat
auf dem Server:Standardmäßig
socat
überwacht TCP-Port 8001 eine beliebige IPv4- oder IPv6-Adresse (sofern unterstützt) auf dem Computer. Sie können es auf IPv4 / 6 beschränken, indem Sie estcp-listen
durchtcp4-listen
oder ersetzentcp6-listen
, oder auf eine bestimmte lokale Adresse, indem Sie a hinzufügen,bind=that-address
.Das Gleiche gilt für die Anschlussbuchse Sie Proxying, können Sie eine beliebige Adresse anstelle von verwenden
localhost
, und ersetzen Sietcp
mittcp4
oder ,tcp6
wenn Sie die Adressauflösung zu IPv4 oder IPv6 - Adressen zu beschränken.Beachten Sie, dass für den Server, der Port 8000 abhört, die Verbindung als vom Proxy stammend angezeigt wird (im Fall von
localhost
wird dies der Fall seinlocalhost
), nicht vom ursprünglichen Client. Sie müssen DNAT-Ansätze verwenden (für die jedoch Superuser-Berechtigungen erforderlich sind), damit der Server erkennen kann, wer der Client ist.quelle
range
undtcpwrap
in dersocat
Manpage).Das Traditionelle
nc
ist die einfachste Lösung:Diese Version von
nc
ist imnetcat-traditional
Paket auf Ubuntu enthalten. (Du musstupdate-alternatives
oder nennst esnc.traditional
.)Beachten Sie, dass dies im Gegensatz zu ssh nicht verschlüsselt ist. Denken Sie daran, wenn Sie es außerhalb eines Hosts verwenden.
quelle
netcat-openbsd
?netcat
Version , die in enthalten istbusybox
:nc -v -lk -p 8001 -e /usr/bin/nc 127.0.0.1 8000
. ( Beschreibung der Parameter )nc
Befehl wird nach der ersten Remote-Verbindung beendet. Fügen-k
Sie dies hinzu, wenn Sie es am Laufen halten möchten.nc: cannot use -p and -l
unter CentOS 6.4. Gibt es eine Abhilfe?OpenBSD Netcat ist standardmäßig unter Linux und auch unter OS X verfügbar.
OSX:
Linux:
Eine Alternative, die unter OS X bash funktioniert, ist die Verwendung einer bidirektionalen Pipe . Es kann unter anderen Unixen funktionieren:
quelle
ss -tan
oder gesehen wirdnetstat -tan
.Zitiert ein David Spillett ‚s Antwort auf ServerFault
Es ist eine einfache Binärdatei, die eine Konfigurationsdatei im Format annimmt
bindaddress bindport connectaddress connectport
Zum Beispiel:
192.168.1.1 8001 127.0.0.1 8000
oder
0.0.0.0 8001 127.0.0.1 8000
Wenn Sie den eingehenden Port an alle Schnittstellen binden möchten.
quelle
quelle
dport
, wie innc -v localhost 2345
, erhalte ichConnection refused
. Ich bin nicht sehr gut in Iptables, aber ich denke, der Dport muss eine Listening-App haben.Basierend auf der Antwort von Mark A. musste ich eine kleine Änderung vornehmen, damit es für meinen Mac funktioniert (zumindest unter macOS Mojave Version 10.14.4).
Diese printf-Aussage scheint entscheidend zu sein. Andernfalls wird der Befehl netcat zum Herstellen einer Verbindung zu Port 8000 niemals versuchen, und der Befehl netcat zum Abhören von Port 8001 wird niemals tatsächlich Port 8001 abhören. Ohne printf würde ich jedes Mal versuchen, eine Verbindung zu Port 8001 herzustellen Verbindung abgelehnt.
Ich gehe davon aus, dass netcat stdin irgendwie blockieren muss (vielleicht versucht es, es aus irgendeinem Grund zu lesen), bevor es tatsächlich Socket-Operationen ausführt. Ohne die printf-Anweisung, die in das FIFO-Format a schreibt, wird der Befehl netcat niemals Port 8001 überwachen.
Hinweis: Ich hätte eine Antwort auf Marks Beitrag hinterlassen, habe aber noch keinen Ruf.
quelle
Dies ist eine neue Methode, um zwei UDP-Ports auf dem Server zu tunneln: https://github.com/9crk/udpeer
udpeer 8001 8002
Zu testen:
quelle