segunda-feira, 18 de outubro de 2010

VPN - BGP Site of Origin SoO


1        Funcionalidade BGP Site of Origin

Site of Origin (SoO) é um dos atributos em que o roteador PE marca rotas que são redistribuidas para dentro da vpn no backbone. O SoO no BGP é configurado por vizinho e é usado para previnir loops de redes em situações que existe um backdoor dentro da VPN entre 2 CEs. O SoO identifica de forma única o site em que o PE aprendeu determinada rota. Todos os prefixos aprendidos por um determinado site deve ser marcado com o mesmo atributo SoO.
O SoO também é usado caso o provedor de VPN utilize o mesmo AS privado para divulgar rotas com os roteadores CEs. Se não for identificada a origem da rota, o site remoto não aceita a rota devido ao AS_PATH, pois ele irá identificar que aquela rota veio do mesmo AS que o CE pertence.


2        Cenário

2.1           Objetivo

Seis roteadores (CE3, PE3, CE1, PE1, CE2 e PE2) são conectados formando o seguinte cenário:
         O protocolo de roteamento do backbone (PE1, PE2 e PE3) deverá ser o OSPF na área 0 com todas as interfaces divulgadas e com mBGP e LDP full-mesh entre os PEs no AS 1 para tráfego das vpns VRFs;
         Todos os roteadores CEs devem fazer parte da VRF VPN_A usando o BGP no AS 65001 como protocolo de distribuição de rotas dentro da VPN;
         As loopbacks dos CEs devem ser divulgadas no BGP e alcançadas por todos os CEs.

2.2           Topologia

Figure-01:              Topologia

2.3           IOS utilizados

         R1-CE, R2-CE, R3-PE, R4-PE, R5-CE e R6-CE – c7200-k91p-mz.122-25.S15.bin

2.4           Configuração dos Roteadores

2.4.1      Configurações do OSPF do Backbone

Em todos os roteadores configura-se o roteamento OSPF pelo comando “router ospf ” onde o “processo” é um numero do processo OSPF. O roteador também possui um router ID único que geralmente é a interface loopback ou então o maior endereço IP do roteador.
Para adicionar interfaces deve-se usar o comando “network
área ”. Um roteador pode ter interfaces em áreas distintas, define-se cada área pelo comando network.
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”.

2.4.2      Configurações do MPLS

Antes de qualquer configuração, o Cisco Express forwarding deve ser habilitado com o comando “ip cef”. Para habilitar o MPLS no modo LDP, usa-se o comando global “mpls label protocol ldp”.
Para habilitar o MPLS nas interfaces, configura-se “mpls ip”.

2.4.3      Configuração do MBGP

Para estabelecer uma VPN é necessário configurar o MBGP para a troca de informações de prefixos de VPN. Pode-se somente configurar o MBGP nos roteadores PEs da rede que possuem conexão com os CEs, ou seja, conectados diretamente aos sites.
O MBGP funciona como o BGP, configura-se em todos os roteadores pelo comando “router bgp onde o “AS” é o Autonomous System do backbone. Dentro da configuração de BGP adicionam-se os vizinhos estaticamente com o comando “neighbor remote-as .
Adiciona-se o IP da interface loopback como Router-ID pelo comando “bgp router-id .
Como os roteadores dentro do mesmo AS não divulgarão as rotas IBGP entre eles, faz-se o full-mesh de conexão MBGP ou configuram-se os roteadores centrais como Router-reflectors adicionando os demais roteadores como clientes pelo comando “neighbor router-reflector-client”.
O MBGP é configurado dentro do protocolo BGP, porém deve-se separar a família de roteamento com o comando “address-family vpnv4”. Para o envio de prefixos das VPNs, deve-se habilitar o envio de community extendida com o comando “neighbor send-community extended”.
Todos os recursos como route-map, next-hop-self, router-reflector, etc. podem ser configurados dentro da família VPNv4 para manipular ou resolver problemas de roteamento.

2.4.4      Criando uma VPN VRF no BGP

Após todos os roteadores PEs da rede possuem conectividade MBGP, ou diretamente ou por router-reflector, cria-se a VPN com o comando “ip vrf ”, dentro desse comando ficam os parâmentros de marcação da VPN e das communities associadas aos prefixos daquela VPN. Configura-se o Route-Distinguisher da VPN, que deve ser único na rede, com comando “rd :”, e também cria-se a  community que será exportada para aqueles prefixos de rede com o comando “route-target :”, onde “import” significa importar as rotas e “export” exportar as rotas.
Cria-se então uma address-family dentro do BGP com o comando “address-family ipv4 vrf ” com o mesmo nome da VPN criada no “ip vrf” fora do roteamento BGP. Dentro dessa address-family são configuradas as redes que serão redistribuídas para os outros sites. Para divulgar as redes é necessário que a rede exista na tabela de roteamento interna e, ou adicionar o comando “network mask ou redistribuindo rotas para o MBGP com o comando “redistribute , que pode ser vinculado à um route-map para definir exatamente as rotas que serão divulgadas de um protocolo para outros sites.
Enfim, para que uma interface conectada ao CE faça parte da VPN BGP, usa-se o comando “ip vrf forwarding ” dentro da interface.

2.4.5      Configurando o Site of Origin

Para marcar as rotas originadas em um determinado site, utiliza-se de um route-map onde a utilização do Site of Origin é feita com o comando “set extcommunity soo :”. Esse route-map é aplicado na entrada da vizinhança BGP com o CE.
Para marcar communities expecíficas deve-se utilizar extended community list. Essa marcação pode ser feita para que seja tomada uma ação para uma determinada rota marcada com um determinado SoO.

2.5           Observações e Bugs

Documentação:

2.6           Comandos Importantes de Verificação

PE1#sh ip bgp vpnv4 vrf VPN_A 172.16.20.0
BGP routing table entry for 1:1:172.16.20.0/24, version 11
Paths: (1 available, best #1, table VPN_A)
  Advertised to update-groups:
     1        
  65001
    10.10.10.102 (metric 2) from 10.10.10.102 (10.10.10.102)
      Origin IGP, metric 0, localpref 100, valid, internal, best
      Extended Community: SoO:2:65001 RT:1:1,
      mpls labels in/out nolabel/20

PE1#sh ip bgp vpnv4 vrf VPN_A 172.16.10.0
BGP routing table entry for 1:1:172.16.10.0/24, version 3
Paths: (1 available, best #1, table VPN_A)
  Advertised to update-groups:
     2        
  65001
    172.16.1.2 from 172.16.1.2 (172.16.10.1)
      Origin IGP, metric 0, localpref 100, valid, external, best
      Extended Community: SoO:1:65001 RT:1:1,
      mpls labels in/out 19/nolabel

3        Configuração


3.1           CE1

!
interface Loopback0
 ip address 172.16.10.1 255.255.255.0
!        
interface Serial3/0
 ip address 172.16.1.2 255.255.255.0
!
router bgp 65001
 network 172.16.10.0 mask 255.255.255.0
 neighbor 172.16.1.1 remote-as 1
!

3.2           PE1

ip cef
!
ip vrf VPN_A
 rd 1:1
 route-target export 1:1
 route-target import 1:1
!
mpls label protocol ldp
!
!
interface Loopback0
 ip address 10.10.10.101 255.255.255.255
!        
interface FastEthernet1/0
 ip address 12.12.12.1 255.255.255.0
 mpls ip
!
interface FastEthernet2/0
 ip address 13.13.13.1 255.255.255.0
 mpls ip
!
interface Serial3/0
 ip vrf forwarding VPN_A
 ip address 172.16.1.1 255.255.255.0
!
router ospf 1
 router-id 10.10.10.101
 network 10.10.10.101 0.0.0.0 area 0
 network 12.12.12.1 0.0.0.0 area 0
 network 13.13.13.1 0.0.0.0 area 0
!
router bgp 1
 bgp router-id 10.10.10.101
 neighbor 10.10.10.102 remote-as 1
 neighbor 10.10.10.102 update-source Loopback0
 neighbor 10.10.10.103 remote-as 1
 neighbor 10.10.10.103 update-source Loopback0
 !
 address-family vpnv4
 neighbor 10.10.10.102 activate
 neighbor 10.10.10.102 send-community extended
 neighbor 10.10.10.103 activate
 neighbor 10.10.10.103 send-community extended
!
 address-family ipv4 vrf VPN_A
 neighbor 172.16.1.2 remote-as 65001
 neighbor 172.16.1.2 activate
 neighbor 172.16.1.2 as-override
 neighbor 172.16.1.2 route-map SOO in
!
route-map SOO permit 10
 set extcommunity soo 1:65001
!

3.3           CE2

!
interface Loopback0
 ip address 172.16.20.1 255.255.255.0
 no ip directed-broadcast
!
interface Serial3/0
 ip address 172.16.2.2 255.255.255.0
!
router bgp 65001
 network 172.16.20.0 mask 255.255.255.0
 neighbor 172.16.2.1 remote-as 1
!

3.4           PE2

!
ip cef
!
ip vrf VPN_A
 rd 1:1
 route-target export 1:1
 route-target import 1:1
!
mpls label protocol ldp
!
!
interface Loopback0
 ip address 10.10.10.102 255.255.255.255
!        
interface FastEthernet1/0
 ip address 12.12.12.2 255.255.255.0
 mpls ip
!
interface FastEthernet2/0
 ip address 23.23.23.2 255.255.255.0
 mpls ip
!
interface Serial3/0
 ip vrf forwarding VPN_A
 ip address 172.16.2.1 255.255.255.0
!
router ospf 1
 router-id 10.10.10.102
 network 10.10.10.102 0.0.0.0 area 0
 network 12.12.12.2 0.0.0.0 area 0
 network 23.23.23.2 0.0.0.0 area 0
!
router bgp 1
 bgp router-id 10.10.10.102
 neighbor 10.10.10.101 remote-as 1
 neighbor 10.10.10.101 update-source Loopback0
 neighbor 10.10.10.103 remote-as 1
 neighbor 10.10.10.103 update-source Loopback0
 !
 address-family ipv4
 neighbor 10.10.10.101 activate
 neighbor 10.10.10.103 activate
!
 address-family vpnv4
 neighbor 10.10.10.101 activate
 neighbor 10.10.10.101 send-community extended
 neighbor 10.10.10.103 activate
 neighbor 10.10.10.103 send-community extended
 exit-address-family
 !
 address-family ipv4 vrf VPN_A
 neighbor 172.16.2.2 remote-as 65001
 neighbor 172.16.2.2 activate
 neighbor 172.16.2.2 as-override
 neighbor 172.16.2.2 route-map SOO in
!
!
route-map SOO permit 10
 set extcommunity soo 2:65001
!

3.5           CE3

!
interface Loopback0
 ip address 172.16.30.1 255.255.255.0
!
interface Serial3/0
 ip address 172.16.3.2 255.255.255.0
!
router bgp 65001
 network 172.16.30.0 mask 255.255.255.0
 neighbor 172.16.3.1 remote-as 1
!

3.6           PE3

!
ip cef
!
ip vrf VPN_A
 rd 1:1
 route-target export 1:1
 route-target import 1:1
!
mpls label protocol ldp
!
!
!
interface Loopback0
 ip address 10.10.10.103 255.255.255.255
!        
interface FastEthernet1/0
 ip address 13.13.13.3 255.255.255.0
 mpls ip
!
interface FastEthernet2/0
 ip address 23.23.23.3 255.255.255.0
 mpls ip
!
interface Serial3/0
 ip vrf forwarding VPN_A
 ip address 172.16.3.1 255.255.255.0
!
router ospf 1
 router-id 10.10.10.103
 network 10.10.10.103 0.0.0.0 area 0
 network 13.13.13.3 0.0.0.0 area 0
 network 23.23.23.3 0.0.0.0 area 0
!
router bgp 1
 bgp router-id 10.10.10.103
 neighbor 10.10.10.101 remote-as 1
 neighbor 10.10.10.101 update-source Loopback0
 neighbor 10.10.10.102 remote-as 1
 neighbor 10.10.10.102 update-source Loopback0
 !
 address-family ipv4
 neighbor 10.10.10.101 activate
 neighbor 10.10.10.102 activate
!
 address-family vpnv4
 neighbor 10.10.10.101 activate
 neighbor 10.10.10.101 send-community extended
 neighbor 10.10.10.102 activate
 neighbor 10.10.10.102 send-community extended
!
 address-family ipv4 vrf VPN_A
 neighbor 172.16.3.2 remote-as 65001
 neighbor 172.16.3.2 activate
 neighbor 172.16.3.2 as-override
 neighbor 172.16.3.2 route-map SOO in
!
route-map SOO permit 10
 set extcommunity soo 3:65001
!