Unterschied zwischen "lokaler Portweiterleitung" und "dynamischer Portweiterleitung"?

13

Ich versuche den Unterschied zwischen "lokaler Portweiterleitung" und "dynamischer Portweiterleitung" zu verstehen.

Muss im Befehl ssh für die "lokale Portweiterleitung" immer der Zielhost angegeben werden?

Bedeutet "dynamic" in "dynamic port forwarding", dass im Befehl ssh für "dynamic port forwarding" der Zielhost nicht angegeben werden muss? Wenn ja, wann wird das Ziel angegeben?

StackExchange für alle
quelle

Antworten:

15

Ja, Sie müssen eine Ziel-IP und einen Port angeben, wenn Sie die lokale Weiterleitung verwenden. Von man ssh:

 -L [bind_address:]port:host:hostport
         Specifies that the given port on the local (client) host is to be
         forwarded to the given host and port on the remote side.

Natürlich ist nur die Bindeadresse optional.

Nein, Sie können keinen Zielhost oder -port angeben, wenn Sie die dynamische Weiterleitung verwenden. Bei der dynamischen Weiterleitung fungiert SSH als SOCKS-Proxy. Nochmals von der Manpage (Hervorhebung meiner):


 -D [bind_address:]port
         Specifies a local “dynamic” application-level port forwarding.
         This works by allocating a socket to listen to port on the local
         side, optionally bound to the specified bind_address.  Whenever a
         connection is made to this port, the connection is forwarded over
         the secure channel, and the application protocol is then used to
         determine where to connect to from the remote machine.  Currently
         the SOCKS4 and SOCKS5 protocols are supported, and ssh will act
         as a SOCKS server.

Mit -Lmacht SSH keinen Versuch, den Verkehr zu verstehen. Er sendet einfach alles, was er auf dem lokalen Port empfängt, an den Zielport. Sie bestimmen den Zielport zum Zeitpunkt des Verbindungsaufbaus. Mit -Dfungiert SSH als Proxyserver und kann daher Verbindungen von mehreren Ports verarbeiten (z. B. kann ein Browser, der für die Verwendung als SOCKS-Proxy konfiguriert ist, über dieselbe Verbindung auf HTTP, HTTPS, FTP usw. zugreifen). Und wie bei anderen Proxy-Servern wird der Datenverkehr zur Bestimmung des Ziels verwendet.

muru
quelle
1
Danke, Muru! Ich frage mich, warum dynamische Weiterleitung als Proxy bezeichnet wird und lokale Weiterleitung nicht? Ist der SSH-Server, der SSH-Client oder beides per Definition in der lokalen Weiterleitung ein Proxy (Server)? unix.stackexchange.com/a/234184/674
StackExchange for All
1
@Tim Ein Proxyserver versteht, welches Protokoll er verwendet. Bei der Portweiterleitung versucht SSH nicht zu verstehen, welches Protokoll auf seinem Weg ist, sondern -Dmuss dies tun , um zu verstehen, wohin die Daten gesendet werden sollen.
muru
Vielen Dank. Ich habe in einigen Lehrbüchern von Computernetzwerken (z. B. Tanenbaums) nach Definitionen für einen Proxy (Server) gesucht, der so eindeutig ist wie der Ihre, war aber nicht zufrieden. Haben Sie einige Bücher, die Sie für Lernkonzepte empfehlen können?
StackExchange for All
Was ist der Proxy-Server, der SSH-Client, der SSH-Server oder beides bei der dynamischen Portweiterleitung?
StackExchange for All
@Tim Tanenbaum's war das einzige Buch, aus dem ich gelernt habe. Der Rest kommt vom Gebrauch von Dingen.
muru
0

Eine andere Möglichkeit, dieses Konzept zu erlernen, besteht darin, einen Blick darauf zu werfen, wie sich ein Client mit dem EMR-Cluster (Elastic Map Reduce) von Amazon verbindet. EMR stellt eine Reihe lokaler Apps zur Verfügung, auf die normalerweise über SSH-Tunnel zugegriffen wird.

Für einen Client gibt es zwei Optionen: A) SSH-Befehl für die Weiterleitung des lokalen Ports: ssh -i key.pem -L 8157: abcd: 8088 hadoop @ abcd

Hier sagt der Client zum Beispiel, dass 8157 auf localhost an abcd weitergeleitet wird: 8088 Der Client muss eine Anfrage an localhost stellen: http: // localhost: 8157 Andere Anwendungen könnten Ports wie 8089,8090 und das überwachen Der Client muss für jede dieser Verbindungen eine SSH-Verbindung herstellen.

B) Dynamische Portweiterleitung Hier wird ein einzelner SSH-Befehl verwendet: ssh -i key.pem -D 8157 hadoop @ abcd

Der auf Port 8157 eingehende Datenverkehr wird über den SSH-Tunnel geleitet. Das Ziel des Datenverkehrs ist das Ziel der URL. Sie können beispielsweise einen Proxy-Client auf Ihrem Webserver verwenden und einige http-URIs umleiten, um den Proxy zu verwenden. Sie können über einen einzigen Befehl auf alle Ihre Anwendungen unter 80898090 zugreifen.

Informationen hierzu finden Sie in folgendem Dokument: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html

M Ga
quelle