tunnel mosh via proxy

16

Je suis de plus en plus fan de mosh et je l'utilise de plus en plus lorsque j'ai des liens wifi peu fiables. Ce que j'essaie de comprendre, c'est comment construire un tunnel à travers un serveur qui est dans une DMZ (connecté à Internet et à un réseau pare-feu).

Ma solution actuelle avec ssh est d'éditer .ssh / config pour inclure des lignes comme:

Host server-behind-firewall
  ProxyCommand ssh server-in-dmz nc %h %p

J'ai également compris comment utiliser ssh pour faire une jambe et l'autre:

ssh -t server-in-dmz mosh server-behind-firewall

Entre server-in-dmz et server-behind-firewall, j'ai organisé une session mosh en utilisant un écran.

Mais ce que j'aimerais vraiment utiliser de bout en bout. Je suppose que je devrais configurer le serveur-en-dmz pour écouter un mosh-server. Mais la page de manuel de mosh-server dit "Il se fermera si aucun client ne l'a contacté dans les 60 secondes".

En bref, la question est: comment construire un tunnel mosh avec plusieurs hôtes?

spécieux
la source
voir github.com/marklee77/mosh-proxy
Janus Troelsen

Réponses:

5

Vous voudrez peut-être essayer Stone , qui est un répéteur de paquets TCP et UDP. Cela signifie essentiellement que vous pouvez avoir la configuration suivante:

Vous <---> Stone sur server-in-dmz <---> server-behind-firewall

En d'autres termes, faites en sorte que server-in-dmz écoute sur le port X les paquets SSH à transférer vers le serveur derrière le pare-feu, ainsi qu'un autre port, le port Y, pour les paquets UDP vers le port 60000 sur le serveur derrière le pare-feu pour mosh-server.

Vous devrez vous connecter à mosh à l'aide de la commande suivante:

mosh -p 60000 --ssh='ssh -p PORT_X' server-in-dmz
Hengjie
la source
3
Une chose intéressante à noter est que l'utilisation d'intercepteurs TCP tels que tsocks ou proxychains ne fonctionnera pas. En effet, ils interceptent uniquement les paquets TCP et non UDP (qui est ce que mosh utilise).
Hengjie
comment utiliser stone avec une adresse ipv4 et une adresse ipv6?
Janus Troelsen
0

Au lieu de transférer le trafic sur la couche application, comme suggéré par @Hengjie, vous pouvez également utiliser iptables (sur server-in-dmz):

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 11559 -j DNAT --to-destination 178.254.55.220:22
iptables -t nat -A PREROUTING -p udp -m udp --dport 60159:60168 -j DNAT --to-destination 178.254.55.220
iptables -t nat -A POSTROUTING -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1

Ensuite, vous vous connectez en utilisant mosh -p 60159 --ssh='ssh -p 11559' server-in-dmz

Remarque:

  • Il ne semble pas y avoir de moyen de placer le port mosh dans des fichiers de configuration. :(
  • J'ai choisi les ports au hasard.
  • Vous voudrez peut-être une configuration iptables supplémentaire si vous faites cela…
  • Edit: il est préférable de DNAT toute une gamme de ports, car il y a de fortes chances que vous tuiez accidentellement le client mosh sans prendre le serveur avec lui. Si vous ne transférez pas de plage, vous devrez ssh vers votre serveur et tuer le serveur mosh en cours d'exécution. Peut être légèrement ennuyeux si vous avez une mauvaise connexion en premier lieu.
  • Mon cas d'utilisation pour cela est mosh à travers l'iode.
César
la source