domingo, 20 de janeiro de 2013

Peering IPv6 no Roteamento BGP

Olá Pessoal

Quem acompanha o blog deve lembrar que em postagens anteriores já foi explicado que 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). O Lab13 do livro mostra como configurar esse pareamento entre roteadores que operam com IPv4, no entanto vejo que ainda é pouco discutido como configurar o BGP em ambientes exclusivamente IPv6. Pois bem, esse é o objetivo desse post!

Para mostrar como é essa configuração estarei utilizando o cenário da figura abaixo. O cenário é bem simples contendo apenas dois roteadores, cada um membro do seu AS. Os roteadores estão conectados entre si através de dois links redundantes configurados com endereços IPv6, sendo que as interfaces s0/0 fazem parte da rede 2001:DB8:CAFE::/64 e as interfaces s0/1 fazem parte da rede 2001:DB8:B1FE::/64. O roteador R1 (AS 100) deverá anunciar os prefixos 2001:DB8:0:1::/64 e 2001:DB8:0:F::/64 para seu par R2 no AS 200.


Estarei organizando o processo de configuração dos roteadores R1 e R2 em duas etapas: (i) configuração básica das interfaces e (ii) configuração do BGP. Estou partindo do princípio de que os prefixos de R1 que serão anunciados na segunda etapa já existem! 

1) Configuração Básica das Interfaces

R1(config)# ipv6 unicast-routing
R1(config)# int lo 1
R1(config-if)# ipv6 address FD00::1/128
R1(config-if)# int s0/0
R1(config-if)# clock rate 128000
R1(config-if)# ipv6 address 2001:DB8:CAFE::1/64  
R1(config-if)# no shut
R1(config-if)# int s0/1
R1(config-if)# clock rate 128000
R1(config-if)# ipv6 address 2001:DB8:B1FE::1/64  
R1(config-if)# no shut

R2(config)# ipv6 unicast-routing
R2(config)# int lo 1
R2(config-if)# ipv6 address FD00::2/128
R2(config-if)# int s0/0
R2(config-if)# ipv6 address 2001:DB8:CAFE::2/64
R2(config-if)# no shut
R2(config-if)# int s0/1
R2(config-if)# ipv6 address 2001:DB8:B1FE::2/64
R2(config-if)# no shut    

Não há nada especial para comentar nessa configuração básica. Caso o leitor tenha dúvidas nessa etapa, sugiro a leitura do Lab06 do livro que explica a configuração básica e o roteamento com IPv6. Agora vamos partir para segunda etapa que mostra a configuração do BGP propriamente dita:

01. R1(config)#  router bgp 100
02. R1(config-router)# no bgp default ipv4-unicast
03. R1(config-router)# bgp router-id 1.1.1.1
04. R1(config-router)# neighbor FD00::2 remote-as 200
05. R1(config-router)# neighbor FD00::2 password SENHA
06. R1(config-router)# neighbor FD00::2 ebgp-multihop 2
07. R1(config-router)# neighbor FD00::2 update-source lo1
08. R1(config-router)# address-family ipv6 unicast
09. R1(config-router-af)# neighbor FD00::2 activate
10. R1(config-router-af)# network 2001:DB8:0:1::/64
11. R1(config-router-af)# network 2001:DB8:0:F::/64
12. R1(config-router-af)# end
13. R1# conf t
14. R1(config)# ipv6 route FD00::2/128 s0/0
15. R1(config)# ipv6 route FD00::2/128 s0/1    

Na linha 01 ativamos o processo bgp informando o AS de R1, exatamente como é feito com o BGP/IPv4. Na linha 02 desativamos o padrão do protocolo que é trabalhar com IPv4, afinal estaremos trabalhando com IPv6. Reparem que as configurações das linhas 03 a 07 são praticamente idênticas àquilo que já era feito com IPv4 (vide Lab13), exceto que o endereço do vizinho é IPv6. Na linha 08 entramos no sub-modo de configuração da família (af) de endereços IPv6 e então na linha 09 ativamos a vizinhança anteriormente configurada com FD00::2. Nas linhas 10 e 11 é feito o anúncio dos prefixos de R1. 

Vale lembrar que estamos informando o endereço da interface loopback (lo1) do vizinho R2 para fins de redundância, já que temos 2 links físicos entre os roteadores - como foi feito no Lab13 do livro. É por causa disso que nas linhas 14 e 15 temos que adicionar as rotas estáticas para esse destino, caso contrário o pareamento não iria funcionar porque não existiria alcançabilidade entre os roteadores.

R2(config)#  router bgp 200
R2(config-router)# no bgp default ipv4-unicast
R2(config-router)# bgp router-id 2.2.2.2
R2(config-router)# neighbor FD00::1 remote-as 100
R2(config-router)# neighbor FD00::1 password SENHA
R2(config-router)# neighbor FD00::1 ebgp-multihop 2
R2(config-router)# neighbor FD00::1 update-source lo1
R2(config-router)# address-family ipv6 unicast
R2(config-router-af)# neighbor FD00::1 activate
R2(config-router-af)# end
R2# conf t
R2(config)# ipv6 route FD00::1/128 s0/0
R2(config)# ipv6 route FD00::1/128 s0/1
  
Pronto! Vamos visualizar as tabelas BGP e de roteamento de R2 para verificar se o pareamento foi devidamente estabelecido e se os prefixos anunciados por R1 foram aprendidos por R2:

R2#show ip bgp ipv6 unicast summary
BGP router identifier 2.2.2.2, local AS number 200
BGP table version is 3, main routing table version 3
2 network entries using 298 bytes of memory
2 path entries using 152 bytes of memory
2/1 BGP path/bestpath attribute entries using 248 bytes of memory
1 BGP AS-PATH entries using 24 bytes of memory
0 BGP route-map cache entries using 0 bytes of memory
0 BGP filter-list cache entries using 0 bytes of memory
BGP using 722 total bytes of memory
BGP activity 2/0 prefixes, 2/0 paths, scan interval 60 secs

Neighbor        V    AS MsgRcvd MsgSent   TblVer  InQ OutQ Up/Down  State/PfxRcd
FD00::1         4   100       8       6        3    0    0 00:03:30        2

 
A tabela acima confirma que a vizinhança foi estabelecida!

R2#show ip bgp ipv6 unicast        
BGP table version is 3, local router ID is 2.2.2.2
Status codes: s suppressed, d damped, h history, * valid, > best, i - internal,
              r RIB-failure, S Stale
Origin codes: i - IGP, e - EGP, ? - incomplete

   Network               Next Hop         Metric LocPrf Weight Path
*> 2001:DB8:0:1::/64     FD00::1          0                  0 100 i
*> 2001:DB8:0:F::/64     FD00::1          0                  0 100 i

 
A gente pode verificar que a tabela BGP de R2 recebeu os prefixos 2001:DB8:0:1::/64 e 2001:DB8:0:F::/64 anunciados por R1. Por fim, vamos verificar a tabela de roteamento:

R2#show ipv6 route
IPv6 Routing Table - 10 entries
Codes: C - Connected, L - Local, S - Static, R - RIP, B - BGP
       U - Per-user Static route
       I1 - ISIS L1, I2 - ISIS L2, IA - ISIS interarea, IS - ISIS summary
       O - OSPF intra, OI - OSPF inter, OE1 - OSPF ext 1, OE2 - OSPF ext 2
       ON1 - OSPF NSSA ext 1, ON2 - OSPF NSSA ext 2
B   2001:DB8:0:1::/64 [20/0]
     via FD00::1
B   2001:DB8:0:F::/64 [20/0]
     via FD00::1

C   2001:DB8:B1FE::/64 [0/0]
     via ::, Serial0/1
L   2001:DB8:B1FE::2/128 [0/0]
     via ::, Serial0/1
C   2001:DB8:CAFE::/64 [0/0]
     via ::, Serial0/0
L   2001:DB8:CAFE::2/128 [0/0]
     via ::, Serial0/0
S   FD00::1/128 [1/0]
     via ::, Serial0/0
     via ::, Serial0/1

LC  FD00::2/128 [0/0]
     via ::, Loopback1
L   FE80::/10 [0/0]
     via ::, Null0
L   FF00::/8 [0/0]
     via ::, Null0

 
Na tabela de roteamento lá estão as rotas aprendidas pelo BGP (B), bem como as rotas estáticas (S) apontando para a interface de loopback de R1 que escrevemos na segunda etapa. Também temos todas as demais redes /64 diretamente conectadas (C). Na tabela de roteamento IPv6 é criada uma nova entrada local (L) /128 referente cada uma das redes diretamente conectadas. Também temos duas rotas locais que indicam o link-local (FE80/10) e o grupo multicast (FF00/8) que estão em operação em todo roteador.


Abraço.

Samuel.

2 comentários:

  1. Muito bom esse laboratorio, teste e funcinou muito bem....

    Márcio Moura

    ResponderExcluir
  2. Excelente artigo professor. Tenho uma pergunta. Caso as interfaces fossem ethernet, seria possível na configuração aportando para interface de saída ao invés do próximo hop? No ipv4 funciona, porém não consegui no Ipv6.

    ResponderExcluir