O SSH conecta, o prompt aparece e a sessão morre assim que um comando devolve algo volumoso. O eco continua por um instante, depois a conexão expira enquanto o cliente ainda mostra o túnel como ativo. Uma sessão saudável até os dados chegarem costuma bater num limite de tamanho e não num defeito do SSH. As verificações abaixo estão ordenadas para eliminar primeiro a explicação mais barata.

Leia a forma da falha antes de tocar no perfil

Pacotes pequenos passam e os cheios não. Um prompt, um banner ou uma tecla entram facilmente; uma listagem de pasta, um download ou um bloco colado não. O tamanho em que o comportamento muda é a pista, não o facto de o SSH ser o programa envolvido.

O mecanismo é a descoberta da MTU do caminho, que depende de retorno de informação. O TCP escolhe um tamanho de segmento e, quando um router no caminho não consegue encaminhar o pacote resultante, deve avisar disso com uma mensagem ICMP. O encapsulamento torna o pacote exterior maior que o interior, por isso o tamanho utilizável dentro de um túnel fica sempre abaixo do enlace físico. Filtre essas mensagens ICMP em qualquer ponto e o emissor nunca recebe a correção, continua a enviar segmentos cheios, e o pacote exterior é descartado sem aviso.

Meça o teto dos dois lados

Compare a MTU do túnel com o enlace físico antes de alterar qualquer um dos dois. Um túnel que copiou o valor físico já lhe disse onde está a discrepância.

Sonde a partir de dentro do túnel com um pedido que proíba a fragmentação, baixando a carga útil até as respostas voltarem. O argumento de tamanho conta apenas a carga útil, por isso o número que funciona fica sempre abaixo da MTU da interface. Some de novo os tamanhos dos cabeçalhos se precisar do número da interface.

ip link show tun0
ping -M do -s 1380 10.9.0.1

Repita a sonda contra o endereço público do servidor a partir de fora do túnel. Se as sondas grandes também falharem ali, o limite está no caminho até ao servidor e nenhuma opção do túnel o moverá. Essa comparação poupa-o de afinar um cliente que nunca foi o problema. Anote os dois resultados antes de abrir um ficheiro de configuração.

mssfix e fragment fazem trabalhos diferentes

mssfix limita o tamanho de segmento que as ligações TCP dentro do túnel anunciam durante o aperto de mão. É a alavanca certa para SSH, HTTPS e cópias de ficheiros, por isso o bloqueio desaparece muitas vezes assim que é definido. Não toca nas cargas úteis UDP de todo.

Um túnel que também transporta um serviço UDP pode continuar a falhar depois de o SSH estar corrigido, e esse resultado confunde quem assume que uma opção cobre tudo.

fragment é o outro mecanismo e uma ferramenta diferente. Divide os pacotes demasiado grandes antes do encapsulamento, aplica-se apenas ao transporte UDP, acrescenta sobrecarga por datagrama e está documentado como último recurso para descobertas quebradas. As duas definições têm de coincidir nos pares que terminam o túnel. Um lado que limita enquanto o outro fragmenta produz avisos no registo e um comportamento que ninguém consegue prever a partir dos ficheiros.

Baixar a MTU da interface é a opção grosseira

Reduzir a MTU da interface nos dois extremos é o instrumento grosseiro. Diz a cada emissor interno um número menor, o que funciona, e cobra esse custo a todo o tráfego em vez de aos fluxos TCP que precisam dele.

Escolha-o quando o túnel transporta tráfego que não consegue limitar, ou quando o cliente é um aparelho cujo perfil não controla. Aplique-o de forma simétrica e anote o valor ao lado do perfil. Uma alteração aplicada a metade é pior do que nenhuma, porque parece uma correção.

Teste de novo com a transferência que bloqueou

Volte a ligar para que as definições carreguem, abra uma ligação nova e repita o comando que congelou. O tamanho de segmento é negociado no aperto de mão, por isso uma sessão que sobreviveu à reconexão ainda leva o valor antigo. O ping é um teste fraco aqui, porque toda a falha é que os pacotes pequenos passam. Use a listagem, o download ou a colagem que quebrou.

Se o bloqueio persistir com um tamanho menor, olhe para outro lado: uma firewall com estado que expire o fluxo, um endereço duplicado ou uma rota que se desloca ao reconectar. Anote o tamanho da sonda que falhou e a definição que alterou, porque é esse par que torna o relatório seguinte útil.

Artigos relacionados