Différence entre «redirection de port locale» et «redirection de port dynamique»?

13

J'essaie de comprendre la différence entre "redirection de port locale" et "redirection de port dynamique".

Dans la commande ssh pour "redirection de port local", est-il toujours nécessaire de spécifier l'hôte de destination?

Est-ce que "dynamique" dans "redirection de port dynamique" signifie que, dans la commande ssh pour "redirection de port dynamique", il n'est pas nécessaire de spécifier l'hôte de destination? si oui, quand la destination est-elle spécifiée?

Tim
la source

Réponses:

15

Oui, vous devez spécifier une adresse IP et un port de destination lors de l'utilisation du transfert 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.

De toute évidence, seule l'adresse de liaison est facultative.

Non, vous ne pouvez pas spécifier d'hôte ou de port de destination lors de l'utilisation du transfert dynamique. Dans le transfert dynamique, SSH agit comme un proxy SOCKS. Encore une fois à partir de la page de manuel (c'est moi qui souligne):


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

Avec -L, SSH ne tente pas de comprendre le trafic. Il envoie simplement tout ce qu'il reçoit sur le port local au port cible - vous déterminez le port cible au moment où la connexion est établie. Avec -D, SSH agit comme un serveur proxy et peut donc gérer les connexions à partir de plusieurs ports (par exemple, un navigateur configuré pour l'utiliser comme proxy SOCKS peut alors accéder à HTTP, HTTPS, FTP, etc. via la même connexion). Et comme avec d'autres serveurs proxy, il utilisera le trafic pour déterminer la destination.

muru
la source
1
Merci, muru! Je me demande pourquoi le transfert dynamique est appelé proxy, alors que le transfert local ne l'est pas. Par définition, le serveur ssh, le client ssh ou les deux dans le transfert local sont-ils un proxy (serveur)? unix.stackexchange.com/a/234184/674
Tim
1
@Tim un serveur proxy comprend quel est le protocole qu'il procure. Avec la redirection de port, SSH ne tente pas de comprendre quel protocole arrive, mais avec -D, il doit le faire, afin de comprendre où envoyer les données.
muru
Merci. J'ai cherché dans certains manuels de réseaux informatiques (par exemple celui de Tanenbaum) la définition d'un proxy (serveur) aussi clair que le vôtre, mais je n'étais pas satisfait. Avez-vous des livres à recommander pour apprendre des concepts?
Tim
Dans la redirection de port dynamique, quel est le serveur proxy, le client ssh, le serveur ssh ou les deux?
Tim
@Tim Tanenbaum est le seul livre sur lequel j'ai étudié. Le reste vient de l'utilisation des choses.
muru
0

Une autre façon d'apprendre ce concept serait de regarder comment un client se connecte au cluster de réduction de carte élastique d'Amazon (EMR). EMR a un tas d'applications locales qu'il expose et celles-ci sont normalement accessibles via des tunnels SSH.

Il existe 2 options pour un client: A) Commande SSH de transfert de port local: ssh -i key.pem -L 8157: abcd: 8088 hadoop @ abcd

Ici, le client indique, par exemple, que 8157 sur localhost est transféré à abcd: 8088 Le client doit faire une demande à localhost: http: // localhost: 8157 D'autres applications pourraient écouter sur des ports tels que 8089,8090 et le le client doit établir des connexions ssh pour chacun d'eux.

B) Transfert de port dynamique Ici, une seule commande SSH est utilisée: ssh -i key.pem -D 8157 hadoop @ abcd

Tout trafic entrant sur le port 8157 sera acheminé via le tunnel ssh. La destination du trafic sera la destination de l'URL. Par exemple, vous pouvez utiliser un proxy-client sur votre serveur Web et rediriger certains URI http pour utiliser le proxy. Vous pouvez accéder à toutes vos applications sur 8089,8090 via une seule commande.

Pour référence, consultez ce document: https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-web-interfaces.html

M Ga
la source