← projetos

projeto

IXSonar — Análise de Visibilidade BGP entre Pontos de Troca de Tráfego

com Felipe Zanoni da Rosa

IXSonar — Análise de Visibilidade BGP entre Pontos de Troca de Tráfego

Um pipeline de dados em Rust que audita, em escala, a redundância de conectividade entre diferentes IXs brasileiros.

O que é

Ferramenta de análise de redes que compara a visibilidade de rotas BGP entre múltiplos Pontos de Troca de Tráfego (IXs) — por exemplo, diferentes praças do IX.br. Responde a perguntas como: quais prefixos anunciados em um IX também aparecem em outro? Quantos mantêm o mesmo caminho de AS nos dois locais? Como essa cobertura varia entre CDNs, provedores de acesso, bancos e órgãos de governo? O resultado é um dashboard histórico que ajuda times de rede a entender a saúde e a redundância da conectividade de uma operadora entre diferentes localidades.

Como funciona

O pipeline roda em três estágios. Primeiro, um binário em Rust baixa automaticamente snapshots históricos de rotas BGP (RIBs) do RouteViews, testando dias em paralelo até encontrar um arquivo válido, e aplica filtros configuráveis de inclusão/exclusão sobre AS-PATH e comunidades BGP. Em seguida, ainda em Rust, o mesmo pipeline usa DuckDB embarcado para comparar pares de IXs — overlap de prefixos, consistência de caminho de AS e métricas por categoria de rede — processando as dimensões global, IPv4 e IPv6 em paralelo. Por fim, scripts em Python leem esses resultados e geram um dashboard HTML autocontido com gráficos interativos, servido por um pequeno servidor Flask.

Stack técnica

  • Rust (tokio, reqwest, rayon, DuckDB embarcado)
  • Python (pandas, matplotlib, Flask)
  • Apache Parquet como formato intermediário
  • Google Charts para o dashboard

Destaques técnicos

  • Download automático e resiliente de RIBs BGP históricas, testando múltiplos dias até achar um snapshot válido
  • Motor de filtros configurável com lógica AND/OR sobre comunidades BGP e AS-PATH
  • Comparação de overlap de rotas feita inteiramente em SQL sobre arquivos Parquet, via DuckDB embarcado
  • Processamento paralelo nativo em Rust das três dimensões de análise (global, IPv4, IPv6)
  • Classificação de redes por categoria de negócio (CDN, ISP, financeiro, governo) para segmentar a análise
ZZZZ