sexta-feira, 28 de maio de 2010

BGP - Atributo Community


1        Atributo Community

A community é um atributo do BGP que pode ser usado como um flag para marcar um determinado grupo de rotas. Provedores de Serviço utilizam essas marcações para aplicar políticas de roteamento específicas em suas redes, por exemplo alterando o Local Preference, MED ou Weight.
Os provedores estabelecem um mapeamento de community com o cliente ou com outro provedor para que sejam aplicadas regras de roteamento.
A community é um grupo de prefixos que são compartilhados e podem ser configurados no atributo community do BGP. O atributo community é opcional e transitivo (optional transitive) de tamanho variável. O atributo consiste em um conjunto de 4 octetos ou um número de 32 bits que específica uma community. Sendo que sua representação é feita AA:NN onde o AA é o Autonomous System (AS) e o NN é o número da community. Um prefixo pode participar de mais de uma community. Um roteador BGP pode tomar uma ação em relação à um prefixo baseado em uma, algumas ou todas as communities associadas ao prefixo. O roteador tem a opção de adicionar ou modificar o atributo antes de passar para os outros pares.
O atributo community não é utilizado por padrão, ou seja, deve ser configurado para que o roteador envie o atributo para o seu vizinho. Essa configuração é feita especificamente para cada vizinho. O roteador Cisco também não vem com a representação AA:NN habilitada por padrão, então deve-se habilita-la.
As communities são geralmente aplicadas, modificadas ou interpretadas utilizando route-maps.

1.1           Community List

A Community-list é como uma ACL, só que para communities. Essas listas são adicionadas com o comando “ip community-list ” onde o valor é representado por “AA:NN” ou por caracteres especiais como, por exemplo, “*” que representa tudo.
Essas community-list são aplicadas nos route-maps.

2        Cenário

2.1           Objetivo

Seis roteadores (R1, R2, R3, R4, R5 e R6) são conectados fisicamente R1-R2-R3-R4-R5-R6-R1 e devem ser configurados com roteamento BGP seguindo os criterios abaixo:
         Os roteadores R1, R2 e R3 devem possuir como IGP o OSPF na área 0 divulgando suas interfaces físicas;
         Os roteadores R4, R5 e R6 devem possuir como IGP o ISIS, Level-2 somente, na área 49.0456 divulgando suas interfaces físicas;
         O R1 (AS 123) deverá fazer conexão EBGP com o R4 (AS 456) e IBGP com o R2 (AS 123) divulgando somente a sua loopback (1.1.1.1) com a community 123:1;
         O R3 (AS 123) deverá fazer conexão EBGP com o R6 (AS 456) e IBGP com o R2 (AS 123) divulgando somente a sua loopback (3.3.3.3) com a community 123:3;
         O R4 e o R6 devem divulgar suas respectivas loopbacks no BGP, porém como no-export para que não sejam divulgadas fora do AS;
         O R5 deve divulgar a sua loopback (5.5.5.5) com a community 456:5 e essa community deve ser trocada nos roteadores de borda do AS 123 para a community 123:456;
         Os roteadores R2 e R5 deverão ser Router-reflectors dos seus respectivos AS;

2.2           Topologia

Figure-01:              Topologia

2.3           IOS utilizados

         R1, R2, R3, R4, R5 e R6 – c7200-js-mz.123-7.T.bin

2.4           Configuração dos Roteadores

Em todos os roteadores, antes de configurar o roteamento BGP, deve-se configurar o IGP, ou seja, o roteamento interno para que os roteadores possam conhecer o endereço IP para fechar a conexão BGP e também para que a rota seja divulgada na tabela de roteamento BGP. Esse IGP pode ser OSPF, ISIS, estático, etc.

2.4.1      Configurações do OSPF

Para o OSPF a configuração é feita pelo comando “router ospf ” onde o “processo” é um numero do processo OSPF. Para adicionar interfaces usa-se o comando “network
area ”. Para o roteador fazer vizinhança OSPF é necessário que a rede da interface esteja no comando “network” e a interface não esteja configurada como “passive-interface”.
As interfaces de borda dos roteadores de borda são configuradas como “passive-interface” dentro das configurações de roteamento.

2.4.2      Configurações do ISIS

Para o ISIS é configurado pelo comando “router Isis” independente da área e level e não possui o número de área no comando principal como o OSPF. Na configuração de roteamento é adicionado o endereço NSAP, que é o endereço único do roteador no ISIS configurado pelo comando “net” com o formato “49.XXXX.0000.0000.000Y.00. O “49” indica ser uma área privada e o “Y” um valor diferente dos demais roteadores.
Por padrão, todos os roteadores são Level-1-2. Deve-se alterar o level do roteador dentro do “router Isis” ou nas interfaces.
As interfaces de borda dos roteadores de borda são configuradas como “passive-interface” dentro das configurações de roteamento.

2.4.3      Configurações do BGP

No BGP, agora que os roteadores conhecem os endreços IPs de seus vizinhos pelo IGP, configura-se-o em todos os roteadores pelo comando “router bgp ” onde o “AS” é o Autonomous System do provedor. Dentro da configuração de BGP adicionam-se os vizinhos estaticamente com o comando “neighbor remote-as ”, onde se o for igual ao AS do roteador a conexão é IBGP, se for diferente será EBGP.
Adiciona-se o IP da interface loopback como Router-ID pelo comando “router-id ”. Para divulgar rede no BGP é necessário que a rede exista na tabela de roteamento interna e ou adicionar o comando “network mask ” ou redistribuindo rotas para o BGP com o comando “redistribute ”.
Os roteadores dentro do mesmo AS não divulgarão as rotas IBGP entre eles, pois o BGP só divulga para o vizinho rotas aprendidas por EBGP, ou seja, rotas externas. Para isso ou faz-se o full-mesh de conexão BGP ou configuram-se os roteadores centrais como Router-reflectors adicionando os demais roteadores como clientes pelo comando “neighbor router-reflector-client”.
Para que o atributo community seja enviado nas atualizações de rotas, deve-se adicionar o comando “neighbor send-community both” para os vizinhos.
Para modificar o formato da community usado no roteador usa-se o comando “ip bgp-community new-format” que é de suma importância executa-lo no exame CCIE LAB.
Geralmente communities são aplicadas em uma rota usando route-map associado a uma lista de acesso. Na lista de acesso se “permite” uma determinada rede que é vinculada ao “match” do route-map. A community é adicionada no comando “set community ” onde o termo podem ser as communities padrão (no-export, no advertise,...) ou uma community específica AA:NN onde “AA” é o AS e o NN o valor da community.
A aplicação do route-map deve ser feita ou na configuração do vizinho com “neightbor mask route-map ”, ou na redistribuição de rota “redistribute route-map ” ou no comando na divulgação de rede “network mask route-map ”.
No route-map deve-se adicionar um último termo com “permit” para que o resto das rotas sejam aceitas ou “deny” para que nenhuma outra rota seja aceita.
Pode ser aplicado Local Preference, weight, outra community, MED, etc. baseado em uma community associada a um grupo de rotas. Ou seja, configura-se um route-map de entrada em um vizinho BGP para que todas as rotas que vierem com uma determinada community configurada seja aplicado o Local Preference 400, depois coloca-se uma regra de route-map permitindo que as outras rotas sejam recebidas normalmente.

2.5           Observações e Bugs

Observe que nos roteadores R1 e R3 são configurados as communities nas suas respectivas loopbacks que é divulgado para todos os vizinhos. Já nos R4 e R5 é usada a aplicação de Local Preference nas rotas baseado em community.
A community aplicada no R4 e R6 para suas respectivas loopbacks é a no-export que não envia para outro AS a rota.
Documentação:

2.6           Comandos Importantes de Verificação

R5#show ip route

Gateway of last resort is not set

     1.0.0.0/32 is subnetted, 1 subnets
B       1.1.1.1 [200/0] via 36.36.36.3, 00:23:50
     3.0.0.0/32 is subnetted, 1 subnets
B       3.3.3.3 [200/0] via 14.14.14.1, 00:14:56
     4.0.0.0/32 is subnetted, 1 subnets
B       4.4.4.4 [200/0] via 45.45.45.4, 01:05:04
     5.0.0.0/32 is subnetted, 1 subnets
C       5.5.5.5 is directly connected, Loopback0
     36.0.0.0/24 is subnetted, 1 subnets
i L2    36.36.36.0 [115/20] via 56.56.56.6, FastEthernet1/0
     6.0.0.0/32 is subnetted, 1 subnets
B       6.6.6.6 [200/0] via 56.56.56.6, 00:55:20
     56.0.0.0/24 is subnetted, 1 subnets
C       56.56.56.0 is directly connected, FastEthernet1/0
     14.0.0.0/24 is subnetted, 1 subnets
i L2    14.14.14.0 [115/10] via 45.45.45.4, FastEthernet0/0
     45.0.0.0/24 is subnetted, 1 subnets
C       45.45.45.0 is directly connected, FastEthernet0/0

R4#show ip bgp 1.1.1.1
BGP routing table entry for 1.1.1.1/32, version 23
Paths: (2 available, best #2, table Default-IP-Routing-Table)
  Advertised to update-groups:
     2         
  123
    14.14.14.1 from 14.14.14.1 (1.1.1.1)
      Origin incomplete, metric 0, localpref 100, valid, external
      Community: 123:1
  123
    36.36.36.3 (metric 30) from 45.45.45.5 (5.5.5.5)
      Origin incomplete, metric 0, localpref 400, valid, internal, best
      Community: 123:1
      Originator: 6.6.6.6, Cluster list: 5.5.5.5

R6#sh ip bgp 3.3.3.3 
BGP routing table entry for 3.3.3.3/32, version 26
Paths: (2 available, best #2, table Default-IP-Routing-Table)
  Advertised to update-groups:
     2        
  123
    36.36.36.3 from 36.36.36.3 (3.3.3.3)
      Origin IGP, metric 0, localpref 100, valid, external
      Community: 123:3
  123
    14.14.14.1 (metric 20) from 56.56.56.5 (5.5.5.5)
      Origin IGP, metric 0, localpref 400, valid, internal, best
      Community: 123:3
      Originator: 4.4.4.4, Cluster list: 5.5.5.5

R2#show ip bgp 5.5.5.5
BGP routing table entry for 5.5.5.5/32, version 27
Paths: (2 available, best #1, table Default-IP-Routing-Table)
  Advertised to update-groups:
     1        
  456, (Received from a RR-client)
    14.14.14.4 (metric 2) from 12.12.12.1 (1.1.1.1)
      Origin incomplete, metric 0, localpref 100, valid, internal, best
      Community: 123:456
  456, (Received from a RR-client)
    36.36.36.6 (metric 2) from 23.23.23.3 (3.3.3.3)
      Origin incomplete, metric 0, localpref 100, valid, internal
      Community: 123:456

3        Configuração

3.1           R1

router ospf 1
 network 12.12.12.1 0.0.0.0 area 0
 network 14.14.14.1 0.0.0.0 area 0
!
router bgp 123
 bgp router-id 1.1.1.1
 redistribute connected route-map set-community_123:1
 neighbor 12.12.12.2 remote-as 123
 neighbor 12.12.12.2 send-community both
 neighbor 12.12.12.2 route-map set-community_123:456 out
 neighbor 14.14.14.4 remote-as 456
 neighbor 14.14.14.4 send-community both
!
!        
ip bgp-community new-format
ip community-list 456 permit 456:*
!
!
ip access-list standard lo0
 permit 1.1.1.1
!
!
route-map set-community_123:1 permit 10
 match ip address lo0
 set community 123:1
!
route-map set-community_123:1 deny 20
!
route-map set-community_123:456 permit 10
 match community 456
 set community 123:456
!
route-map set-community_123:456 permit 20
!

3.2           R2

!
router ospf 1
 network 12.12.12.2 0.0.0.0 area 0
 network 23.23.23.2 0.0.0.0 area 0
!
router bgp 123
 bgp router-id 2.2.2.2
 neighbor 12.12.12.1 remote-as 123
neighbor 23.23.23.2 route-map set-community_123:456 out
 neighbor 36.36.36.6 remote-as 456
 neighbor 36.36.36.6 send-community both
!
!
ip community-list 456 permit 456:.
!
!
ip access-list standard lo0
 permit 3.3.3.3
!
!
route-map set-community_123:3 permit 10
 match ip address lo0
 set community 123:3
!
route-map set-community_123:3 deny 20
!
route-map set-community_123:456 permit 10
 match community 456
 set community 123:456
!
route-map set-community_123:456 permit 20
!
ip bgp-community new-format ! alteracao do formato de community para AA:NN
!

3.3           R3

!
router ospf 1
 network 23.23.23.3 0.0.0.0 area 0
 network 36.36.36.3 0.0.0.0 area 0
!
router bgp 123
 bgp router-id 3.3.3.3
 network 3.3.3.3 mask 255.255.255.255 route-map set-community_123:3
 neighbor 23.23.23.2 remote-as 123
 neighbor 23.23.23.2 send-community both
 neighbor 36.36.36.6 remote-as 456
 neighbor 36.36.36.6 send-community both
!
ip bgp-community new-format ! alteracao do formato de community para AA:NN
!        
!
ip access-list standard lo0
 permit 3.3.3.3
!
!
route-map set-community_123:3 permit 10
 match ip address lo0
 set community 123:3
!

3.4           R4

!
interface FastEthernet0/0
 ip router isis
!        
!
router isis
 net 49.0456.0000.0000.0004.00
 is-type level-2-only
 passive-interface FastEthernet1/0
!
router bgp 456
 bgp router-id 4.4.4.4
 network 4.4.4.4 mask 255.255.255.255 route-map no-export
 neighbor 14.14.14.1 remote-as 123
 neighbor 14.14.14.1 send-community both
 neighbor 14.14.14.1 route-map 123:3_set_LP_400 in
 neighbor 45.45.45.5 remote-as 456
 neighbor 45.45.45.5 send-community both
!
!
ip bgp-community new-format ! alteracao do formato de community para AA:NN
!
ip community-list 3 permit 123:3 ! lista para identificar a community 123:3
!
!
ip access-list standard lo0
 permit 4.4.4.4
!
!
route-map no-export permit 10
 match ip address lo0
 set community no-export
!
route-map 123:3_set_LP_400 permit 10
 match community 3
 set local-preference 400
!
route-map 123:3_set_LP_400 permit 20
!

3.5           R5

!
interface FastEthernet0/0
 ip router isis
!        
interface FastEthernet1/0
 ip router isis
!
router isis
 net 49.0456.0000.0000.0005.00
 is-type level-2-only
!
router bgp 456
 bgp router-id 5.5.5.5
 redistribute connected metric 99999 route-map set-communty_456:5
 neighbor 45.45.45.4 remote-as 456
 neighbor 45.45.45.4 route-reflector-client
 neighbor 45.45.45.4 send-community both
 neighbor 56.56.56.6 remote-as 456
 neighbor 56.56.56.6 route-reflector-client
 neighbor 56.56.56.6 send-community both
!
!
ip bgp-community new-format ! alteracao do formato de community para AA:NN
!
!
ip access-list standard lo0
 permit 5.5.5.5
!
!
route-map set-communty_456:5 permit 10
 match ip address lo0
 set community 456:5
!

3.6           R6

!
interface FastEthernet0/0
 ip router isis
!        
interface FastEthernet1/0
 ip router isis
!
router isis
 net 49.0456.0000.0000.0006.00
 is-type level-2-only
!
router bgp 456
 bgp router-id 6.6.6.6
 network 6.6.6.6 mask 255.255.255.255 route-map no-export
 neighbor 36.36.36.3 remote-as 123
 neighbor 36.36.36.3 send-community both
 neighbor 36.36.36.3 route-map 123:3_set_LP_400 in
 neighbor 56.56.56.5 remote-as 456
 neighbor 56.56.56.5 send-community both
!
!
ip bgp-community new-format ! alteracao do formato de community para AA:NN
!
ip community-list 1 permit 123:1 ! lista para identificar a community 123:1
!
!
ip access-list standard lo0
 permit 6.6.6.6
!
!
route-map no-export permit 10
 match ip address lo0
 set community no-export
!
route-map 123:3_set_LP_400 permit 10
 match community 1
 set local-preference 400
!
route-map 123:3_set_LP_400 permit 20
!

Um comentário:

Eder de Jesus Silva disse...

Muito explicativo e objetivo, parabéns pelo Post!