Eu tenho uma pequena rede local que pega carona em um WiFi cativo e uso ssh
no OS X com -oServerAliveInterval=240
PuTTY 0.62 no Windows 7 Professional para estabelecer conexões com meu Linode, Hetzner e outros servidores.
Com PuTTY, seleciono Connection
→ Sending of null packets to keep session active
a 240. O Enable TCP keepalives (SO_KEEPALIVE option)
está desativado, conforme os padrões.
Quando minha internet fica temporariamente inativa por cerca de um minuto (é necessário se autenticar novamente no portal cativo), o PuTTY quase sempre perde todas as sessões abertas de ssh que eu tenho, e especialmente aquelas onde havia algum tipo de atividade, mas o OpenSSH no OS X nunca perde nenhuma sessão desde que minha internet volte a funcionar em cerca de um minuto ou dois, mesmo que eu tente digitar algo no ssh e não veja resposta por 60 segundos inteiros, até que minha conexão esteja ativa novamente. (Portanto, tenho certeza de que os estados NAT sempre são preservados.)
Posso parar o Windows / PuTTY de descartar preventivamente boas conexões?
Parece-me que SO_KEEPALIVE ou algo parecido está realmente ativado por padrão no Windows, e o tempo limite para detectar conexões obsoletas é muito pequeno. Gostaria de aumentá-lo para algo mais do que alguns segundos, da mesma forma que o OS X é imune a essas breves interrupções temporárias, desde que a interrupção seja de apenas algumas centenas de segundos e esteja abaixo do valor de -oServerAliveInterval
(times ServerAliveCountMax
).
mosh
é uma alternativa melhor.)Respostas:
http://www.chiark.greenend.org.uk/~sgtatham/putty/faq.html#faq-timeout
Parece que
TcpMaxDataRetransmissions
(REG_DWORD) afeta diretamente isso. O valor pode ser adicionado aHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters
withregedit.exe
(a chave está ausente por padrão, você deve primeiro adicioná-lo para alterá-lo). Quando desativado - é 5. Adicione-o e configure-o pelo menos paraf
(15) e reinicie.O valor padrão 5 parece bastante inadequado para manter as conexões durante interrupções breves e temporárias da rede; você receberá um tempo limite em questão de segundos. Adicionei essa
TcpMaxDataRetransmissions
chave ao registro e defina seu valor comof
(15), reiniciei a máquina e, depois de fazersysctl net.inet.ip.forwarding=0
o roteador antes de digitar um caractere no PuTTY, o eco retornou para mim depois de ativar o encaminhamento no meu roteador após aguardar 5 minutos (testei para determinar que um valor 0x0000000c (12) faz com que a conexão seja interrompida exatamente 7 minutos após a primeira tentativa de enviar um pacote durante uma interrupção). Antes da reinicialização, o PuTTY atingia o tempo limite da conexão em alguns segundos imediatamente. Observe que a reinicialização foi necessária - pelo menos no Windows 7 Professional,simplesmente alterar o registro não afeta as conexões existentes nem as novas ! Nada muda no Windows!Enquanto isso, também pode adicionar e definir
KeepAliveInterval
como60000
decimal (60 s) o valor padrão não definido de1000
(1 s), mas não deve ter nenhum efeito no meu caso específico, como acima, pois as keepalives do TCP não foram ativadas.fonte