mosh túnel via proxy

16

Eu sou um fã crescente de mosh e estou usando cada vez mais quando tenho links wifi não confiáveis. O que estou tentando descobrir é como criar um túnel através de um servidor que esteja em uma DMZ (conectada à Internet e à rede com firewall).

Minha solução atual com o ssh é editar .ssh / config para incluir linhas como:

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

Eu também descobri como posso usar o ssh para fazer uma perna e mostrar a outra:

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

Entre server-in-dmz e server-behind-firewall, eu montei uma sessão mosh usando a tela.

Mas o que eu realmente gostaria de usar apenas mosh de ponta a ponta. Eu acho que teria que montar o server-in-dmz para ter um servidor mosh escutando. Mas a página de manual do mosh-server diz "Ele será encerrado se nenhum cliente entrar em contato com ele dentro de 60 segundos".

Em resumo, a questão é: como construir um túnel mosh com vários hosts?

especiousfool
fonte
Veja github.com/marklee77/mosh-proxy
Janus Troelsen

Respostas:

5

Você pode tentar o stone , que é um repetidor de pacotes TCP e UDP. O que isso significa essencialmente é que você pode ter a seguinte configuração:

Você <---> apedreja no server-in-dmz <---> server-behind-firewall

Em outras palavras, faça com que o servidor em dmz atenda na porta X os pacotes SSH a serem encaminhados para o servidor atrás do firewall e também outra porta, a porta Y, para os pacotes UDP que encaminham para a porta 60000 no servidor atrás do firewall para mosh-server.

Você precisará se conectar ao mosh usando o seguinte comando:

mosh -p 60000 --ssh='ssh -p PORT_X' server-in-dmz
Hengjie
fonte
3
Uma coisa interessante a ser observada é que o uso de aplicativos interceptores tcp, como tsocks ou proxychains, não funcionará. Isso ocorre porque eles apenas interceptam pacotes TCP e não UDP (que é o que o mosh usa).
precisa
como uso pedra com um endereço ipv4 e um endereço ipv6?
Janus Troelsen
0

Em vez de encaminhar o tráfego na camada de aplicativo, conforme sugerido por @Hengjie, você também pode usar o iptables (no 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

Então, você se conecta usando mosh -p 60159 --ssh='ssh -p 11559' server-in-dmz

Nota:

  • Não parece haver uma maneira de colocar o mosh-port nos arquivos de configuração. :(
  • Eu escolhi as portas aleatoriamente.
  • Você pode querer alguma configuração adicional do iptables se fizer isso…
  • Edit: É melhor DNAT uma gama inteira de portas, pois há uma boa chance de você matar acidentalmente o cliente mosh sem levar o servidor com ele. Se você não encaminhar um intervalo, precisará fazer o ssh no servidor e matar o servidor mosh em execução. Pode ser um pouco chato se você tiver uma conexão ruim em primeiro lugar.
  • Meu caso de uso para isso é mosh através de iodo.
César
fonte