Como Detectar Quebra de Federação Entre Duas Instâncias
🔍 WiseChecker

Como Detectar Quebra de Federação Entre Duas Instâncias

A quebra de federação ocorre quando duas instâncias do Mastodon não conseguem mais trocar postagens, notificações ou mensagens diretas. Você pode notar que perfis de uma instância remota aparecem vazios, postagens de um servidor específico param de aparecer na sua timeline federada ou mensagens diretas de usuários dessa instância nunca chegam. A causa raiz geralmente é um domínio bloqueado, uma instância suspensa ou uma falha técnica no protocolo de entrega ActivityPub. Este artigo explica como identificar o ponto exato da falha entre duas instâncias usando ferramentas do lado do servidor e verificações manuais.

Principais Conclusões: Diagnosticando Quebra de Federação Entre Instâncias

  • Painel de administração da instância > Moderação > Federação > Domínios: Verifique se o domínio remoto está bloqueado, suspenso ou silenciado.
  • Painel de administração da instância > Moderação > Federação > Filas do Sidekiq: Inspecione falhas de entrega e contagens de repetição para atividades de saída.
  • curl ou mastodon-activity-fetcher: Consulte manualmente a API pública da instância remota para verificar se ela responde e retorna objetos ActivityPub válidos.

Por Que a Quebra de Federação Acontece Entre Duas Instâncias

A federação no Mastodon depende do protocolo ActivityPub. Cada instância mantém uma lista de servidores remotos conhecidos e troca periodicamente atividades como Create, Announce e Like. Quando uma instância para de receber ou enviar atividades para outra, a quebra pode ser causada por uma das várias condições.

A causa mais comum é um bloqueio em nível de domínio. Administradores de instância podem silenciar, suspender ou bloquear completamente um domínio remoto. Silenciar oculta postagens públicas da timeline local, mas ainda permite interações privadas. Suspensão remove todo o conteúdo do servidor remoto e impede que novas atividades sejam aceitas. Um bloqueio total rejeita todas as conexões de entrada.

Outra causa é uma falha técnica na fila de entrega. O Mastodon usa o Sidekiq para processar atividades de saída. Se a instância remota ficar inacessível por um período prolongado, o Sidekiq marca a entrega como falha e para de tentar após um número configurável de tentativas. A instância remetente então descarta as atividades pendentes.

Uma terceira causa é um proxy reverso ou certificado TLS mal configurado em qualquer uma das instâncias. Se o certificado SSL do servidor remoto expirou ou seu servidor web retorna um erro 5xx, o handshake ActivityPub falha silenciosamente.

Passos para Detectar Quebra de Federação Entre Duas Instâncias

Siga estes passos em ordem. Você precisa de acesso de administrador a pelo menos uma das duas instâncias para completar todas as verificações. Se você não tiver acesso de administrador, ainda pode realizar os testes de API pública nos passos 3 e 4.

  1. Verifique os bloqueios de domínio da instância local
    Faça login no painel de administração da sua instância. Navegue até Moderação > Federação > Domínios. Pesquise pelo nome do domínio remoto. Se aparecer com status Suspenso ou Bloqueado, a federação está desabilitada intencionalmente. Se aparecer como Silenciado, as postagens públicas estão ocultas, mas as interações diretas ainda funcionam.
  2. Inspecione a fila de entrega do Sidekiq
    No painel de administração, vá para Moderação > Federação > Filas do Sidekiq. Procure pela fila chamada push ou default. Se você vir um grande número de repetições ou trabalhos com falha direcionados ao domínio remoto, a instância remetente não consegue entregar atividades. Clique em um trabalho com falha para ver a mensagem de erro. Erros comuns incluem Net::OpenTimeout e Net::ReadTimeout, que indicam que o servidor remoto não está respondendo.
  3. Consulte a API pública da instância remota
    Abra um terminal ou use uma ferramenta como Postman. Envie uma requisição GET para o endpoint da API da instância remota para um usuário conhecido. Por exemplo: curl https://instancia-remota.exemplo/api/v1/accounts/1. Se a requisição retornar um status 200 e um objeto JSON válido com um campo id, a instância remota está acessível e servindo requisições da API. Se retornar 403, a instância remota pode ter bloqueado seu IP. Se retornar 502 ou 503, o servidor remoto está com um erro de backend.
  4. Teste a entrega de objetos ActivityPub
    Busque uma postagem específica da instância remota usando sua representação ActivityPub. Adicione .json ao final da URL da postagem. Por exemplo: curl https://instancia-remota.exemplo/@usuario/12345.json. Uma resposta válida retorna um documento JSON-LD com campos @context e type. Se a resposta estiver vazia ou retornar 404, a instância remota não está publicando aquele objeto publicamente.
  5. Verifique os cabeçalhos do servidor da instância remota
    Execute curl -I https://instancia-remota.exemplo para inspecionar os cabeçalhos HTTP. Procure pelo cabeçalho Server. Se mostrar Mastodon ou uma string de versão, a instância está executando Mastodon. Se mostrar nginx ou Apache sem uma versão do Mastodon, o proxy reverso está funcionando, mas a aplicação pode estar inativa. Verifique também cabeçalhos X-Frame-Options e Content-Security-Policy que podem bloquear requisições de origens cruzadas.
  6. Verifique a validade do certificado TLS
    Use openssl s_client -connect instancia-remota.exemplo:443 -servername instancia-remota.exemplo. Uma cadeia de certificados válida deve mostrar Verify return code: 0 (ok). Se o certificado estiver expirado ou autoassinado, o handshake TLS falha e o Sidekiq não consegue entregar atividades.

Se a Federação Ainda Parecer Quebrada Após Esses Testes

Postagens da instância remota aparecem na timeline federada, mas mensagens diretas falham

Isso geralmente indica um silenciamento ou um bloqueio por usuário, não um bloqueio de domínio. Verifique o perfil do usuário remoto na sua instância. Se a conta mostrar um ícone de cadeado ou o perfil disser “Esta conta foi limitada”, o administrador local silenciou aquele usuário específico. Peça ao administrador local para revisar Moderação > Contas > Contas limitadas e remover a limitação se apropriado.

Atividades de saída da sua instância estão na fila, mas nunca são entregues

Se o Sidekiq mostrar uma fila crescente de entregas com falha para a instância remota, o servidor remoto pode estar limitando a taxa da sua instância. Instâncias Mastodon podem configurar limites de taxa no arquivo config/initializers/rack_attack.rb. Peça ao administrador remoto para verificar os logs de limite de taxa. Alternativamente, a instância remota pode ter atingido sua cota de armazenamento e não pode aceitar novas atividades.

A federação funciona intermitentemente — postagens às vezes chegam e às vezes não

Esse padrão sugere um problema de rede, não um bloqueio permanente. Verifique a resolução DNS do domínio remoto a partir do servidor da sua instância. Execute nslookup instancia-remota.exemplo. Se a resposta DNS mudar entre vários endereços IP, um dos IPs pode estar inacessível. Verifique também se sua instância usa um CDN ou proxy que armazena em cache os resultados DNS por muito tempo.

Item Bloqueio de Domínio Falha na Fila de Entrega
Descrição Administrador bloqueia ou silencia intencionalmente o domínio remoto Sidekiq não consegue entregar atividades devido a erro de rede ou servidor
Sintoma Todo o conteúdo da instância remota está oculto ou rejeitado Atividades de saída estão na fila, mas nunca são entregues; erros no Sidekiq
Método de detecção Verificar Moderação > Federação > Domínios Inspecionar fila push do Sidekiq para trabalhos com falha
Resolução Remover o bloqueio ou silenciamento no painel de administração Corrigir o problema de rede ou TLS do servidor remoto; limpar a fila do Sidekiq

Agora você pode identificar sistematicamente a causa da quebra de federação entre quaisquer duas instâncias do Mastodon. Comece com a verificação de bloqueio de domínio no painel de administração, depois vá para a inspeção da fila do Sidekiq e, por fim, realize os testes de API e TLS. Se a instância remota estiver bloqueando seu IP, entre em contato com o administrador remoto e peça para ele colocar o IP da sua instância na lista de permissões no arquivo config/initializers/rack_attack.rb. Para falhas persistentes de entrega, considere configurar uma fila Sidekiq dedicada para cada domínio remoto para isolar problemas.