Meu acesso remoto pelo Tailscale parou: como diagnosticamos

Quando o Tailscale 'para' do nada, a culpa quase nunca é do Tailscale. O caso de todos os peers offline e o método pra não caçar problema no lugar errado.

O problema

A mensagem chegou sem detalhes: “meu acesso remoto pelo Tailscale parou, verifica o status”. Para quem não conhece, o Tailscale funciona como uma ponte virtual segura que conecta vários computadores pela internet como se estivessem na mesma sala.

O detalhe mais assustador nesse tipo de relato é que não costuma haver uma mensagem de erro clara. A conexão simplesmente para de funcionar: sem aviso, sem registros (logs) óbvios e sem pistas. Você digita o comando ssh oracle (usado para se conectar a outro computador remotamente) e a tela fica travada até dar timeout — ou seja, o sistema cansa de esperar e desiste.

Nessa hora, o instinto errado de quem está começando é rodar o comando systemctl status tailscaled para mexer direto no daemon (o programa que roda silenciosamente em segundo plano no seu próprio computador). A primeira coisa que aprendi nesse caso é que, na maioria das vezes, o programa na sua máquina local está saudável e o problema está em outro lugar.

O instrumento certo: tailscale status

O comando que resolve é o mais óbvio da ferramenta, mas é o que costuma ser pulado. Em vez de tentar adivinhar o que quebrou, o correto é verificar o estado geral da rede com o comando:

tailscale status

O resultado foi cirúrgico. A máquina atual — o chamado “nó” tiago, que é o computador de onde eu estava fazendo o diagnóstico — apareceu com o status active; direct (ativo e conectado diretamente), usando o IP interno 100.x.x.x totalmente saudável. Ou seja: o Tailscale na máquina local não tinha problema nenhum. O serviço estava rodando, a chave de segurança estava autenticada e o sistema de criptografia (WireGuard) estava operacional.

O problema de verdade apareceu em todo o resto da lista. Cada peer (cada um dos outros dispositivos conectados a essa rede) apareceu marcado como offline (desconectado), acompanhado de um aviso de “última vez visto”:

iphone172                     offline, last seen 12 minutes ago
cs-249877271407-default       offline, last seen 2 days ago
bnic-35305-1                  offline, last seen 20 days ago
bnic-35305                   offline, last seen 31 days ago

A leitura era simples: a nossa rede estava funcionando. Quem tinha caído eram os outros dispositivos. O acesso remoto “parou” porque não havia mais ninguém do outro lado da ponte para responder.

A leitura correta do “offline”

Cada linha do comando tailscale status exige uma tomada de decisão diferente, e aprender a interpretar essa lista economiza horas de trabalho:

offline, last seen 12 minutes ago — o dispositivo desconectou há pouco tempo. Causa provável: o aplicativo parou (o iPhone entrou em modo de repouso, o Wi-Fi caiu ou o app foi fechado). Ação: ir até o aparelho e reconectar.

offline, last seen 2 days ago — desconectado há dias. Pode ser uma máquina que reiniciou e o serviço não subiu automaticamente. Ação: tentar um acesso via SSH por outra máquina que ainda esteja acessível, ou ir fisicamente ao local para iniciar o programa tailscaled.

offline, last seen 20 days ago e 31 days ago — são máquinas que provavelmente nem existem mais. Podem ser instâncias temporárias na nuvem (como vemos pelos nomes bnic-35305), ambientes de teste em containers ou dispositivos que foram trocados. Ação: ignorar ou remover da rede usando o comando tailscale lock / pelo painel de controle, para não poluir a lista.

O erro mais comum nessa situação seria tratar todas as quatro linhas como se fossem o mesmo problema. Não são. O iPhone desconectado há 12 minutos é uma queda recente; as instâncias bnic de 20 e 31 dias atrás são apenas histórico e “ruído”.

Quando o daemon local é o culpado

Nesse caso específico não era, mas vale registrar o passo a passo de como diagnosticar quando o problema realmente é no seu próprio computador. Se o comando tailscale status mostrar a sua própria máquina como offline ou idle (em espera), em vez de active; direct, aí sim a falha é local.

Os passos para checar, em ordem, são:

# 1. O serviço está rodando?
systemctl status tailscaled

# 2. A interface subiu?
ip addr show tailscale0

# 3. Há saída pra internet (probes do Tailscale)?
curl -s https://controlplane.tailscale.com >/dev/null && echo "controlplane ok"

# 4. Forçar reautenticação se a chave expirou
sudo tailscale up --reset

O passo 3 é o que mais pega as pessoas de surpresa. O programa tailscaled pode estar rodando e a placa de rede virtual (tailscale0) pode estar ativa, mas se a máquina perdeu o acesso à internet (por problemas de DNS ou bloqueio de firewall), os servidores de controle do Tailscale param de responder e o seu computador fica “órfão”, sem comunicação com o resto da rede. Testar a conexão com o endereço controlplane.tailscale.com ajuda a isolar exatamente essa falha.

O que aprendi

A lição principal é sobre método de diagnóstico. Quando um sistema distribuído (em rede) para de responder, nosso primeiro instinto é mexer na máquina que está na nossa frente. Mas a primeira ação deve ser ler o estado de toda a rede, e não apenas do seu computador isolado. O comando tailscale status fornece um relatório com quatro campos por linha que conta a história inteira: quem caiu, quando e por quanto tempo. Ignorar isso e tentar reiniciar o serviço direto com systemctl restart é procurar o problema no lugar errado.

A segunda lição é aceitar que a maioria dos “parou de funcionar” no Tailscale não é uma falha do Tailscale em si. São dispositivos que entraram em modo de espera, servidores de teste que venceram ou celulares que fecharam o aplicativo. A ferramenta foi projetada para ser muito resistente; quando algo para, quase sempre é porque o dispositivo do outro lado realmente saiu do ar.

E a terceira lição, mais sutil: o estado “offline há muitos dias” não é um problema técnico, é falta de organização de inventário. Acumular dispositivos mortos na rede polui os diagnósticos futuros. Limpar da lista o que já morreu há mais de um mês transforma o próximo tailscale status em uma ferramenta precisa de leitura, em vez de um cemitério de conexões antigas.

Leia também

Comentários

Carregando comentários…

Deixe um comentário