Ola BGP Folks! No artigo de hoje irei falar de um dos protocolos mais “complexos” e importantes na nossa vida, já que sem ele, eu não conseguiria divulgar esse artigo por exemplo, e nem veríamos Netflix ou receberíamos os Memes que alegram nossas vidas rs. Estou falando do BGP (Border Gateway Protocol).
Nesse ano, esse protocolo que é responsável pelo funcionamento da internet mundial fez 30 anos (adulto já rs), e a ideia desse artigo é falar um pouco sobre ele de forma mais clara e com o máximo de analogias possíveis rs. Então, vamos la!
O que é o BGP?
O BGP é um protocolo de “conversa” entre AS (Autonomous System) com a função principal de realizar a troca de tabelas de roteamento entre si, podendo ser um protocolo EGP (Exterior Gateway Protocol) , quanto um IGP (Interior Gateway Protocol).
Mas, você deve estar se perguntando, o que é um “ AS”? Bom, AS é um “código” único que cada ISP, empresas e alguns conteúdos (como Facebook, Netflix, Google) possuem. Esse código é atrelado a um prefixo IP exclusivo para ele e mundialmente esse range de IP possui um “dono”.
Obs: Para uma explicação mais detalhada do que é um ASN, vou deixar esse link feito pelo NIC.BR que faz um aprofundamento muito maior e recomendo lê-lo.
O equipamento L3 que possui a capacidade de utilizar esse protocolo faz um “peer” com outro ASN que deseja estabelecer vizinhança e após configurado, ambos trocam o seu numero de ASN e os seus prefixos. Após esta troca, os peers enviam atualizações incrementais conforme as alterações na tabela de roteamento.
Importante lembrar que o BGP pode ser utilizado tanto de forma EXTERNA (eBGP, entre AS diferentes) quanto de forma INTERNA (IBGP, dentro do mesmo AS) , cada um com suas diferenças de aplicabilidade e de cenário/necessidade, porem o foco desse artigo é o eBGP.
Conseguem ver a magnitude e poder do protocolo? Como uma analogia, é como se fôssemos o Goku, enviando uma mensagem para cada pessoa que ele deseja a energia para realizar a Genkidama. Ele solicita as pessoas (peer) sua energia (prefixos) para conseguir construir a sua Genkidama (tabela de roteamento, ou Full Route), sendo que essa Genkidama, é uma tabela de roteamento de hoje sendo aproximadamente 800K rotas IPV4 e 70K rotas IPV6!!!
Funcionamento BGP
O BGP usa as informações trocadas pelos BGP Neighboors que são compostas dos números identificadores dos ASN. Feito isso, os prefixos são trocados e em nossa tabela de roteamento as rotas recebidas via determinado peer contem o “AS PATH” , que é como o “caminho” que devo fazer até o destino. Como um exemplo, do ponto de vista de R1, para ele chegar nas redes do AS 65200, o seu AS-PATH será: 65000-65200
Mas, basta fechar a sessão com o neighboor e tudo funcionará magicamente? Onde está a complexidade que todos falam desse tão “temido” protocolo? Bom, o BGP é 1 protocolo muito colaborativo, ou seja, ele é muito dependente de configuração de terceiros pois, como ele é necessário para fazer com que todo o mundo conheça a sua rede, configurações erradas de algum ASN no mundo, ou a nossa própria, pode gerar um impacto muito grande não só para nós, mas como na internet como um todo.
Existe pessoas que fazem essas verificações e postam o que ocorreu na “Internet” que pode ter gerado algum impacto, como por exemplo David Belson no qual vou deixar o link do site para caso queiram acompanhar, acho muito interessante 😊
https://internetdisruption.report/
Então, já que o protocolo possui tantas “falhas” de segurança, seja por mismatch de configuração, ou de forma proposital, o que podemos fazer? Devemos fazer o nosso “dever de casa” no que tange o nosso ASN para tentarmos nos proteger dos impactos que podem ocorrer (logico que nem todos conseguiremos pois foge do nosso alcance de solução rs).
Configuração BGP
Já que precisamos fazer nosso dever de casa, vamos faze-lo de forma correta!
Abaixo está uma configuração BGP simples. Por medidas de segurança, usei qualquer ASN e os prefixos peguei um qualquer, somente para ilustrar melhor a logica.
No cenário proposto, somos o RO1 do ASN 666 fechando um peer com o ASN 123456 RO2. Não estou entrando no mérito de Full Route,Partial Full route ou Default Route pois o meu intuito é a lógica de configuração.
1) Criação da Prefix-List do cliente
Primeiramente, devemos criar a prefix list do cliente. Prefix-list nada mais é do que uma "lista" onde eu irei estipular prefixos (redes) que tomarei alguma ação (permit ou deny). É muito importante realizar esse controle para que o erro do próximo não afete toda a nossa estrutura. Abaixo está a configuração da prefix-list de ambos os RO's.
RO1
RO2
OBS: O comando “le"(less than or igual to) informa que desse /21, aceito tudo até um /24. Fazemos isso para caso o cliente pare de enviar o /21 por algum motivo, e comece a enviar 2 /22 por exemplo, nos ainda continuaremos aceitando os prefixos dele.
2) Criação do route-map
Feito a prefix-list, precisamos atrela-la a um route-map. Route-map é o "filtro" onde informamos o que aceitaremos e não aceitaremos, e onde daremos o match nos prefixos que informamos. Abaixo as evidências de RO1 e RO2 dando match nas suas respectivas prefix-list que criamos anteriormente.
RO1
RO2
3) Configuração do peer
Feito os filtros, é hora de fecharmos o Peer. Primeiramente, entraremos no processo BGP do nosso ASN, e iremos informar com qual neighbor iremos fechar o peer, e o seu ASN remoto. Após isso, entraremos no address-family ipv4 e iremos adicionar toda a configuração BGP conforme abaixo.
RO1
RO2
Obs: Importante saber o que é o comando "in" e "out" na configuração do neighbor.
IN= Recebe o caminho dos peers e esses caminhos são inseridos na tabela BGP. O melhor caminho é armazenado na tabela RIB (Routing information base) e os melhores caminhos da RIB são inseridos na FIB (Forwarding information base).
OUT= O que anuncio para os peers.
Obs2: Só anunciamos prefixos que estão na nossa tabela de roteamento! Para anunciarmos os prefixos de RO1 e RO2, os mesmos deverão ser adicionados no comando “network x.x.x.x mask x.x.x.x” dentro de “Router bgp “O numero do seu ASN" conforme demonstrado no print acima.
Vamos verificar se os peers ficaram UP e se aprendemos as rotas?
RO1
RO2
Como podemos ver, ambos os peers estão up e aprendendo os prefixos. Vamos testar do ponto de vista de RO1?
RO1
RO1 consegue pingar a rede 172.16.8.0/21 que aprendemos via BGP conforme vimos anteriormente porem não pinga o outro prefixo do ASN123456 que é o 10.0.0.0/24. Vamos achar onde está o mismatch. Primeiro passo é verificar se RO2 está enviando esse prefixo para nós.
RO1
Como podemos ver, o prefixo 10.0.0.0/24 é recebido no peer com RO2. Esse prefixo está em nossa BGP table (RIB) mas não estamos instalando ela em nossa FIB. Como resolvemos isso? Se nos voltarmos um pouco e verificarmos como está a prefix-list de RO1 (ASN-123456-IN), nos percebemos que ela não está com o prefixo de 10.0.0.0/24 e sim somente com 172.16.8.0/21. Como nossa route-map (ASN-123456-IN) está falando que só aceita (permit) o que estiver naquela prefix-list, ele está entendendo que o prefixo 10.0.0.0/24 não é permitido e com isso ele não é instalado na nossa FIB. Vamos corrigir?
RO1
Agora sim! Prefixo 10.0.0.0/24 instalado na nossa FIB e agora conseguimos ter comunicação com o prefixo.
RO1
Espero que esse artigo tenha clareado o entendimento da configuração do BGP. Essa é uma configuração simples somente para se familiarizarem com os comandos e com um pouco da lógica desse protocolo tão legal e completo de se trabalhar.
Até a próxima e let's routing! :)
Obrigado por compartilhar meu caro.
Abraços.
Pedro sempre arrepiando quando fala de BGP! Ótimo artigo!
Parabéns, muito objetivo.
Parabéns pelo artigo Pedro!