Estou focado em aprender ainda mais sobre CISCO e para ajudar meus colegas que estão aprendendo junto comigo, irei colocar uma serei de Labs baseado no protocolo BGP (Border Gateway Protocol) o proposito aqui e aprendermos juntos.
No nosso primeiro Labs irei falar sobre (MED e AS-Path Prepend)
Uma rapida leitura sobre MED e AS-Path Prepend:
Multi-Exit Discriminator (MED) é um atributo não transitivo opcional. MED é uma dica para vizinhos externos sobre o caminho preferido para um sistema autônomo (AS) que possui múltiplos pontos de entrada. O MED também é conhecido como métrica externa de uma rota. Um valor MED mais baixo é preferível a um valor mais alto.
AS-Path prepending é uma forma de manipular o atributo AS-Path de uma rota BGP. Permite anexar múltiplas entradas de AS a uma rota BGP. Isso pode ser uma solução alternativa se for necessário seguir um caminho específico e outros meios, como o Multi-Exit Discriminator (MED), não forem suportados.
Agora que compreendemos o que e MED e AS-Path vamos ao nosso Lab. Abaixo esta o modelo do nosso laboratorio que iremos fazer.
Vamos seguir nossa receita de bolo:
- Configurando interface Loopback (Embora seja possível empregar qualquer endereço de interface para verificar a conectividade do dispositivo, a utilização da interface de loopback é a abordagem preferencial)
R1:
interface Loopback0
ip address 1.1.1.1 255.255.255.255
!
interface Ethernet0/0
ip address 150.1.1.1 255.255.255.0
no shut
!
interface Serial1/0
ip address 10.0.0.1 255.255.255.252
no shut
R2:
interface Loopback0
ip address 2.2.2.2 255.255.255.255
!
interface Serial1/0
ip address 10.0.0.2 255.255.255.252
no shut
!
interface Serial1/1
ip address 10.0.0.9 255.255.255.252
no shut
R3:
interface Loopback0
ip address 3.3.3.3 255.255.255.255
!
interface Ethernet0/0
ip address 150.3.3.3 255.255.255.0
no shut
!
interface Serial1/1
ip address 10.0.0.10 255.255.255.252
no shut
!
interface Serial1/2
ip address 10.0.0.13 255.255.255.252
no shut
!
interface Serial1/3
ip address 10.0.0.17 255.255.255.252
no shut
R4:
interface Loopback0
ip address 4.4.4.4 255.255.255.255
!
interface Ethernet0/0
ip address 150.1.1.4 255.255.255.0
no shut
!
interface Serial1/0
ip address 10.0.0.14 255.255.255.252
no shut
!
interface Serial1/1
ip address 10.0.0.18 255.255.255.252
no shut
Agora que configuramos nossos Loopback, vamos iniciar nossa proxima configuração que e o nosso BGP, vamos configurar o IP Route, Router BGP, Neighbor. Estamos seguindo nossa topologia que coloquei na imagem no inicio do artigo.
R1(config)#ip route 2.2.2.2 255.255.255.255 serial 1/0
R1(config)#ip route 4.4.4.4 255.255.255.255 ethernet 0/0 150.1.1.4
R1(config)#router bgp 1
R1(config-router)#neighbor 2.2.2.2 remote-as 2
R1(config-router)#neighbor 2.2.2.2 update-source loopback 0
R1(config-router)#neighbor 2.2.2.2 ebgp-multihop 3
R1(config-router)#neighbor 4.4.4.4 remote-as 4
R1(config-router)#neighbor 4.4.4.4 update-source loopback 0
R1(config-router)#neighbor 4.4.4.4 ebgp-multihop 3
R2(config)#ip route 1.1.1.1 255.255.255.255 serial 1/0
R2(config)#ip route 3.3.3.3 255.255.255.255 serial 1/1
R2(config)#router bgp 2
R2(config-router)#neighbor 1.1.1.1 remote-as 1
R2(config-router)#neighbor 1.1.1.1 update-source loopback 0
R2(config-router)#neighbor 1.1.1.1 ebgp-multihop 3
R2(config-router)#neighbor 3.3.3.3 remote-as 3
R2(config-router)#neighbor 3.3.3.3 update-source loopback 0
R2(config-router)#neighbor 3.3.3.3 ebgp-multihop 3
R3(config)#ip route 2.2.2.2 255.255.255.255 serial 1/1
R3(config)#ip route 4.4.4.4 255.255.255.255 serial 1/2
R3(config)#ip route 4.4.4.4 255.255.255.255 serial 1/3
R3(config)#router bgp 3
R3(config-router)#neighbor 2.2.2.2 remote-as 2
R3(config-router)#neighbor 2.2.2.2 update-source loopback 0
R3(config-router)#neighbor 2.2.2.2 ebgp-multihop 3
R3(config-router)#neighbor 4.4.4.4 remote-as 4
R3(config-router)#neighbor 4.4.4.4 update-source loopback 0
R3(config-router)#neighbor 4.4.4.4 ebgp-multihop 3
R4(config)#ip route 1.1.1.1 255.255.255.255 ethernet 0/0 150.1.1.1 R4(config)#ip route 3.3.3.3 255.255.255.255 serial 1/0 R4(config)#ip route 3.3.3.3 255.255.255.255 serial 1/1 R4(config)#router bgp 4 R4(config-router)#neighbor 1.1.1.1 remote-as 1 R4(config-router)#neighbor 1.1.1.1 update-source loopback 0 R4(config-router)#neighbor 1.1.1.1 ebgp-multihop 3 R4(config-router)#neighbor 3.3.3.3 remote-as 3 R4(config-router)#neighbor 3.3.3.3 update-source loopback 0 R4(config-router)#neighbor 3.3.3.3 ebgp-multihop 3
Vamos criar nosso Router-Map (e a solução de programação “if-then” para equipamentos da Cisco. Um route-map permite verificar certain match conditions)
Alguns exemplos rápido:
- Anuncie apenas para algumas rotas EIGRP para seu vizinho (neighbor)
- Define BGP attributes com basse em determinadas match.
- Redistribui redes do OSPF para EIGRP com base em determinadas match.
- Alterar o endereço de IP do proximo salto com policy-based routing
Para garantirmos que o código ORIGIN esteja INCOMPLETE, você precisa fazer um redistribute nas sub-redes das LAN do BGP. No entanto, você também pode usar a instrução de rede em conjunto com um route map e defina o código ORIGIN no route map.
R1(config)#route-map CONNECTED permit 10 R1(config-route-map)#match interface ethernet 0/0 R1(config-route-map)#exit R1(config)#route-map CONNECTED deny 20 R1(config-route-map)#exit R1(config)#router bgp 1 R1(config-router)#redistribute connected route-map CONNECTED R1(config-router)#exit
Você pode verificar o código ORIGIN observando a entrada do prefixo nas tabelas BGP. A origem o código INCOMPLETE é indicado por um ponto de interrogação (?) na saída do comando show ip bgp . Você também pode visualizar detalhes adicionais por prefixo ao usar este comando.
R1(config-router)#do show ip bgp BGP table version is 4, local router ID is 1.1.1.1 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 * 150.1.1.0/24 4.4.4.4 0 0 4 ? *> 0.0.0.0 0 32768 ? *> 150.2.2.0/24 2.2.2.2 0 0 2 ? * 150.3.3.0/24 4.4.4.4 0 4 3 ? *> 2.2.2.2 0 2 3 ?
R2(config-if)#do show ip bgp BGP table version is 4, local router ID is 195.1.1.1 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 * 150.1.1.0/24 3.3.3.3 0 3 4 ? *> 1.1.1.1 0 0 1 ? *> 150.2.2.0/24 0.0.0.0 0 32768 ? *> 150.3.3.0/24 3.3.3.3 0 0 3 ?
R3(config-router)#do show ip bgp BGP table version is 5, local router ID is 3.3.3.3 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 *> 150.1.1.0/24 4.4.4.4 0 0 4 ? * 2.2.2.2 0 2 1 ? * 150.2.2.0/24 4.4.4.4 0 4 1 2 ? *> 2.2.2.2 0 0 2 ? *> 150.3.3.0/24 0.0.0.0 0 32768 ?
R4(config-router)#do show ip bgp BGP table version is 6, local router ID is 4.4.4.4 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 *> 150.1.1.0/24 0.0.0.0 0 32768 ? * 1.1.1.1 0 0 1 ? * 150.2.2.0/24 3.3.3.3 0 3 2 ? *> 1.1.1.1 0 1 2 ? * 150.3.3.0/24 1.1.1.1 0 1 2 3 ? *> 3.3.3.3 0 0 3 ?
Vamos configurar o BGP, para que R4 prefira o caminho via R3 para chegar a qualquer sub-rede. Na saída do comando show ip bgp em R4 podemos ver que a rota preferida para chegar 150.3.3.0 é via R3, porém a rota preferida para chegar a 150.2.2.0 é via R1 (o router-id mais baixo), além disso, para garantir que a sub-rede 150.1.1.0 será alcançada via R3, vamos configurar o BGP em R1 para anuncie todos os prefixos com um AS-PATH mais longo para influenciar a seleção do caminho da seguinte forma:
R1(config)#route-map PREP permit 10 R1(config-route-map)#set as-path prepend 1 1 1 1 R1(config-route-map)#exit R1(config)#router bgp 1 R1(config-router)#neighbor 4.4.4.4 route-map PREP out R1(config-router)#exit
Você pode ver agora que o caminho preferido para alcançar ambos os prefixos 150.3.3.0 e 150.2.2.0 é via R3 com o next-hop 3.3.3.3 porque o comprimento AS-PATH mais curto:
R4(config)#do show ip bgp BGP table version is 7, local router ID is 4.4.4.4 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 * 150.1.1.0/24 1.1.1.1 0 0 1 1 1 1 1 ? *> 0.0.0.0 0 32768 ? * 150.2.2.0/24 1.1.1.1 0 1 1 1 1 1 2 ? *> 3.3.3.3 0 3 2 ? *> 150.3.3.0/24 3.3.3.3 0 0 3 ?
Vamos configurar o R4 para que ele envie todas as atualizações para R3 com um MED de 4. Iremos configurar o R2 para que ele envie todas as atualizações para R3 com um MED de 2. Vamos nos certificar que R3 prefere todas as rotas com o better (lower) valor MED.
Antes de configurar o MED vamos verificar os RIBs (Routing Information Base) do BGP no R3:
O caminho preferencial para chegar ao prefixo 150.1.1.0 é via R4, devemos ver todas as rotas com o next-hop R2:
R3(config)#do show ip bgp BGP table version is 5, local router ID is 3.3.3.3 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 * 150.1.1.0/24 2.2.2.2 0 2 1 ? *> 4.4.4.4 0 0 4 ? *> 150.2.2.0/24 2.2.2.2 0 0 2 ? *> 150.3.3.0/24 0.0.0.0 0 32768 ?
Vamos configurar o MED no R3:
R4(config)#route-map MED permit 10 R4(config-route-map)#set metric 4 R4(config-route-map)#exit R4(config)#router bgp 4 R4(config-router)#neighbor 3.3.3.3 route-map MED out R4(config-router)#exit R2(config)#route-map MED permit 10 R2(config-route-map)#set metric 2 R2(config-route-map)#exit R2(config)#router bgp 2 R2(config-router)#neighbor 3.3.3.3 route-map MED out R2(config-router)#exit
Vamos analisar neste lab os RIBs BGP do R3:
Ainda temos o melhor caminho para chegar a 150.1.1.0 via R4 conforme mostrado pelo comando show ip bgp em R3 abaixo, então o problema não será resolvido mesmo que R2 anuncie o MED mais baixo em comparação com R4.
O motivo é: encontramos dois problemas neste caso:
- Primeiro problema é: por padrão, o MED só é comparado pelo caminho recebido do mesmo AS, em neste caso R3 recebe dois valores de MED de dois roteadores (R2 e R4) configurados em diferentes AS.
- Segunda questão: o MED é comparado após o AS-PATH no processo de decisão do BGP. Neste caso, R3 selecionará o caminho via R4 como o melhor caminho para o prefixo 150.1.1.0/24 por causa do comprimento AS-PATH mais curto.
R3(config)#do show ip bgp BGP table version is 10, local router ID is 3.3.3.3 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 *> 150.1.1.0/24 4.4.4.4 4 0 4 ? * 2.2.2.2 2 0 2 1 ? *> 150.2.2.0/24 2.2.2.2 2 0 2 ? *> 150.3.3.0/24 0.0.0.0 0 32768 ?
Para resolvermos os dois problemas, vamos configurar o bgp always-compare-med para evitar o primeiro problema, portanto sempre compare o MED, mesmo que o MED seja recebido de AS Diferentes. Com o comando bgp bestpath as-path ignore para evitar o segundo problema para que R3 substitua o BGP processo de decisão ignorando a etapa do AS-PATH no processo de decisão do BGP:
Vamos configurar estes dois comandos:
R3(config)#router bgp 3 R3(config-router)#bgp bestpath as-path ignore R3(config-router)#bgp always-compare-med
Podemos ver que para o prefixo 150.1.1.0 que o caminho com maior comprimento AS-PATH é o preferred porque o MED mais baixo, mesmo que o AS-PATH tenha precedência sobre o MED na ordem de a seleção do caminho no BGP:
R3(config)#do show ip bgp 150.1.1.0 255.255.255.0 BGP routing table entry for 150.1.1.0/24, version 2 Paths: (2 available, best #2, table Default-IP-Routing-Table) Flag: 0x820 Advertised to update-groups: 1 4 4.4.4.4 from 4.4.4.4 (4.4.4.4) Origin incomplete, metric 4, localpref 100, valid, external 2 1 2.2.2.2 from 2.2.2.2 (195.1.1.1) Origin incomplete, metric 2, localpref 100, valid, external, best
Outra maneira de verificarmos os RIBs do BGP com o comando show ip bgp, R3 prefere todas as rotas de R2 porque o MED e o mais baixo:
R3(config-router)#do show ip bgp BGP table version is 4, local router ID is 3.3.3.3 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 * 150.1.1.0/24 4.4.4.4 4 0 4 ? *> 2.2.2.2 2 0 2 1 ? * 150.2.2.0/24 4.4.4.4 4 0 4 1 1 1 1 1 2 ? *> 2.2.2.2 2 0 2 ? *> 150.3.3.0/24 0.0.0.0 0 32768 ?
Finalizamos meus amigos foi um pouco longo mas divertido, utilizar o BGP com MED e AS-Path Prepend.
Estarei colocando aqui todos os labs que estarei fazendo no meu estudo de BGP em geral.
Até a proxima.
No Responses