túnel mosh a través de proxy

16

Soy cada vez más fanático de mosh y lo uso cada vez más cuando tengo enlaces wifi poco confiables. Lo que estoy tratando de descubrir es cómo construir un túnel a través de un servidor que está en una DMZ (conectado a Internet y a una red cortafuegos).

Mi solución actual con ssh es editar .ssh / config para incluir líneas como:

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

También he descubierto cómo puedo usar ssh para hacer una pierna y mosh la otra:

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

Entre server-in-dmz y server-behind-firewall tengo una sesión preparada usando pantalla.

Pero lo que realmente me gustaría es usar Mosh de principio a fin. Supongo que tendría que armar server-in-dmz para tener un servidor mosh escuchando. Pero la página de manual de mosh-server dice "Se cerrará si ningún cliente se ha puesto en contacto con ella en 60 segundos".

En resumen, la pregunta es: ¿cómo construir un túnel mosh con múltiples hosts?

tonto
fuente
ver github.com/marklee77/mosh-proxy
Janus Troelsen

Respuestas:

5

Es posible que desee probar Stone , que es un repetidor de paquetes TCP y UDP. Lo que esto significa esencialmente es que puede tener la siguiente configuración:

Usted <---> Stone en server-in-dmz <---> server-behind-firewall

En otras palabras, haga que server-in-dmz escuche en el puerto X los paquetes SSH que se enviarán al servidor detrás del firewall, y también otro puerto, el puerto Y, para los paquetes UDP que se reenvían al puerto 60000 en el servidor detrás del firewall para servidor mosh.

Tendrás que conectarte a mosh con el siguiente comando:

mosh -p 60000 --ssh='ssh -p PORT_X' server-in-dmz
Hengjie
fuente
3
Una cosa interesante a tener en cuenta es que el uso de aplicaciones de interceptores tcp como tsocks o proxychains no funcionará. Esto se debe a que solo interceptan paquetes TCP y no UDP (que es lo que Mosh usa).
Hengjie
¿Cómo uso Stone con una dirección IPv4 y IPV6?
Janus Troelsen
0

En lugar de reenviar el tráfico en la capa de aplicación, como lo sugiere @Hengjie, también puede usar iptables (en 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

Luego, te conectas usando mosh -p 60159 --ssh='ssh -p 11559' server-in-dmz

Nota:

  • No parece haber una manera de poner el puerto mosh en los archivos de configuración. :(
  • Escogí los puertos al azar.
  • Es posible que desee una configuración adicional de iptables si hace esto ...
  • Editar: es mejor DNAT una gama completa de puertos, ya que existe una buena posibilidad de que accidentalmente mate al cliente mosh sin llevar el servidor. Si no reenvía un rango, tendrás que enviar ssh a tu servidor y matar el servidor mosh en ejecución. Puede ser un poco molesto si tienes una mala conexión en primer lugar.
  • Mi caso de uso para esto es mosh a través de yodo.
César
fuente