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/ 

Subscribe
Notify of

0 Comments
Inline Feedbacks
View all comments
Suscríbete para recibir las últimas novedades en tu mail Click here to subscribe receive the latest news in your inbox. Inscreva-se aqui para receber as últimas novidades no seu e-mail