segunda-feira, 17 de dezembro de 2012

Route Reflector (RR) na Minimização de Vizinhança iBGP

Olá Pessoal.

O BGP é um protocolo de roteamento externo (EGP) utilizado para troca de rotas entre diferentes ASs (Sistemas Autônomos) através de um processo denominado pareamento (peering). No entanto, em grandes Sistemas Autônomos é possível parear roteadores pertencentes ao mesmo AS, denominado pareamento iBGP.

A lógica do BGP para evitar loops é que uma rota aprendida por um vizinho iBGP não será propagada para outro(s) vizinho(s) iBGP. O problema disso é a escalabilidade, já que todos os roteadores internos de um AS devem estar pareados entre si (topologia full-mesh) para receberem o anúncio das rotas.

A complexidade de criar uma topologia full-mesh é exponencial e pode ser compreendida através da fórmula (n²-n)/2, sendo que n é a quantidade de roteadores. Ou seja, em um cenário simplista com 4 roteadores, é necessário o estabelecimento de 6 relações de pareamento.

Para minimizar essa complexidade, uma solução atrativa é a utilização de Route Reflectors (RR), conforme pode ser observado no cenário abaixo. Na figura, R1 recebe uma rota eBGP do AS77 e precisa propagá-la para o AS99 e, via de regra, para isso ser possível deveria haver um pareamento iBGP entre R1 e R4. Com R2 configurado como RR, essa regra é quebrada. Ao fazê-lo, reparem que dentro do AS123 passamos a ter apenas três pareamentos, ou seja, exatamente a metade. Pois bem, fica evidente o benefício disso em ambientes grandes.


Felizmente quando um Route Reflector é configurado, existem novas regras que o protocolo deve seguir para evitar a ocorrência de loops, como por exemplo não modificar NENHUM atributo das rotas recebidas (entre outras), daí o nome REFLECTOR. No entanto, a posição do RR deve ser bem pensada para evitar a ocorrência de sub-otimização de roteamento de maneira que clientes escolham caminhos piores até o destino!

O objetivo desse post não é explicar essas particularidades, mas sim mostrar quais são os procedimentos necessários para configurar os roteadores do ASN123 do cenário apresentado.

Para estabelecer a vizinhança eBGP entre R1 e R77 estarei utilizando a interface de loopback porque temos dois links físicos conectando os roteadores. Maiores detalhes sobre o processo de pareamento o leitor pode encontrar no Lab13 do livro "Laboratórios de Tecnologias Cisco". Também já estarei partindo do princípio de que todas as interfaces estão devidamente configuradas e que já existe um IGP em execução para que todos os roteadores conheçam as rotas internas. Assim estaremos focando apenas na configuração do BGP.

Vamos começar a configuração por R1:

01. ASN123-R1(config)# int lo 1
02. ASN123-R1(config-if)# ip address 1.1.1.1 255.255.255.255
03. ASN123-R1(config-if)# exit
04. ASN123-R1(config)# ip route 77.77.77.77 255.255.255.255 f0/0 1
05. ASN123-R1(config)# ip route 77.77.77.77 255.255.255.255 f0/1 2
06. ASN123-R1(config)# router bgp 123
07. ASN123-R1(config-router)# bgp router-id 1.1.1.1
08. ASN123-R1(config-router)# neighbor 77.77.77.77 remote-as 77
09. ASN123-R1(config-router)# neighbor 77.77.77.77 password SENHA
10. ASN123-R1(config-router)# neighbor 77.77.77.77 ebgp-mulihop 2
11. ASN123-R1(config-router)# neighbor 77.77.77.77 update-source Loopback 1
12. ASN123-R1(config-router)# neighbor 10.23.0.2 remote-as 123
13. ASN123-R1(config-router)# neighbor 10.23.0.2 next-hop-self

Todos os detalhes das configurações anteriores podem ser encontrados com mais detalhes no livro (Lab13). Agora vamos para a configuração de R2, o Route-Reflector:

01. ASN123-R2(config)# router bgp 123
02. ASN123-R2(config-router)# bgp router-id 2.2.2.2
03. ASN123-R2(config-router)# bgp cluster-id 1
04. ASN123-R2(config-router)# neighbor 10.23.0.1 remote-as 123
05. ASN123-R2(config-router)# neighbor 10.23.0.1 next-hop-self
06. ASN123-R2(config-router)# neighbor 10.24.0.2 remote-as 123
07. ASN123-R2(config-router)# neighbor 10.24.0.2 next-hop-self
08. ASN123-R2(config-router)# neighbor 10.24.0.2 route-reflector-client
09. ASN123-R2(config-router)# neighbor 10.25.0.2 remote-as 123
10. ASN123-R2(config-router)# neighbor 10.25.0.2 next-hop-self
11. ASN123-R2(config-router)# neighbor 10.25.0.2 route-reflector-client

Reparem que na configuração de R2 (Route Reflector), criamos um grupo lógico (cluster) e informamos nos comandos "neighbor" quais vizinhos iBGP terão as rotas refletidas. Na configuração de R3 e R4 vocês verão que os roteadores clientes não têm nenhuma configuração adicional e para eles é transparente a presença do refletor de rotas:

01. ASN123-R3(config)# router bgp 123
02. ASN123-R3(config-router)# bgp router-id 3.3.3.3
03. ASN123-R3(config-router)# neighbor 10.24.0.1 remote-as 123
04. ASN123-R3(config-router)# neighbor 10.24.0.1 next-hop-self

Por fim, R4 tem também uma vizinhança eBGP com o AS99. Repare que diferente da vizinhança entre R1 e R77 que tinha dois links físicos, agora existe apenas um link e por isso não utilizaremos a interface de loopback.

01. ASN123-R4(config)# router bgp 123
02. ASN123-R4(config-router)# bgp router-id 4.4.4.4
03. ASN123-R4(config-router)# neighbor 10.25.0.1 remote-as 123
04. ASN123-R4(config-router)# neighbor 10.25.0.1 next-hop-self
05. ASN123-R4(config-router)# neighbor 10.26.0.1 remote-as 99
06. ASN123-R4(config-router)# neighbor 10.26.0.1 password SENHA 

O ponto-chave do cenário é:

- Com essa topologia sem o RR, então R4 não aprenderia a rota 37.0.0.0/8 através de R2 porque não existe um pareamento entre R1 e R4. Com o RR, então R2 recebe essa rota de R1 e reflete para seus vizinhos, inclusive R4. Então R4 pode anunciar a rota para o AS 99 através do seu pareamento eBGP.

Abraço.

Samuel.

Nenhum comentário:

Postar um comentário