terça-feira, 20 de outubro de 2015

L3 MPLS VPN com OSPF


Bom pessoal, vou demonstrar aqui como criar uma topologia básica em cima de MPLS, BGP e OSPF emulando via GNS3, para começar vamos com um pouco de conceito sobre o que é MPLS e como ele trabalha.

MPLS ou Multi Protocol Label Switching é um protocolo de comutação de pacotes via label (rótulo) criado para viabilizar/melhorar as redes ATMs que na época demandavam muito dos roteadores no processo de montagem e remontagem dos pacotes, na verdade o MPLS se utiliza do rótulo (4bytes) para identificar uma FEC-Fowarding Equivalent Class (grupo de pacotes IPs enviados com o mesmo padrão, destino ou priorização) algo semelhante ao que o Frame-relay faz com os DLCIs, pensando assim, com a utilização do MPLS o roteador/switch não precisa mais ler o cabeçalho IP inteiro para encaminhar o pacote, basta ler o label e encaminhar para o label destino (utiliza algumas tabelas para encaminhar o pacote como a LIB-Label Information Base, FIB-Forwarding Information Base e a LFIB-Label Forwarding Information Base) tornando a comunicação muito mais rápida e utilizando menos recursos.



Após essa breve explicação, já podemos começar a brincar com o protocolo, como pode ser visto na topologia criada, configurei algumas redes para servir como backbone (10.10.10.0/24,10.10.20.0/24, 192.168.0.0/24 e 192.168.10.0/24) e as redes 128.1.0.0/16 e 10.6.1.0/24 como redes de cada localidade.

Além disso configurei a loopback 0 de cada roteador com o seu respectivo número (R1 = 1.1.1.1/24, R2 = 2.2.2.2/24 etc);

Vamos as configurações do backbone:

Primeiro habilite o CEF (Cisco Express Fowarding) e o protocolo MPLS nos roteadores com o comando:

R1 (config)#ip cef
R1 (config)#mpls label protocol ldp

Aproveite e habilite as interfaces para trafegar mpls também:

R1(config-if)#mpls ip

Outro ponto importante no nosso lab é a escolha do protocolo de roteamento interno (escolhi o OSPF) mas pode ser feito com qualquer um contanto que os nós tenham conectividade (cuidado com o split-horizon dos protocolos de distance vector).

R1 (config)#router ospf 1
R1 (config-router)# network 0.0.0.0 255.255.255.255 area 0

Obs. coloquei a rede 0.0.0.0 com mascara cheia para que todas as interfaces sejam divulgadas no OSPF interno (inclusive a loopback).

Para verificar se o trafego MPLS já está rodando entre os roteadores, utilize:

R1#sh mpls forwarding-table (verifica a tabela de encaminhamento de label)
R1#sh mpls ldp bindings (verifica o label em cada salto)
R1#sh mpls interfaces
R1#sh mpls ldp neighbor (verifica as conexão ldp com o seu neighbor)

Agora precisamos falar um pouco de VRF (Virtual Routing and Forwarding) que nada mais é que a virtualização da tabela de roteamento (permite diversas instâncias sem gerar overlaping) ou seja, permite que uma mesma rede possa estar em 2 ou mais tabelas de roteamento diferentes (a grosso modo), segue o exemplo que fiz de um provedor com 4 clientes:



O provedor tem 4 tabelas de roteamento para a mesma rede, porém envia dados baseado na VRF.

Bom nesse lab que estamos criando, vou utilizar a VRF de nome diego e o AS (autonomous system) 100.

Nos roteadores R1 e R4 (os 2 nas bordas) configure:

R1(config)#ip vrf diego 
R1(config-vrf)#rd 1:100
R1(config-vrf)#route-target export 1:100
R1(config-vrf)#route-target import 1:100

O rd é o route distinguisher (é localmente significante, formato de ASN:nn ou IP:nn + Target VPN)

O route-target é o que permite a rota ser importada ou exportada para outras VRFs e os comandos import e export são mais utilizados em VRFs compartilhadas (um pouco mais avançado), podem ser substituidos por:

R1(config-vrf)#route-target both 1:100

Repita o processo no R4:

R4(config)#ip vrf diego 
R4(config-vrf)#rd 1:100
R4(config-vrf)#route-target export 1:100
R4(config-vrf)#route-target import 1:100

Para verificar se as configurações estão corretas, utilize os comandos:

R4#sh ip vrf diego
R4#sh ip vrf brief
R4#sh ip vrf detail
R4#sh ip vrf interfaces


Agora vamos configurar o BGP entre as duas pontas, não vou explicar muito como funciona o BGP (Border Gateway Protocol)  pois o post ficaria muito extenso apenas que ele é um protocolo de vetor de path (caminho) e que faz toda a comunicação da internet possível e é muito utilizado nos provedores e algumas empresas ASNs, para mais informações procurem no próprio blog alguns materiais.

No nosso lab vou utlizar o iBGP de AS número 100: 

R1 
R1(config)# router bgp 100 (habilitei o protocolo com o AS 100)
R1(config-router)# neighbor 4.4.4.4 remote-as 100  (habilitei a vizinhança com o AS100 em iBGP atraves do ip 4.4.4.4)
R1(config-router)# neighbor 4.4.4.4 update-source Loopback1 (faz com que a loopback seja utilizada para troca de updates) 
 !
 R1(config-router)# address-family vpnv4 (comandos para ativar o address-family da VPN)
 R1(config-router)# neighbor 4.4.4.4 activate 
 R1(config-router)# neighbor 4.4.4.4 send-community both
 R1(config-router)# exit-address-family
 !
 R1(config-router)# address-family ipv4 vrf diego (redistribuição das rotas)
 R1(config-router)#redistribute connected
 R1(config-router)# redistribute ospf 100 vrf diego
 R1(config-router)# exit-address-family
!
R1(config)# router ospf 100 vrf diego (configurações do OSPF na VRF, obs. nem todos são necessárias)
R1(config-router)# redistribute bgp 100 subnets
R1(config-router)# network 10.6.1.0 0.0.0.255 area 0
R1(config-router)# network 128.1.0.0 0.0.255.255 area 0

R4
!
R4(config)#router bgp 100
R4(config-router)# neighbor 1.1.1.1 remote-as 100 
R4(config-router)# neighbor 1.1.1.1 update-source Loopback0 
 !
R4(config-router)# address-family vpnv4
R4(config-router)#  neighbor 1.1.1.1 activate
R4(config-router)#  neighbor 1.1.1.1 send-community both
R4(config-router)# exit-address-family
 !
R4(config-router)# address-family ipv4 vrf diego
R4(config-router)#  redistribute connected 
R4(config-router)#  redistribute ospf 100 vrf diego
R4(config-router)# exit-address-family
 !
R4(config-router)# router ospf 100 vrf diego
R4(config-router)# redistribute bgp 100 subnets
R4(config-router)# network 10.6.1.0 0.0.0.255 area 0
R4(config-router)# network 128.1.0.0 0.0.255.255 area 0

Agora basta configurar o ospf entre os Switches :

IOU2#router ospf 100
IOU2(config-router)# network 128.1.0.0 0.0.255.255 area 0

IOU1#router ospf 100
IOU1(config-router)# network 128.1.0.0 0.0.255.255 area 0

O que achei estranho e não sei se foi por motivo de estar no IOU ou no GNS é que não consigo enxergar diretamente as redes que estão conectadas aos PEs (128.1.0.0 e 10.6.1.0), porém para verificar que o OSPF está rolando, criei uma interface loopback e uma segunda interface de rede em ambos os lados, e propaguei via OSPF para o meu vizinho (neighbor):

IOU2#interface Loopback0
IOU2(config-if)# ip address 128.10.0.100 255.255.0.0

IOU2#interface Ethernet0/1
IOU2(config-if)#no switchport
IOU2(config-if)#ip address 10.10.150.1 255.255.255.0

IOU2(config)#router ospf 100
IOU2(config-router)# network 10.10.150.0 0.0.0.255 area 0
IOU2(config-router)#network 128.10.0.0 0.0.255.255 area 0

Basta verificar se a rota esta na tabela de roteamento da outra ponta:

IOU1#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       + - replicated route, % - next hop override

Gateway of last resort is not set

      10.0.0.0/8 is variably subnetted, 3 subnets, 2 masks
C        10.6.1.0/24 is directly connected, Ethernet0/0
L        10.6.1.3/32 is directly connected, Ethernet0/0
O IA     10.10.150.0/24 [110/21] via 10.6.1.1, 01:06:53, Ethernet0/0
      128.1.0.0/16 is variably subnetted, 2 subnets, 2 masks
C        128.1.0.0/16 is directly connected, Loopback0
L        128.1.0.100/32 is directly connected, Loopback0
      128.10.0.0/32 is subnetted, 1 subnets
O IA     128.10.0.100 [110/12] via 10.6.1.1, 00:55:28, Ethernet0/0

Bom pessoal, não sei se ficou muito clara as explicações e nem as configurações, porém essas configurações são bem complexas e exigem um conhecimento prévio (BGP, MPLS e OSPF ao menos), então antes de tentar realizar esse lab, estude bem os protocolos acima, segue os materiais que foram usados como base:




Abraços

Nenhum comentário:

Postar um comentário