¿Diferencia entre "reenvío de puerto local" y "reenvío de puerto dinámico"?

13

Estoy tratando de entender la diferencia entre "reenvío de puerto local" y "reenvío de puerto dinámico".

En el comando ssh para "reenvío de puerto local", ¿siempre se requiere especificar el host de destino?

¿"Dinámico" en "reenvío de puerto dinámico" significa que, en el comando ssh para "reenvío de puerto dinámico", no hay necesidad de especificar el host de destino? en caso afirmativo, ¿cuándo se especifica el destino?

Tim
fuente

Respuestas:

15

Sí, debe especificar una dirección IP y un puerto de destino cuando utilice el reenvío local. De 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.

Claramente, solo la dirección de enlace es opcional.

No, no puede especificar un host o puerto de destino cuando utiliza el reenvío dinámico. En el reenvío dinámico, SSH actúa como un proxy SOCKS. Nuevamente de la página de manual (énfasis mío):


 -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.

Con -L, SSH no intenta comprender el tráfico. Simplemente envía todo lo que recibe en el puerto local al puerto de destino; usted determina el puerto de destino en el momento en que se realiza la conexión. Con -D, SSH actúa como un servidor proxy y, por lo tanto, puede manejar conexiones desde múltiples puertos (por ejemplo, un navegador configurado para usarlo como proxy SOCKS puede acceder a HTTP, HTTPS, FTP, etc. a través de la misma conexión). Y al igual que con otros servidores proxy, utilizará el tráfico para determinar el destino.

muru
fuente
1
Gracias muru! Me pregunto por qué el reenvío dinámico se llama proxy, mientras que el reenvío local no. Por definición, ¿el servidor ssh, el cliente ssh o ambos en reenvío local son un proxy (servidor)? unix.stackexchange.com/a/234184/674
Tim
1
@Tim un servidor proxy entiende cuál es el protocolo que está representando. Con el reenvío de puertos, SSH no intenta comprender qué protocolo se está presentando, pero con -D, tiene que hacerlo, para comprender dónde enviar los datos.
muru
Gracias. Busqué en algunos libros de texto de redes de computadoras (por ejemplo, Tanenbaum) la definición de un proxy (servidor) tan claro como el tuyo, pero no estuve satisfecho. ¿Tienes algunos libros para recomendar para aprender conceptos?
Tim
En el reenvío dinámico de puertos, ¿cuál es el servidor proxy, el cliente ssh, el servidor ssh o ambos?
Tim
@Tim Tanenbaum fue el único libro del que estudié. El resto viene de usar cosas.
muru
0

Otra forma de aprender este concepto sería observar cómo se conecta un cliente al clúster de reducción de mapa elástico (EMR) de Amazon. EMR tiene un montón de aplicaciones locales que expone y normalmente se accede a ellas a través de túneles SSH.

Hay 2 opciones para un cliente: A) Comando SSH de reenvío de puerto local: ssh -i key.pem -L 8157: abcd: 8088 hadoop @ abcd

Aquí el cliente dice, por ejemplo, que 8157 en localhost se reenvía a abcd: 8088 El cliente tiene que hacer una solicitud al localhost: http: // localhost: 8157 Otras aplicaciones podrían estar escuchando en puertos como 8089,8090, y el cliente tiene que hacer conexiones ssh para cada uno de estos.

B) Puerto dinámico hacia adelante Aquí se usa un solo comando SSH: ssh -i key.pem -D 8157 hadoop @ abcd

Cualquier tráfico que ingrese en el puerto 8157 será enrutado a través del túnel ssh. El destino del tráfico será el destino de la URL. Por ejemplo, puede usar un cliente proxy en su servidor web y redirigir algunos URI http para usar el proxy. Puede acceder a todas sus aplicaciones en 8089,8090 a través de un solo comando.

Para referencia, consulte este documento: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html

M Ga
fuente