Quelle est la différence entre le transfert IP local et distant?

10

Quelle est la différence de fonctionnalité entre les deux? Je suis un peu confus.

Le transfert local rend un port distant disponible localement.

Le transfert à distance rend un port local accessible à distance.

Mais cette «disponibilité» fonctionnera dans les deux sens ... ou pas?

Par exemple, les éléments suivants (émis par un «hôte» hôte)

ssh -R 1234:localhost:2345 user@work

Cela établira un tunnel sécurisé entre le travail :: 1234 et la maison :: 2345, non?

Si je mets quelque chose à une extrémité, cela sortira à l'autre extrémité.

Mais alors, je peux obtenir la même chose par l'appel suivant de l'hôte 'work':

ssh -L 1234:localhost:2345 user@home

Donc, la seule différence est d'où je l'appelle, n'est-ce pas?

nandaloo
la source
Dans votre exemple, il n'y a aucune différence de fonctionnalité. Vous compensez en quelque sorte l'auto-argument en échangeant les hôtes cibles. Si vous n'aviez pas fait cela et utilisé les deux à partir d'un seul hôte - cela déclencherait déjà un comportement complètement opposé.
XXL

Réponses:

2

La principale différence pratique est que si vous connectez 2 ordinateurs A et B et que B se trouve derrière un pare-feu ou un routeur NAT que vous ne contrôlez pas, et qu'il bloque les entrées. Vous êtes assis en A. Vous ne pouvez pas obtenir A pour se connecter à B. Mais B ne bloquera pas les sorties. Vous obtenez donc que B se connecte à A.

- clarification supplémentaire--

Ce qui précède, que l'intervenant a compris .. signifie la principale différence pratique entre le transfert local et distant. ssh -L et ssh -R lorsque vous les utiliseriez. Je ne commentais pas les exemples de commandes spécifiques qu'il a donnés, où il bascule -L et -R, et à quel serveur sshd il se connecte. Mais maintenant, je vais essayer de le commenter. Avec les commandes ssh qu'il a données, du point de vue du client normal et du serveur régulier, il ne semble pas y avoir de différence, car il ne dit pas "ah c'est un client ssh et ceci est un serveur ssh .. "il ne connaît pas ssh, et quel est l'aspect client / serveur de ssh est hors de propos et inconnu du client régulier et du serveur régulier aussi. Ils se soucient juste de qui écoute, et de leur point de vue, la situation est la même. L'ordinateur de travail écoute et sur 1234. Ils ne ' t remarquez que dans un cas, il s'agit d'un serveur ssh sshd.exe, et dans l'autre cas, il s'agit d'un client ssh.exe, ssh. Par ailleurs, où le client ssh est, est considéré comme local.

barlop
la source
ok, merci, cela répond exactement à ma question! :-)
nandaloo
@nandaloo Je pense que cela s'appelle un tunnel ssh inverse. Si nous utilisons des termes inventés initiateur et écouteur ('cos ces termes sont moins ambigus que client et serveur). L'idée est que vous avez votre initiateur et auditeur habituel et votre initiateur et auditeur ssh. Vous ne pouvez pas choisir où se trouvent votre initiateur et votre auditeur habituels. Par exemple, le serveur HTTP (écouteur régulier) est sur B. B est derrière un pare-feu. A a le client HTTP (initiateur normal). Vous mettez votre initiateur SSH sur B. Voir avec un tunnel inverse l'initiateur et l'écouteur SSH, sont sur des ordinateurs opposés à l'initiateur et à l'écouteur habituels.
barlop
10

Oui, si je comprends bien, la redirection de port locale de a vers b doit être identique à la redirection de port distante de b vers a (et vice versa). Un tunnel sortant de a à b (vu de a) doit être égal à un tunnel entrant de a à b (vu de b).

La redirection de port locale crée un tunnel sortant qui peut être utilisé pour amener un ordinateur Internet public sur la machine locale. Un utilisateur local peut accéder à une combinaison hôte: port distant sur un hôte local, car le port donné sur l'hôte local (client) est transmis à l'hôte donné et le port sur le côté distant:

ssh -L local_port:remote_host:remote_port user@hostname

La redirection de port à distance crée un tunnel entrant qui peut être utilisé pour mettre un ordinateur local sur Internet public. Un internaute peut accéder à une certaine combinaison hôte local: port sur un hôte distant. Le port donné sur l'hôte (serveur) distant est transmis à l'hôte et au port donnés du côté local:

ssh -R local_port:remote_host:remote_port user@hostname
0x4a6f4672
la source
1
Je suppose qu'une autre différence, outre la syntaxe, serait le processus qui écoute la connexion de l'utilisateur. ssh.exe -L indique à ssh.exe d'écouter (en plus de la connexion sortante qu'il établit déjà). ssh.exe -R indique à sshd.exe d'écouter (en plus de l'écoute qu'il fait déjà).
barlop
@ 0x4a6f4672, qu'est-ce que cela 0x4a6f4672signifie?
Pacerier
@Pacerier juste mes initiales «JoFr» en notation hexadécimale :-)
0x4a6f4672
3

Avec la redirection de port locale, vous (le client) ouvrez un socket d'écoute sur votre ordinateur et connectez votre client de protocole de niveau application à ce socket. La connexion est maintenant transmise via SSH au serveur. Le serveur se connecte à l'hôte distant et tunnelise les données de votre client de protocole vers la destination finale.

Avec la redirection de port à distance, le serveur ouvre un socket d'écoute sur l'hôte du serveur. Certaines applications distantes se connectent à cet hôte et envoient des informations qui sont transférées sur votre ordinateur client. Ici, la connexion est établie vers la destination finale (certains serveurs de protocole de niveau application s'exécutant sur votre ordinateur ou sur votre réseau) et les données sont transférées de l'application distante à la destination finale.

Le rappel d'Eugene Mayevski
la source
merci, cela a permis de mieux comprendre le fonctionnement de la redirection de port. Et merci d'avoir déplacé la question - je ne connaissais même pas ce site de superutilisateur :-)
nandaloo
1

Ceci est mieux compris avec de petits exemples. Dans ces exemples, les connexions sont structurées comme ceci:

Serveur local - (LAN) - Terminal ----- (SSH, généralement via Internet) ----- Point final du tunnel - (LAN) - Machine distante

Vous utilisez la redirection de port locale si vous souhaitez créer un tunnel vers un certain ordinateur / port distant, accessible par le point de terminaison du tunnel auquel vous avez accès ssh. Par conséquent, le port de cette machine distante est également accessible localement sur votre propre terminal, à savoir http: // localhost: terminal_port /.

Cela se fait à l'aide de la syntaxe suivante:

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

Vous pouvez utiliser la redirection de port à distance si vous souhaitez activer N'IMPORTE QUI (!) À distance, qui est en mesure d'atteindre le port d'écoute du point de terminaison du tunnel pour pouvoir accéder à distance à une ip / port dans votre réseau local. Pour votre serveur local, il semble que la connexion depuis la machine distante soit initiée par le terminal.

La syntaxe est:

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

La page de manuel de socat clarifie cela très bien. Oui, je sais que ssh et socat sont deux choses complètement différentes - mais la documentation de socat est juste très bonne.

user400344
la source