Reconectando automaticamente o túnel TCP

9

Eu tenho uma conexão de rede não confiável entre duas máquinas: às vezes, conexões TCP ativas são descartadas por motivos além do meu controle. Eu quero estabelecer uma conexão TCP confiável entre as duas máquinas.

Se a rede fosse confiável, eu apenas executaria ssh -L 1234:localhost:1234 remotehost , com o servidor ouvindo na porta 1234 em remotehost e apontando o cliente para localhost:1234 . Mas se a conexão ssh morrer, o mesmo acontecerá com a conexão encaminhada. Como posso organizar automaticamente a conexão entre o cliente e o servidor?

Não soluções:

  • Isso não é para aplicativos interativos, portanto, tela não se aplica.
  • Não se trata apenas de reconectar um túnel SSH automaticamente, autossh . Eu quero continuar usando a mesma conexão TCP encapsulada, não iniciar uma nova.
  • Em princípio, uma VPN faria o truque. Mas parece um exagero quando eu quero apenas uma conexão TCP, e gostaria que uma solução funcionasse mesmo se eu não tivesse permissões de root em nenhum dos lados.

Eu tenho uma memória fraca de um programa chamado rocks que fez exatamente isso, mas parece ter caído fora da web. Estou interessado principalmente no Linux em ambos os lados (embora eu espere que um programa neste nível seja portátil para outros unices), mas se você conhece um programa que funciona entre o QNX e o VMS, melhor ainda.

    
por Gilles 30.05.2011 / 21:46

4 respostas

5

O antigo é um Sockets confiáveis não-mantidos ( Rocks ) o que você está procurando?

    
por 22.10.2016 / 02:42
1

O único protocolo padrão que conheço com esse recurso é o MPTCP . É transparente para a camada de aplicação, portanto, o SSH no topo do MPTCP deve funcionar. Ele pode executar as conexões TCP subjacentes em diferentes caminhos com IPs diferentes, portanto, em princípio, ele poderia ser usado para migrar sua conexão SSH para dentro e para fora da conexão VPN, dependendo de a conexão VPN estar ativa.

Eu não sei muito sobre a maturidade das implementações do MPTCP, mas o design do protocolo parece bastante robusto.

Ele deve proteger suas conexões SSH de se perder devido à conectividade de rede escamosa. Não irá protegê-lo contra um mitm que queira interromper sua conexão SSH. Um mitm ainda pode injetar dados corrompidos, que o SSH detectará e interromperá a conexão.

Um MPTCP como método de reconectar construído no protocolo SSH seria o método que eu poderia imaginar mantendo uma conexão viva pelo maior tempo possível. Mas eu não acho que esse recurso tenha sido projetado para o protocolo SSH.

    
por 11.08.2014 / 19:14
0

Você pode usar daemontools para manter a porta ssh avançada; ele não necessariamente manterá os programas dependendo da conexão enquanto estiver inativa (como presumivelmente quando o ssh desconectar a porta local começará a recusar suas conexões), mas é um começo.

Eu suspeito que existem alguns iptables truques, como causar essa porta para os pacotes DROP assim que o forward ssh desaparecer, então os programas de conexão apenas sabem que os pacotes estão desaparecendo, não sendo recusados. Eu estou apenas aprendendo daemontools myself (novamente), então não tenho certeza se você pode executar um script personalizado quando um serviço morrer, mas eu suspeito que você pode.

    
por 08.12.2013 / 06:18
-2

O TCP faz isso automaticamente. Você só precisa desabilitar ou enfraquecer os típicos hacks de limpeza usados para matar conexões TCP moribundas. Desative o TCP keepalive para sua conexão e aumente significativamente o limite de retransmissões excessivas. No Linux, por exemplo, escreva um número grande em /proc/sys/net/ipv4/tcp_retries2 .

No entanto, em uma rede moderna, é provável que um firewall de inspeção de pacotes com informações de estado esqueça uma conexão TCP que não consegue trocar pacotes regularmente, portanto pode chover em sua parada.

    
por 16.08.2014 / 14:17