Kann ich bei der Weiterleitung von SSH-Reverse-Tunnel-Ports einen anderen Host als localhost für das Zielfeld verwenden?

777
mannok

Ich verwende Putty, um SSH Reverse Tunnel Port Forwarding zu erreichen. Die meisten Tutorials lehren mich, den Remote-Port an den Localhost-Port weiterzuleiten. Kann ich jedoch wissen, ob es sinnvoll ist, einen anderen Host, z. B. 192.168.1.132:8081in das Feld Destination, einzugeben ?

Ich habe das versucht. 192.168.1.132:8081ist ein funktionierender Webserver mit einer zufriedenstellenden Seite, aber ich habe ERR_EMPTY_RESPONSEbei meinem Besuch localhost:12345(ich habe Port 12345als Quellport eingestellt) das Clientgerät erhalten.


Meine Knetkonfigurationen

Ausgangsproxy-Konfiguration:

Ausgangsproxy-Konfiguration

Tunneling config (das Dynamicist für die Socks5-Verbindung, bitte ignorieren Sie es einfach; das R12345ist der Tunnel, mit dem ich spiele):

Tunnelkonfiguration

Das Ergebnis, dass ich versuche, vom Ziel (SSH-Server) aus auf den Tunnel zuzugreifen:

Das Ergebnis, dass ich versuche, vom Ziel aus auf den Tunnel zuzugreifen (SSH-Server)

Kann mir jemand helfen?


UPDATE 1

In dem Gerät, auf dem der SSH-Befehl ausgeführt wird, gehe ich über einen Proxyserver aus. Beeinflusst dies das umgekehrte Tunnelverhalten?


UPDATE 2

Ich habe versucht, den umgekehrten Tunnel direkt vom http-Server zu erstellen. Im SSH-Server kann ich jedoch die Website über http: // localhost: 12345 besuchen . Einstellung und Ergebnis unten.

Der http-Server musste auch über den http-Proxy meines Büros ausgehen!

Erstellen Sie einen Reverse-Tunnel vom HTTP-Server

Und dann kann ich den http-Server vom SSH-Server über localhost besuchen: 12345

1
@ KamilMaciorowski Entschuldigung für undetaillierte Frage. Ich habe die Frage mit einem Bild aktualisiert. mannok vor 6 Jahren 0
Was passiert, wenn Sie vom SSH-Client aus `192.168.1.132: 8081` durchsuchen? (in diesem Fall ist überhaupt keine SSH beteiligt). Sehen Sie die richtige Seite? Kamil Maciorowski vor 6 Jahren 0
@KamilMaciorowski Sicher, normale Seite, normale Leistung mannok vor 6 Jahren 0
Bitte lesen Sie [this] (https://stackoverflow.com/a/31433528). Der HTTP-Server unter "192.168.1.132: 8081" ignoriert möglicherweise Anforderungen, die an andere Adressen als "192.168.1.132" gerichtet sind. Wenn Sie von der Remote-Seite Ihrer SSH-Verbindung eine Verbindung herstellen, lautet die Adresse `localhost: 12345` und passt nicht. Wenn der Tunnel überhaupt nicht funktioniert hat, würden Sie `ERR_CONNECTION_REFUSED` erhalten, nicht` ERR_EMPTY_RESPONSE`. Die Antwort von TOOGAM ist richtig: Im Allgemeinen können Sie auf diese Weise Tunnel bauen. Kamil Maciorowski vor 6 Jahren 1
@ KamilMaciorowski Ich verstehe. Das heißt, die leere Antwort wird vom HTTP-Server generiert, oder? Wegen ungültiger Domain / Hostname? Wenn ich jedoch localhost eingebe: 8081 ist der http-Server, kann ich auf die Seite zugreifen. In diesem Fall ist der anfragende Name auch localhost! mannok vor 6 Jahren 0
"Das heißt, die leere Antwort wird vom HTTP-Server generiert, oder?" - Ich glaube schon. Wenn Sie auf dem HTTP-Server "localhost: 8081" eingeben, durchläuft die Anforderung die Loopback-Schnittstelle. Anfragen von anderen Computern kommen von anderswo (wie über "eth0" oder so). Ich denke, * das spielt keine Rolle, wenn die HTTP-Serversoftware die Vernunft dieser Anfragen überprüft. Kamil Maciorowski vor 6 Jahren 0
@ KamilMaciorowski Vielen Dank für Ihre geduldige Antwort !!! Aber ich habe gerade einen anderen Test ausprobiert und in Update 2 aktualisiert. Ich mache den Tunnel diesmal direkt vom http-Server und es funktioniert und ich kann den http-Server vom SSH-Server besuchen !! Das macht mich so verwirrt ... mannok vor 6 Jahren 0
Sie missbrauchen das Konzept der Site. Sie hatten eine Frage, diese wurde von TOOGAM beantwortet. Meine Kommentare waren nur, um Sie zu überzeugen, dass Ihre Ergebnisse nicht gegen diese Antwort sind, die Sie erhalten haben (das Problem ist nicht bei SSH). Kommentare sind wirklich nicht für das Lösen zusätzlicher Fragen gedacht. Aber lass es uns versuchen. Die lokale Seite Ihrer Verbindung übergibt Pakete an "localhost: 8081", also an die Loopback-Schnittstelle. Der HTTP-Server sieht "localhost: 12345" in der Adresse der Anforderung, die von der Loopback-Schnittstelle eingeht. Der Server kümmert sich wahrscheinlich nicht um einen anderen Port, der Rest passt. Dies sind Nuancen des Servers, nicht SSH. Kamil Maciorowski vor 6 Jahren 0
Um mögliche Besonderheiten von HTTP-Servern zu vermeiden, können Sie mit "netcat" spielen, das das Ziel Ihres Tunnels ist. Kamil Maciorowski vor 6 Jahren 0
Um einfach zu testen, ob der Webserver nur reagiert, wenn auf ihn als http://192.168.1.132:8081 zugegriffen wird, können Sie versuchen, was http://192.168.1.132.xip.io:8081 Ihnen bietet. (Dokumentation finden Sie unter http://xip.io.) Arjan vor 6 Jahren 0

2 Antworten auf die Frage

0
TOOGAM

Ja, Sie können das tun, aber wenn Sie nicht verstehen, wie es funktioniert, können Sie leicht falsche Annahmen treffen.

Wenn ich mich recht erinnere (es sind einige Monate vergangen, also im Interesse einer schnellen Antwort, hoffe ich, dass ich es richtig mache ...)
Ein Tunnel, der als "Local" -Port angegeben ist, verursacht eine Software, den ich als "Listener" bezeichnen möchte, um auf dem Rechner zu hören, auf dem der SSH-Client läuft. Ein "Remote" -Port führt dazu, dass eine Software, die ich als "Listener" bezeichne, auf dem Computer abhört, auf dem der SSH-Server ausgeführt wird.

Localhost mit Tunnels verstehen:
Nun, hier ist der wirklich knifflige Teil, der Sie leicht durch eine Schleife ziehen kann. Wenn Sie sich auf einem Computer befinden, denken Sie normalerweise, dass "localhost" sich auf diesen Computer bezieht. Aber ähm, nein. Am besten denken Sie an das Feld "Ziel" als Text. Nachdem der Listener Datenverkehr empfangen hat, leitet der Listener diesen Datenverkehr durch die lokale SSH-Software weiter, die die Daten verschlüsselt und den Datenverkehr durch den Tunnel leitet. Die Seite, die den Verkehr sendet, liefert auch die "Ziel" -Information. Die Remote-SSH-Software empfängt dann diesen Datenverkehr, überprüft, was das Ziel sagt, und versucht dann, den Datenverkehr dorthin zu senden.

Wenn Sie also "localhost" auf Ihrem Client eingeben, wird der Text "localhost" durch den SSH-Tunnel gesendet, und tatsächlich ist das entfernte Ende "localhost". Localhost kann sich daher leicht auf eine andere Maschine beziehen als die Maschine, auf der Sie den Namen eingeben.

Ihre allgemeine Antwort ist richtig, aber die Erklärung von "localhost" ist, insbesondere im Zusammenhang mit der Frage, eher undurchsichtig, da: (1) die SSH-Einstellungen von OP nicht mit "localhost" einhergehen; Die einzige Verwendung ist `localhost: 12345` im Remote-Seitenbrowser, was richtig ist. (2) Wir sprechen von Remote-Weiterleitung, das Ziel (ob es sich dabei um "localhost" oder was auch immer handelte) wird ohnehin lokal aufgelöst. Das Ziel wird am nicht hörenden Ende eines Tunnels aufgelöst. Die Verwirrung kann bei lokaler Weiterleitung auftreten ([Beispiel] (https://superuser.com/q/1285009/432690)), wenn das nicht hörende Ende das entfernte ist. Kamil Maciorowski vor 6 Jahren 1
0
jrtapsell

Kann ich bei der Weiterleitung von SSH-Reverse-Tunnel-Ports einen anderen Host als localhost für das Zielfeld verwenden?

Ja, Sie können jeden gewünschten Host in das Feld "Zielhost" eingeben

Befehlszeilentunneldefinitionen

Für die Zwecke dieser Antwort werde ich das Formular verwenden X:Y:Z, wie der Befehlszeilen-SSH-Client Tunnel beschreibt, bei denen dieser Tunnel:

  • Quellport
    • 1234
  • Ziel
    • localhost: 4321

würde als beschrieben werden 1234:localhost:4321

Wie funktionieren Tunnel?

Es gibt zwei Arten von Tunneln, für die ein Ziel festgelegt wurde:

Lokale Tunnel

Für einen definierten Tunnel X:Y:Zkönnen Sie den Datenverkehr so ​​behandeln, als würde er an Port an den Client gesendet X, und der Server, der eine Verbindung zum Host Yauf Port herstellt Z, und den gesamten Datenverkehr weiterleiten.

Ferne Tunnel

Für einen definierten Tunnel X:Y:Zkönnen Sie den Datenverkehr so ​​behandeln, als würde er an Port an den Server gesendet X, und der Client verbindet sich mit dem Host Yauf Port Zund leitet den gesamten Datenverkehr weiter.

Wofür können Sie Tunnel verwenden?

Lokale Tunnel können verwendet werden für:

  • Zugriff auf Dienste, die nicht über das Internet zugänglich sind
  • Zugriff auf Dienste, die nur von einer bestimmten IP-Adresse aus verwendet werden können

Remote-Tunnel können verwendet werden für:

  • Zulassen, dass Remote-Systeme auf Ports auf Ihrem lokalen Computer zugreifen können, ohne sie dem Internet auszusetzen
  • Andere Systeme in Ihrem Netzwerk über das Internet verfügbar machen