Was ist der Unterschied zwischen lokaler und Remote-IP-Weiterleitung?

10

Was ist der Unterschied in der Funktionalität zwischen den beiden? Ich bin ein bisschen verwirrt.

Durch die lokale Weiterleitung wird ein Remote-Port lokal verfügbar.

Durch die Fernweiterleitung wird ein lokaler Port remote verfügbar.

Aber diese 'Verfügbarkeit' wird in beide Richtungen funktionieren ... oder doch?

ZB das Folgende (ausgestellt von einem Host 'Zuhause')

ssh -R 1234:localhost:2345 user@work

Dadurch wird ein sicherer Tunnel zwischen work :: 1234 und home :: 2345 hergestellt, oder?

Wenn ich an einem Ende etwas einsetze, wird es am anderen Ende herauskommen.

Aber dann kann ich dasselbe durch den folgenden Aufruf der Host-Arbeit erreichen:

ssh -L 1234:localhost:2345 user@home

Der einzige Unterschied ist also, woher ich es nenne, richtig?

Nandaloo
quelle
In Ihrem Beispiel gibt es keinen Unterschied in der Funktionalität. Sie kompensieren sich selbst, wenn Sie das entgegengesetzte Argument verwenden, indem Sie die Zielhosts austauschen. Wenn Sie dies nicht getan und beide innerhalb eines einzelnen Hosts verwendet hätten, würde dies bereits ein völlig entgegengesetztes Verhalten auslösen.
XXL

Antworten:

2

Der wesentliche praktische Unterschied besteht darin, dass sich beim Verbinden von 2 Computern A und B B hinter einer Firewall oder einem NAT-Router befindet, die Sie nicht steuern, und der eingehende blockiert. Sie sitzen bei A. Sie können A nicht erhalten um eine Verbindung zu B herzustellen. B blockiert jedoch nicht den Ausgang. Sie veranlassen B, eine Verbindung zu A herzustellen.

- zusätzliche Klarstellung--

Das Obige, das der Fragesteller verstanden hat, bedeutet den großen praktischen Unterschied zwischen lokaler und Fernweiterleitung. ssh -L und ssh -R, wenn Sie jeweils verwenden würden. Ich habe die spezifischen Beispielbefehle, die er gegeben hat, nicht kommentiert, wo er -L und -R wechselt und mit welchem ​​SSHD-Server er eine Verbindung herstellt. Aber jetzt werde ich versuchen, es zu kommentieren. Mit den SSH-Befehlen, die er gegeben hat, scheint es aus Sicht des regulären Clients und des regulären Servers keinen Unterschied zu geben, da nicht gesagt wird: "Ah, das ist ein SSH-Client und Dies ist ein SSH-Server. "Er kennt SSH nicht und der Client / Server-Aspekt von SSH ist irrelevant und dem regulären Client und dem regulären Server ebenfalls unbekannt. Sie kümmern sich nur darum, wer zuhört, und aus ihrer Sicht sieht es genauso aus. Der Arbeitscomputer hört zu und auf 1234. Sie tun es nicht. Beachten Sie nicht, dass es sich in einem Fall um einen sshd.exe-ssh-Server handelt und in dem anderen Fall um einen ssh.exe-ssh-Client. Übrigens, wo sich der SSH-Client befindet, wird als lokal angesehen.

Barlop
quelle
ok, danke, das hat genau meine Frage beantwortet! :-)
Nandaloo
@nandaloo Ich denke, es heißt ein Reverse-SSH-Tunnel. Wenn wir erfundene Begriffe Initiator und Listener verwenden (weil diese Begriffe weniger mehrdeutig sind als Client und Server). Die Idee ist, dass Sie Ihren regulären Initiator und Listener und Ihren SSH-Initiator und Listener haben. Sie können nicht auswählen, wo sich Ihr regulärer Initiator und Listener befinden. Beispiel: Der HTTP-Server (regulärer Listener) befindet sich auf B. B befindet sich hinter einer Firewall. A hat den HTTP-Client (regulärer Initiator). Sie setzen Ihren SSH-Initiator auf B. Sehen Sie mit einem umgekehrten Tunnel, dass sich der SSH-Initiator und der Listener auf gegenüberliegenden Computern zum regulären Initiator und Listener befinden.
Barlop
10

Ja, wenn ich es richtig verstehe, sollte die lokale Portweiterleitung von a nach b identisch sein mit der Remoteportweiterleitung von b nach a (und umgekehrt). Ein ausgehender Tunnel von a nach b (von a aus gesehen) sollte einem eingehenden Tunnel von a nach b (von b aus gesehen) entsprechen.

Durch die lokale Portweiterleitung wird ein ausgehender Tunnel erstellt, mit dem ein öffentlicher Internetcomputer auf den lokalen Computer gebracht werden kann. Ein lokaler Benutzer kann auf eine Remote-Host: Port-Kombination auf einem lokalen Host zugreifen, da der angegebene Port auf dem lokalen (Client-) Host an den angegebenen Host und Port auf der Remote-Seite weitergeleitet wird:

ssh -L local_port:remote_host:remote_port user@hostname

Durch die Remote-Portweiterleitung wird ein eingehender Tunnel erstellt, mit dem ein lokaler Computer in das öffentliche Internet eingebunden werden kann. Ein Internetbenutzer kann auf eine bestimmte lokale Host: Port-Kombination auf einem Remote-Host zugreifen. Der angegebene Port auf dem Remote- (Server-) Host wird an den angegebenen Host und den angegebenen Port auf der lokalen Seite weitergeleitet:

ssh -R local_port:remote_host:remote_port user@hostname
0x4a6f4672
quelle
1
Ich nehme an, ein weiterer Unterschied neben der Syntax wäre der Prozess, der darauf wartet, dass der Benutzer eine Verbindung herstellt. ssh.exe -L weist ssh.exe an, zuzuhören (neben der ausgehenden Verbindung, die bereits hergestellt wird). ssh.exe -R weist sshd.exe an, zuzuhören (neben dem Abhören, das es bereits tut).
Barlop
@ 0x4a6f4672, Was bedeutet 0x4a6f4672das?
Pacerier
@ Pacerier nur meine Initialen "JoFr" in hexadezimaler Notation :-)
0x4a6f4672
3

Mit der lokalen Portweiterleitung öffnen Sie (der Client) einen Überwachungssocket auf Ihrem Computer und verbinden Ihren Protokollclient auf Anwendungsebene mit diesem Socket. Jetzt wird die Verbindung über SSH an den Server weitergeleitet. Der Server stellt eine Verbindung zum Remote-Host her und tunnelt die Daten von Ihrem Protokollclient zum endgültigen Ziel.

Bei der Weiterleitung des Remote-Ports öffnet der Server einen Überwachungssocket auf dem Serverhost. Einige Remoteanwendungen stellen eine Verbindung zu diesem Host her und senden Informationen, die an Ihren Clientcomputer übertragen werden. Hier wird die Verbindung zum endgültigen Ziel hergestellt (ein Protokollserver auf Anwendungsebene, der auf Ihrem Computer oder in Ihrem Netzwerk ausgeführt wird), und die Daten werden von der Remoteanwendung zum endgültigen Ziel übertragen.

Eugene Mayevskis Rückruf
quelle
danke, das hat klarer gemacht, wie die Portweiterleitung funktioniert. Und danke, dass du die Frage
verschoben
1

Dies lässt sich am besten anhand kleiner Beispiele verstehen. In diesen Beispielen sind die Verbindungen wie folgt aufgebaut:

Lokaler Server - (LAN) - Terminal ----- (SSH, normalerweise über das Internet) ----- Tunnelendpunkt - (LAN) - Remote-Maschine

Sie verwenden die lokale Portweiterleitung, wenn Sie zu einem bestimmten Remotecomputer / -port tunneln möchten, der über den Tunnelendpunkt erreichbar ist, auf den Sie SSH-Zugriff haben. Auf diesen Port kann auch lokal auf Ihrem eigenen Terminal zugegriffen werden, z. B. http: // localhost: terminal_port /.

Dies geschieht mit folgender Syntax:

ssh -L terminal_port:remote_machine_ip:remote_service_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip

Sie können die Remote-Port-Weiterleitung verwenden, wenn Sie JEDE (!) Remote aktivieren möchten, die den Überwachungsport des Tunnelendpunkts erreichen kann, um remote auf eine IP / einen Port in Ihrem lokalen LAN zugreifen zu können. Für Ihren lokalen Server sieht es so aus, als würde die Verbindung vom Remote-Computer vom Terminal initiiert.

Die Syntax lautet:

ssh -R tunnel_endpoint_listen_port:local_server_ip:local_server_port -p tunnel_endpoint_ssh_port ssh-login@tunnel_endpoint_ip
NStoeckm
quelle
0

Die Manpage für socat verdeutlicht dies sehr gut. Ja, ich weiß, dass ssh und socat zwei völlig verschiedene Dinge sind - aber die Dokumentation von socat ist einfach sehr gut.

user400344
quelle