sexta-feira, 4 de junho de 2010

BGP - AS_PATH Filter


1        As-Path Access-List

A lista de acesso baseada em AS-Path é usada para fazer filtro das rotas que serão divulgadas ou aprendidas baseada no AS a que elas pertencem. Esse filtro é bastante utilizado em ISPs que possuem conexão eBGP com clientes e com outros ISPs. Normalmente somente se envia as rotas dos AS dos clientes para um ISP de peering e não as rotas de outro ISP. Esse filtro é feito com AS-path Access-list.
O AS-path Access-list usa expressão regular para descrever um filtro, onde deve ser considerado o as-path do roteador que esta sendo configurado o filtro.
O AS-Path é definido como um caminho do seu AS até o AS a qual a rota pertence da esquerda para a direita, por exemplo, a rota “3.3.3.3/32” possui o AS_PATH “5 2 3 i”, ou seja, o seu AS é o 5 e a rede está localizada no AS 3 que deve ser alcançado através do AS 2. O filtro deve ser baseado nessa informação usando expressão regular.

1.1           Expressão Regular

. define um único character;
^ Define o AS inicial do caminho, geralmente é o seu próprio AS;
$ Define o AS final do caminho, geralmente é o AS ao qual a rota pertence;
\character define um caracter específico;
* Define como nenhum ou vários do mesmo valor. Ex: [12]* = nada, 12, 12 12, 12 12 12
+ Define como 1 vários do mesmo valor. Ex: 45 = 45, 455, 4555
? Define um carcter qualquer dentro do valor. Ex: 1?2 = 12, 123, 143, 153
Outras definições:
_100_ (via AS100)
^100$ (originado no AS 100)
^100 .* (vem do AS 100)
^$ (originado no proprio AS)

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 R2 com R5 e devem ser configurados com roteamento BGP seguindo os criterios abaixo:
·         Cada roteador pertence a um AS seguindo a ordem:
·         R1 pertence ao AS 1 e faz eBGP pela loopback com R2 (AS 2) e R4 (AS 4);
·         R3 pertence ao AS 3 e faz eBGP pela loopback com R2 (AS 2) e R6 (AS 20);
·         R4 pertence ao AS 4 e faz eBGP pela loopback com R1 (AS 1) e R5 (AS 5);
·         R5 pertence ao AS 5 e faz eBGP pela loopback com R4 (AS 4) e R6 (AS 20);
·         R6 pertence ao AS 20 e faz eBGP pela loopback com R5 (AS 5) e R3 (AS 3);
·         O AS 2 somente deverá fazer trânsito para o R5 (AS 5), para os demais ele apenas divulga o seu AS;
·         O R4 e o R6 não deverão fazer trânsito para o R5, somente para os demais;
·         Todas as configurações deverão ser feitas usando AS-PATH Access-list.

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. Nesse cenário não existirá roteamento dinâmico e como a conexão é feita pela loopback, deverão ser configuradas rotas estáticas para as loopbacks.

2.4.1      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 ”.
Para que o roteador BGP não se torne transito para um vizinho é necessário que ele somente divulgue as rotas originadas no próprio AS para esse vizinho. Essa configuração é feita criando um as-path filter com o comando “ip as-path Access-list permit ” onde o termo é uma expressão regular que deve ser “^$” para rotas originadas somente no AS.
Para que um roteador seja transito para um vizinho divulgando somente os AS diretamente conectados a ele, usa-se a expressão regular informando o caminho sendo a origem o AS que pretende-se divulgar, por exemplo: “^4 2$” que quer dizer originado no AS 4 e terminado no AS 2 (local). Essas listas são aplicadas no vizinho dentro das configurações de BGP com o comando “neighbor filter-list ”.

2.5           Observações e Bugs

Observe que a lista de AS-PATH deve ser construída considerando o próprio roteador.
Documentação:

2.6           Comandos Importantes de Verificação

R2#show ip bgp neighbors 25.25.25.5 advertised-routes
BGP table version is 7, 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
*> 1.1.1.1/32       12.12.12.1               0             0 1 i
*> 2.2.2.2/32       0.0.0.0                  0         32768 i
*> 3.3.3.3/32       23.23.23.3               0             0 3 i

BGP table version is 7, local router ID is 5.5.5.5
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
*> 1.1.1.1/32       25.25.25.2                             0 2 1 i
*> 2.2.2.2/32       25.25.25.2               0             0 2 i
*> 3.3.3.3/32       25.25.25.2                             0 2 3 i
*> 4.4.4.4/32       45.45.45.4               0             0 4 i
*> 5.5.5.5/32       0.0.0.0                  0         32768 i
*> 6.6.6.6/32       56.56.56.6               0             0 20 i

R4#sh ip bgp nei 25.25.25.5 advertised-routes
% No such neighbor or address family
R4#sh ip bgp nei 45.45.45.5 advertised-routes
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
*> 4.4.4.4/32       0.0.0.0                  0         32768 i

3        Configuração

3.1           R1

!
router bgp 1
 bgp router-id 1.1.1.1
 neighbor 12.12.12.2 remote-as 2
 neighbor 14.14.14.4 remote-as 4
 !
 address-family ipv4
 neighbor 12.12.12.2 activate
 neighbor 14.14.14.4 activate
network 1.1.1.1 mask 255.255.255.255
!      

3.2           R2

!
router bgp 2
 bgp router-id 2.2.2.2
 neighbor 12.12.12.1 remote-as 1
 neighbor 23.23.23.3 remote-as 3
 neighbor 25.25.25.5 remote-as 5
 !
 address-family ipv4
 neighbor 12.12.12.1 activate
 neighbor 12.12.12.1 filter-list 1 out
 neighbor 23.23.23.3 activate
 neighbor 23.23.23.3 filter-list 1 out
 neighbor 25.25.25.5 activate
 neighbor 25.25.25.5 filter-list 2 out
 network 2.2.2.2 mask 255.255.255.255
 exit-address-family
!
!
ip as-path access-list 1 permit ^$
ip as-path access-list 1 deny _$
ip as-path access-list 2 permit 1$
ip as-path access-list 2 permit _3$
ip as-path access-list 2 permit ^$
!
!      

3.3           R3

!
router bgp 3
 bgp router-id 3.3.3.3
 neighbor 23.23.23.2 remote-as 2
 neighbor 36.36.36.6 remote-as 20
 !
 address-family ipv4
 neighbor 23.23.23.2 activate
 neighbor 36.36.36.6 activate
 network 3.3.3.3 mask 255.255.255.255
 exit-address-family
!      

3.4           R4

!
router bgp 4
 bgp router-id 4.4.4.4
 neighbor 14.14.14.1 remote-as 1
 neighbor 45.45.45.5 remote-as 5
 !
 address-family ipv4
 neighbor 14.14.14.1 activate
 neighbor 45.45.45.5 activate
 neighbor 45.45.45.5 filter-list 1 out
 network 4.4.4.4 mask 255.255.255.255
 exit-address-family
!
!
ip as-path access-list 1 permit ^$
ip as-path access-list 1 deny _$
!      

3.5           R5

!
router bgp 5
 bgp router-id 5.5.5.5
 neighbor 25.25.25.2 remote-as 2
 neighbor 45.45.45.4 remote-as 4
 neighbor 56.56.56.6 remote-as 20
 !
 address-family ipv4
 neighbor 25.25.25.2 activate
 neighbor 45.45.45.4 activate
 neighbor 56.56.56.6 activate
 network 5.5.5.5 mask 255.255.255.255
 exit-address-family
!      

3.6           R6

!
router bgp 20
 bgp router-id 6.6.6.6
 neighbor 36.36.36.3 remote-as 3
 neighbor 56.56.56.5 remote-as 5
 !
 address-family ipv4
 neighbor 36.36.36.3 activate
 neighbor 56.56.56.5 activate
 neighbor 56.56.56.5 filter-list 1 out
 network 6.6.6.6 mask 255.255.255.255
 exit-address-family
!
ip classless
no ip http server
!
ip as-path access-list 1 permit ^$
ip as-path access-list 1 deny _$
!    

Nenhum comentário: