Erro 'fetch control key' no Tailscale: causa e correção
O texto depois de 'fetch control key:' já diz a causa. Veja como confirmar e corrigir x509, context canceled, 404 e 451 no Linux e no Android, sem adivinhar.
Resposta curta: o que é o erro fetch control key
O erro fetch control key no Tailscale significa que o cliente não conseguiu buscar a chave pública do servidor de coordenação. Esse é o primeiro passo de qualquer login, por isso nada mais funciona. A causa está escrita no texto que vem logo depois de fetch control key:. Leia esse final primeiro: x509 indica interceptação de TLS, context canceled indica uma rede que não deixa o pedido chegar, 404 Not Found indica um servidor de login antigo, e 403 ou 451 indicam um bloqueio do lado do próprio Tailscale.
Este guia segue essa ordem. Cada seção começa pelo texto do erro, explica o mecanismo e mostra os comandos para confirmar a causa antes de mudar qualquer coisa.
O que o cliente faz antes do login
O Tailscale cria uma VPN (rede privada virtual) entre as suas máquinas usando WireGuard. Se você ainda não conhece as peças, o que é o Tailscale e como funciona o servidor de coordenação explica a arquitetura. Aqui basta saber uma coisa: antes de qualquer túnel, o cliente precisa falar com o servidor de coordenação, chamado control plane.
O primeiro pedido é um GET em HTTPS para https://controlplane.tailscale.com/key. A resposta traz a chave pública desse servidor. Sem ela o cliente não consegue cifrar o resto da conversa de login, então o processo para ali e grava o erro.
A mensagem completa tem esta forma. O exemplo vem de um relato real num Ubuntu 20.04, na issue #13886:
not logged in, last login error=fetch control key: Get "https://controlplane.tailscale.com/key?v=82": x509: certificate signed by unknown authorityO número depois de v= muda com a versão do cliente e não ajuda no diagnóstico. A parte útil é o fim da linha.
Onde ler a mensagem completa do erro
Num servidor Linux, comece por estes dois comandos:
tailscale status
sudo journalctl -u tailscaled -n 200 --no-pager | grep -i "control key"tailscale status mostra o estado atual do nó. O journalctl mostra o histórico do serviço tailscaled, o que ajuda quando o erro aconteceu na inicialização e já não está na tela. Se o grep não devolver nada, o seu problema provavelmente é outro. Um serviço que nem chega a iniciar dá outros sintomas, e o guia para corrigir erros de instalação do Tailscale no Ubuntu trata desses casos.
Nos clientes gráficos o mesmo texto aparece quando o login falha. Num relato do macOS, a mensagem ficou assim:
You are logged out. The last login error was: fetch control key: 404 Not FoundExecute também os dois testes abaixo. Os resultados mudam de rede para rede, então este guia não mostra uma saída "certa". Compare a mesma máquina na rede com problema e numa rede que funciona, por exemplo os dados móveis do celular (telemóvel, em Portugal).
tailscale netcheck
curl -v --max-time 15 https://controlplane.tailscale.comtailscale netcheck testa o caminho até os relays DERP (Designated Encrypted Relay for Packets) e até o STUN (Session Traversal Utilities for NAT). O Tailscale usa os dois para atravessar o NAT (tradução de endereços de rede) do seu roteador. Ele não testa o login. O curl -v testa exatamente a parte que falha: a conexão HTTPS até controlplane.tailscale.com.
Quais endereços e portas o Tailscale precisa
Não adivinhe esta lista. O Tailscale publica a sua na página oficial de portas de firewall. Em outubro de 2026, essa página lista:
- Servidores de coordenação:
login.tailscale.com,controlplane.tailscale.com,log.tailscale.comeconsole.tailscale.com, em HTTPS na porta TCP 443. A conexão ao servidor de coordenação prefere HTTP na porta 80, com o transporte cifrado do próprio Tailscale. - Relays DERP: os nomes
derpN-all.tailscale.com, em HTTPS na porta TCP 443. A página informa a faixa atual de N. - STUN, para descobrir o tipo de NAT: UDP na porta 3478.
- Túneis WireGuard diretos: UDP, com porta de origem 41641 por padrão.
- Detecção de portal cativo: um pedido HTTP simples na porta 80 para um endpoint
/generate_204.
Esta é a lista que você entrega ao administrador da rede. Se só uma parte estiver liberada, o login pode funcionar e o tráfego entre máquinas continuar parado. Para testar uma porta a partir de um servidor, veja como verificar se uma porta está aberta no Linux.
Erro x509: alguém está no meio da conexão TLS
TLS (Transport Layer Security) é o protocolo que cifra o HTTPS. Ele também prova a identidade do servidor. O servidor apresenta um certificado, e esse certificado precisa ser assinado por uma autoridade certificadora (CA) em que o cliente confia. O erro começa com x509: porque X.509 é o formato desses certificados, e a verificação falhou.
Em redes de empresas e universidades, uma causa conhecida é a inspeção de TLS. Um firewall abre a conexão HTTPS, lê o conteúdo e cifra tudo de novo com um certificado próprio. Os computadores da instituição aceitam esse certificado porque o departamento de TI instalou a CA dele. O seu notebook pessoal e o seu celular não têm essa CA, por isso a verificação falha. Alguns antivírus fazem o mesmo dentro da própria máquina, com uma função de verificação de HTTPS. Um portal cativo (a página de login do Wi-Fi de hotel ou de campus) também responde no lugar do servidor verdadeiro até você aceitar os termos.
O texto depois de x509: separa estes casos. Os exemplos abaixo são as mensagens da biblioteca TLS da linguagem Go, em que o Tailscale é escrito, como aparecem no Linux. No macOS e no Windows a verificação passa pelo sistema operacional, e o texto pode ser diferente. Na issue #15315, num Mac, a mensagem chegou cortada logo depois de x509:.
x509: certificate signed by unknown authority: o certificado foi assinado por uma CA que o sistema não conhece. É o que a inspeção de TLS produz. Foi o caso da issue #13886, numa rede Wi-Fi de um cliente da empresa do autor.x509: certificate is valid for outro.nome, not controlplane.tailscale.com: quem respondeu tem um certificado para outro nome. Um portal cativo é o primeiro suspeito.x509: certificate has expired or is not yet valid: as datas do certificado não incluem a hora atual do seu sistema. Verifique o relógio antes de culpar a rede.
Como confirmar a interceptação
Mostre quem assinou o certificado que a sua máquina recebe:
openssl s_client -connect controlplane.tailscale.com:443 -servername controlplane.tailscale.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -datesLeia a linha issuer=. Execute o mesmo comando nos dados móveis e compare. Se o emissor muda de uma rede para a outra, alguém na rede com problema está substituindo o certificado. Se o campo mostrar o nome de um fabricante de firewall ou de um antivírus, a resposta está ali.
Como verificar o relógio
timedatectl
date -utimedatectl deve mostrar System clock synchronized: yes. Se mostrar no, ou se date -u estiver longe da hora UTC real, corrija o relógio primeiro. Um certificado tem uma data de início e uma data de fim. Um relógio errado coloca a hora atual fora desse intervalo, e a verificação falha mesmo sem ninguém no meio. Num servidor, o guia sobre desvio do relógio e sincronização de hora no VPS mostra como ativar a sincronização. No celular, ative a data e hora automáticas.
Como corrigir
Você não corrige inspeção de TLS no cliente. As saídas reais são estas:
- Na rede da empresa ou da universidade, peça ao TI uma exceção de inspeção para os nomes da lista oficial acima. Leve a lista e o texto completo do erro. Contornar a política da rede pode violar as regras de uso que você aceitou, então pergunte antes.
- Num antivírus com verificação de HTTPS, desative essa função ou crie uma exceção para o Tailscale. O nome da opção muda de produto para produto.
- Num portal cativo, abra o navegador, aceite os termos da rede e tente de novo com
sudo tailscale up. - Se nada disso for possível, veja o contorno da comunidade mais abaixo.
Erro context canceled ou timeout: o pedido não chega
context canceled é uma mensagem da linguagem Go. Ela quer dizer que o pedido foi cancelado antes de ter resposta. Na prática, o cliente esperou, não recebeu nada útil e desistiu. Um timeout tem o mesmo significado prático. Se tivesse chegado um certificado errado, o erro seria x509.
No Android, a issue #18116 mostra exatamente isto, no Android 16 com o Tailscale 1.90.9:
fetch control key: Get "https://controlplane.tailscale.com/key?v=130": context canceledA issue foi fechada sem uma causa publicada. Por isso, as causas abaixo são hipóteses. Teste cada uma antes de agir.
O DNS não resolve o nome. DNS (Domain Name System) é o serviço que transforma nomes em endereços IP. Teste a resolução:
getent hosts controlplane.tailscale.com
resolvectl query controlplane.tailscale.comSe não aparecer nenhum endereço, ou se aparecer 0.0.0.0, o resolvedor está bloqueando o nome. Filtros de anúncios baseados em DNS, como Pi-hole ou AdGuard Home, costumam responder assim quando um nome está numa lista de bloqueio. Se o filtro for seu, procure tailscale.com no registro de consultas dele.
Um firewall bloqueia a porta 443 ou a 80. Repita o teste do curl:
curl -v --max-time 15 https://controlplane.tailscale.comLeia onde o curl para. Se ele fica em Trying até o tempo acabar, a conexão TCP não abre, o que indica um firewall que descarta os pacotes. Se ele mostra Connected to e depois para, a conexão abre mas algo no caminho a interrompe.
No Android: DNS privado, dados móveis e outras VPN
Comece pelo teste mais simples: troque de rede. Se o login falha no Wi-Fi e funciona nos dados móveis, o problema está no Wi-Fi, não no aparelho.
Depois veja o DNS privado. O Android pode enviar todas as consultas DNS para um servidor escolhido por você, usando DNS sobre TLS. Se esse servidor bloqueia nomes do Tailscale, ou não responde nessa rede, o cliente não encontra o servidor de coordenação. Teste assim:
- Abra Configurações (no Brasil) ou Definições (em Portugal).
- Procure "DNS privado". O caminho muda por fabricante. Em muitos aparelhos fica em Rede e internet. Na Samsung fica em Conexões, Mais configurações de conexão.
- Mude para Automático, temporariamente.
- Feche e abra a app do Tailscale e tente o login de novo.
Se funcionar, o provedor de DNS privado era o problema. Antes de ativar de novo, leia se o modo DNS privado deve ficar ligado ou desligado. Existe uma segunda questão, separada desta. Relatos no fórum do Tailscale descrevem conflitos entre o DNS privado do Android e o DNS de apps de VPN depois da conexão. Isso afeta a resolução de nomes dentro do túnel. Não é o mesmo problema que o erro de login.
Por fim, veja outras VPN. O Android mantém só uma VPN ativa por vez, e muitos bloqueadores de anúncios usam esse mesmo espaço de VPN para filtrar o tráfego. Desative temporariamente as outras apps que usam VPN, incluindo a opção VPN sempre ativa de outra app, e tente o login de novo.
Erro 404 Not Found: o cliente ainda aponta para outro servidor
O código HTTP 404 quer dizer que um servidor web respondeu, mas não tem o caminho pedido. O cliente guarda o endereço do servidor de login. Se você já usou o Headscale, o servidor de coordenação self-hosted compatível com o Tailscale, esse endereço pode continuar gravado. Se o servidor antigo foi desligado, ou se o domínio agora aponta para outro site, quem responde é um servidor web que não conhece /key.
A issue #15136, no macOS com o Tailscale 1.80.2, mostra a forma completa do erro, a mesma citada mais acima. Veja quem responde no endereço antigo, trocando o exemplo pelo seu domínio:
curl -v https://headscale.example.com/keyPara voltar ao servidor oficial, termine a sessão e faça login com o endereço explícito:
sudo tailscale logout
sudo tailscale login --login-server https://controlplane.tailscale.com--login-server define o URL base do servidor de coordenação. Passe o endereço explicitamente em vez de confiar no valor gravado. Para continuar no Headscale, use o URL atual dele no mesmo comando. No macOS, o autor da issue #15136 viu o cliente continuar no servidor antigo mesmo depois de tailscale up --login-server com --force-reauth, e desinstalar não resolveu. Se isso acontecer com você, acompanhe essa issue antes de apagar arquivos de configuração à mão.
Erros 403 e 451: o bloqueio está do lado do Tailscale
Aqui a sua rede funcionou. O pedido chegou ao servidor do Tailscale e o servidor recusou. 403 Forbidden quer dizer acesso negado. 451 Unavailable For Legal Reasons é o código HTTP para um bloqueio por motivo legal. A issue #21515 mostra este código vindo da Síria:
fetch control key: 451 Unavailable For Legal Reasons (Code: login-state)Na mesma issue, a mesma configuração funcionava na Alemanha e na Turquia. Nenhuma mudança de firewall ou de DNS corrige isto, porque a decisão é do servidor. Se você está no Brasil ou em Portugal e vê 403 ou 451, verifique primeiro se outra VPN ou um proxy faz o seu tráfego sair por outro país. Depois entre em contato com o suporte do Tailscale e envie o texto completo do erro.
Contorno da comunidade: fazer login uma vez em outra rede
Isto não é uma solução oficial. É um contorno relatado por usuários nas issues do Tailscale. Na issue #13886, num Ubuntu, o erro x509 só aparecia quando a máquina iniciava na rede Wi-Fi de um cliente. Depois de um login bem-sucedido em outra rede, voltar a essa rede não trouxe o erro de volta, mesmo após reiniciar o cliente. A issue #15315 descreve os passos assim:
# 1. Conecte-se a uma rede sem restrições (por exemplo, o roteador do celular)
sudo tailscale up
# 2. Volte para a rede restrita
sudo tailscale down
sudo tailscale upNenhuma documentação oficial explica por que isto funciona, e o autor da #15315 não encontrou um equivalente para macOS. Trate-o como um contorno temporário, com duas limitações claras. Um novo login, por exemplo depois da expiração da chave, volta a precisar do servidor de coordenação. E o tráfego entre máquinas ainda pode depender dos relays DERP na porta 443, que a mesma rede pode bloquear. Respeite também as regras da rede: se a instituição proíbe VPN, este contorno não muda isso.
Não confunda com a sessão expirada num servidor headless
Num servidor sem tela (headless), o Tailscale pode aparecer desconectado sem nenhum fetch control key na mensagem. A causa é outra: a chave do nó expirou. Segundo a documentação de expiração de chaves, novos domínios têm um período de expiração de 180 dias por padrão. Quando a chave expira sem reautenticação, as conexões de e para esse nó param.
Para reautenticar:
sudo tailscale up --force-reauthO comando mostra um URL de login, que você abre num navegador em outra máquina. A documentação avisa que ele pode derrubar a conexão à tailnet. Não o execute por SSH através do próprio Tailscale. Use o console web do seu provedor de VPS, ou SSH pelo IP público. Para servidores, a correção duradoura fica no painel: na página Machines do console de administração, abra o menu do nó e escolha Disable Key Expiry.
Ordem de diagnóstico, do início ao fim
- Leia o texto depois de
fetch control key:emtailscale statusou nojournalctl. - Com
x509, compare o emissor do certificado em duas redes e verifique o relógio comtimedatectl. - Com
context canceledou timeout, teste o DNS comgetent hostse a conexão comcurl -v. - No Android, troque de rede, mude o DNS privado para Automático e desative outras VPN.
- Com
404, faça logout e login com--login-serverexplícito. - Com
403ou451, verifique por qual país o tráfego sai e fale com o suporte. - Sem
fetch control keyna mensagem, procure a expiração da chave do nó.
FAQ
O que significa o erro "fetch control key" no Tailscale?
Significa que o cliente Tailscale não conseguiu buscar a chave pública do servidor de coordenação, em https://controlplane.tailscale.com/key. Esse é o primeiro passo do login, então nada mais funciona. O texto depois de fetch control key: indica a causa: x509 aponta para interceptação de TLS ou relógio errado, context canceled para uma rede que não deixa o pedido chegar, 404 para um servidor de login antigo como o Headscale, e 403 ou 451 para um bloqueio do lado do Tailscale.
Por que o Tailscale dá erro x509 na rede da universidade ou da empresa?
Uma causa conhecida é a inspeção de TLS: um firewall abre a conexão HTTPS e cifra tudo de novo com um certificado próprio, que o seu aparelho não reconhece. Compare o campo issuer do certificado com openssl s_client nessa rede e nos dados móveis. Se o emissor muda, peça ao TI uma exceção para os nomes da lista oficial de portas e endereços do Tailscale. Verifique também o relógio, porque um relógio errado produz x509: certificate has expired or is not yet valid.
O Tailscale no Android mostra "context canceled". O que faço?
O pedido ao servidor de coordenação foi cancelado antes de ter resposta. Troque entre Wi-Fi e dados móveis para ver se o problema é da rede. Depois mude o DNS privado para Automático, em Configurações ou Definições, e desative outras apps que usam VPN, incluindo bloqueadores de anúncios. Se o login funcionar depois de uma dessas mudanças, você encontrou a causa.
Como volto ao servidor oficial do Tailscale depois de usar o Headscale?
O erro fetch control key: 404 Not Found aparece quando o cliente ainda usa o endereço de um servidor antigo. Execute sudo tailscale logout e depois sudo tailscale login --login-server https://controlplane.tailscale.com. No macOS existe um relato, a issue #15136, em que o cliente continuou no servidor antigo mesmo assim, então acompanhe essa issue se o mesmo acontecer com você.
Fazer login em outra rede resolve o erro de vez?
Não há garantia. É um contorno da comunidade: alguns usuários fizeram sudo tailscale up numa rede sem restrições, voltaram à rede bloqueada e o cliente continuou funcionando. Nenhuma documentação oficial explica ou garante esse comportamento. Um novo login, por exemplo depois de a chave do nó expirar, volta a precisar de acesso ao servidor de coordenação.