Um RFC necessário sobre BGP: o AS Path Prepending
01/02/2024
Por Alejandro Acosta, Coordenador de I+D do LACNIC
Introdução
O Border Gateway Protocol (BGP) desempenha um papel fundamental na construção e manutenção das tabelas de roteamento na Internet, a ponto de ser considerado a “cola” da Internet. Neste contexto, uma técnica de longa data e amplamente popular conhecida como “AS Path Prepending” foi concebida como uma estratégia chave para influenciar na seleção de rotas e otimização do tráfego tanto de entrada quanto de saída de um AS.
Neste documento navegaremos pelo draft IETF “AS Path Prepending” [1], que inclui diversas ideias e conceitos muito valiosos para a comunidade.
Sobre o rascunho draft-ietf-grow-as-path-prepending
O draft está em discussão no Grupo de Trabalho GROW (Global Routing Operation) desde 2020, e hoje se encontra na sua versão 10. Este documento conta com a participação de 7 autores: M. McBride, D. Madory, J. Tantsura, R. Raszuk, H. Li., J. Heitz e G. Mishra. Na lista de discussão este draft teve apoio maioritário (incluindo este humilde servo). Confira o draft aqui.
O que é o AS Path Prepending?
O AS Path Prepending é uma técnica que envolve a adição repetitiva do identificador de sistema autônomo (ASN) próprio à lista de ASs no caminho de uma rota BGP (AS_PATH). O seu objetivo é influenciar na seleção de rotas, tornando certos caminhos menos atrativos para o tráfego de entrada/saída. Em outras palavras, é adicionar nosso sistema autônomo ao AS_PATH e assim “afastar artificialmente um prefixo” na Internet.
No gráfico acima sem prepends, o roteador A prefere ir para C via B; no entanto, devido a 3 prepends adicionados em B, o roteador A decide alcançar C via D.
Para que e por que fazer AS Path Prepending?
Há muitos motivos pelos que se faz AS Path Prepending. O principal motivo seria, sem dúvida, por engenharia de tráfego que, por sua vez, recai no desejo de influenciar o tráfego de entrada e saída para o AS. É provável que o AS queira atingir algum dos seguintes objetivos:
– distribuir tráfego entre dois ou mais upstream providers
– ter algum upstream provider de backup
Seja qual for o caso, mais uma vez o objetivo é a engenharia de tráfego.
Fazer prepend ou não fazer prepend, essa é a questão
Fazer prepend parece um pouco com o NAT, é um mal muitas vezes necessário.
Como iremos explicar, o seu uso excessivo e por vezes desnecessário pode tornar-se uma vulnerabilidade com implicâncias significativas para a estabilidade das redes.
O que há de errado em fazer AS Path Prepending?
Todos sabemos que fazer AS Path Prepending é uma técnica muito comum para influenciar decisões do BGP, porém, o uso excessivo/ruim/e às vezes desnecessário pode trazer resultados negativos. Por exemplo:
- Criar um tráfego subótimo, ou seja, talvez nos enlaces imediatos atinjamos o nosso objetivo de uma distribuição de tráfego, no entanto, além do seu upstream imediato o tráfego não se encontre otimizado para alcançar o nosso sistema autônomo e vice-versa;
- Desagregação de prefixos, é muito comum que quando se quer fazer engenharia de tráfego se proceda à desagregação de prefixos, afetando assim o ecossistema da Internet;
- No caso de um route-leak (vazamento de rota), em condições normais, nossas publicações tenderiam a ter um as-path mais curto que o leak, mas se prolongarmos artificialmente o path fazendo prepend, é possível que as rotas vazadas tenham um as-path mais curto do que aquelas que estamos anunciando legitimamente do nosso prefixo -legítimo- que terá menos preferência na Internet, trazendo consigo possibilidades de sequestro de rotas, ataques e um longo etc.;
- Consumo de memória: como esperado, esses AS Path Prepends são pegados pelos BGP Speakers, consumindo a sua memória. A isso eu também acrescentaria um pequeno consumo adicional de CPU para cada prefixo.
Se não recomendam fazer AS Path Prepend, o que posso fazer?
Existem muitas técnicas para fazer engenharia de tráfego no BGP. A seguir, algumas que aparecem no draft:
- Aproveitar as comunidades BGP. Além das comunidades BGP amplamente reconhecidas, recomendo que você converse com seus colegas do BGP para otimizar o tráfego. Existem inúmeras comunidades BGP implementadas por provedores, as que certamente poderiam beneficiar a sua configuração.
- Fazer anúncios mais específicos para seus upstream principais.
- Manipular o AS Origin Code; lembre-se de que este atributo também é encontrado nos algoritmos de seleção de rotas do BGP.
- Usar MED (Multi Exit Discriminator), um atributo não transitivo, excelente para manipular o tráfego de entrada quando temos vários links para o mesmo provedor.
- Usar Local Preference, outro atributo não transitivo, perfeito para influenciar o tráfego que sai do nosso sistema autônomo.
Tudo muito bem, mas ainda preciso fazer o AS Path Prepend, alguma sugestão?
O draft menciona as melhores práticas à hora de fazer prepends, aqui o resumo:
- Fazer AS Path Prepend só quando for imprescindível;
- Devidoa algumas técnicas de manipulação de tráfego, pode acontecer que ao fazer AS Path Prepend não vejamos mudanças significativas na distribuição do tráfego, por isso é importante conversar com nossos colegas e saber se eles respeitam os prepends;
- Usar Local Preference na nossa rede;
- Não fazer prepends com números de AS que não sejam nossos;
- Não fazer prepends se você for single home (esta não está no draft);
- Se fizermos prepend de algum prefixo, talvez não seja necessário colocar esse prepend em todos os meus peers;
- Não há necessidade de colocar mais de 5 prepends. O motivo é que mais de 90% dos destinos estão a 5 ou menos AS de distância.
(Imagem tirada de: https://www.potaroo.net/ispcol/2019-10/prepending.pdf)
Considerações finais:
O uso de AS Path Prepending é uma estratégia valiosa, mas deve ser usada somente quando necessário e de forma cautelosa seguindo as melhores práticas. O uso excessivo de prepends pode causar imprevistos no nosso sistema autônomo do ponto de vista de tráfego e de segurança.
Convidamos você a ler a versão completa aqui, e participar da discussão na lista de LACNOG.
Também encorajamos você a nos deixar um comentário nesta postagem, para contar-nos se faz prepending de seu ASN, por que e para que o usa.
Referências:
[1] https://datatracker.ietf.org/doc/draft-ietf-grow-as-path-prepending/
As opiniões expressas pelos autores deste blog são próprias e não refletem necessariamente as opiniões de LACNIC.