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