68 votes

Tunnelage inverse des ports

Je dois montrer à quelqu'un un site web fonctionnant sur ma machine locale demain. Normalement, j'y parviendrais en faisant une redirection de port sur mon routeur local, mais en raison d'un matériel défaillant et de son remplacement par un autre, mon routeur actuel ne me permet pas de faire une redirection de port.

Alors, coincé par ce retard et ne voulant pas pousser le tout sur un vrai serveur, j'ai eu une idée folle : Puis-je simplement transférer mon port vers un serveur externe par SSH ?

J'ai déjà fait des tunnels portuaires, mais je le fais habituellement dans le bon sens :

  • Je me connecte à une boîte distante et je demande que le port 12345 apparaisse sur ma machine locale au port 12345.
  • Je lance quelque chose sur P12345 sur la machine distante.
  • Je peux y accéder via localhost:12345

Ce que je 欲する à faire :

  • Connectez-vous à un PC distant et demandez à ce que son P12345 local récupère des choses de mon P12345 local (via le tunnel)
  • Je lance quelque chose sur mon ordinateur local sur P12345.
  • D'autres personnes peuvent accéder à remote:12345 et voir mon localhost:12345.

108voto

Lekensteyn Points 162346

La commande de transfert du port 80 depuis votre machine locale ( localhost ) à l'hôte distant sur le port 8000 est :

ssh -R 8000:localhost:80 oli@remote-machine

Cela nécessite une modification supplémentaire sur le serveur SSH, ajoutez les lignes à /etc/ssh/sshd_config :

Match User oli
   GatewayPorts yes

Ensuite, rechargez la configuration en exécutant sur le serveur sudo reload ssh .

Le cadre GatewayPorts yes permet à SSH de lier le port 8000 à l'adresse générique, de sorte qu'elle devienne accessible à l'adresse publique de l'utilisateur. remote-machine ( remote-machine:8000 ).

Si vous devez avoir la possibilité de ne pas lier tout ce qui se trouve sur l'adresse générique, modifiez l'adresse suivante GatewayPorts yes a GatewayPorts clientspecified . Parce que ssh se lie par défaut à l'adresse de bouclage, vous devez spécifier une adresse vide. bind_address pour lier l'adresse joker :

ssh -R :8000:localhost:80 oli@remote-machine

El : avant 8000 est obligatoire si GatewayPorts est réglé sur clientspecified et vous voulez permettre l'accès public à remote-machine:8000 .

Extraits pertinents du manuel :

ssh(1)

-R [adresse_liée :]port:hôte:porthôte
Spécifie que le port donné sur l'hôte (serveur) distant doit être transféré vers l'hôte et le port donnés du côté local. Cela fonctionne en allouant un socket pour écouter le port du côté distant, et chaque fois qu'une connexion est établie sur ce port, la connexion est transférée sur le canal sécurisé, et une connexion est établie sur le port hostport de la machine locale. Par défaut, la socket d'écoute sur le serveur sera liée à l'interface loopback uniquement. Ceci peut être remplacé en spécifiant une adresse bind_address. Une adresse bind_address vide, ou l'adresse '*', indique que la socket distante doit écouter sur toutes les interfaces. La spécification d'une adresse bind_address distante ne réussira que si l'option GatewayPorts du serveur est activée (voir sshd_config(5)).

sshd_config(5)

PasserellePorts
Spécifie si les hôtes distants sont autorisés à se connecter aux ports transférés pour le client. GatewayPorts peut être utilisé pour spécifier que sshd doit autoriser les transferts de ports distants à se lier à des adresses non-boucleuses, permettant ainsi à d'autres hôtes de se connecter. L'argument peut être 'no' pour forcer les transferts de port distants à être disponibles uniquement pour l'hôte local, 'yes' pour forcer les transferts de port distants à se lier à l'adresse générique, ou 'clientspecified' pour permettre au client de sélectionner l'adresse à laquelle le transfert est lié. La valeur par défaut est "non".

Voir aussi :

17voto

FaST4 Points 271

Si le serveur a GatewayPorts no vous pouvez obtenir le même résultat en exécutant ssh -g -L 8001:localhost:8000 oli@remote-machine sur le serveur une fois que vous avez exécuté ssh -R sur le client. Cela rendra le port de bouclage 8000 du serveur accessible sur toutes les interfaces sur le port 8001.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X