Lab 1: BGP MED and AS-Path Prepending

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:

  1. 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.
  2. 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

Leave a Reply

Your email address will not be published. Required fields are marked *

About Gradiant

It is a long established fact that reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum