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?
ssh
ssh-tunnel
Nandaloo
quelle
quelle
Antworten:
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.
quelle
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:
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:
quelle
0x4a6f4672
das?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.
quelle
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:
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:
quelle
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.
quelle