segunda-feira, 5 de maio de 2014

Fundamentos de VRF na Virtualização de Roteadores

Olá Pessoal.

Esse artigo apresenta os conceitos básicos da tecnologia VRF (Virtual Routing and Forwarding) para fins de virtualização de tabelas de roteamento. De maneira bastante simplista podemos começar pensando da seguinte maneira: assim como VLAN é uma tecnologia para virtualização de switches (layer 2), VRF é uma tecnologia para virtualização de roteadores (layer 3). 

A tecnologia VRF é comumente utilizada por provedores na oferta do serviço VPN/MPLS para conectividade dos seus clientes através de um núcleo comum de equipamentos de grande porte, o que permite o compartilhamento organizado da sua infraestrutura. Com VRF é possível criar diferentes tabelas de roteamento lógicas em um mesmo roteador físico, o que explica a possibilidade de conexão de diversos clientes através de equipamentos compartilhados com garantia de que haverá isolamento total da visualização da topologia da rede e, consequentemente, do tráfego de dados. 

Outra vantagem é que, uma vez que as tabelas de roteamento são logicamente independentes, é possível configurar endereços com sobreposição (overlap) entre o roteador de borda da operadora (PE) e o roteador de borda do cliente (CE), o que é interessante quando os clientes utilizam endereços comuns, algo que ocorre com os endereços privados da RFC 1918 (10/8, 172.16/12 e 192.168/16). 

Para exemplificar o processo de configuração de VRFs estaremos utilizando como base o cenário apresentado abaixo. O PE representa o roteador de borda da operadora que é um equipamento comum a dois clientes, sendo que cada cliente está isolado através de uma VRF lógica que contempla os equipamentos separados nos quadros cinza e verde. Reparem que a rede entre o provedor e os clientes é igual (192.168.0.0/30), o que seria impossível de configurar em situação normal porque o roteador acusaria erro de sobreposição de endereços nas interfaces f0/0 e f1/0.


O processo de configuração do VRF e separação das tabelas de roteamento lógicas é bastante simples nesse exemplo. Basta criar as VRFs e então associar cada interface física (ou sub-interface lógica) com sua respectiva VRF. Ao fazê-lo, o roteador passará a trabalhar com múltiplas tabelas de roteamento distintas, cada uma identificada por seu nome lógico. 

01. PE(config)# ip vrf CINZA
02. PE(config-vrf)# rd 1:1
03. PE(config-vrf)# ip vrf VERDE
04. PE(config-vrf)# rd 2:2
05. PE(config-vrf)# exit
06. PE(config)# int f0/0
07. PE(config-if)# ip vrf forwarding CINZA
08. PE(config-if)# ip address 192.168.0.1 255.255.255.252
09. PE(config-if)# no shut
10. PE(config-if)# int f1/0
11. PE(config-if)# ip vrf forwarding VERDE
12. PE(config-if)# ip address 192.168.0.1 255.255.255.252
13. PE(config-if)# no shut
14. PE(config-if)# int lo1
15. PE(config-if)# ip vrf forwarding CINZA
16. PE(config-if)# ip address 172.30.0.1 255.255.0.0
17. PE(config-if)# int lo2
18. PE(config-if)# ip vrf forwarding VERDE
19. PE(config-if)# ip address 172.20.0.1 255.255.0.0 

Nas linhas de 01 a 04 foram criadas duas VRFs denominadas CINZA e VERDE, sendo que o nome e o valor RD (Route Distinguisher) são válidos localmente. No PE configurei duas interfaces de loopback (linhas de 14 a 19), uma associada com cada cliente. Fazer isso é interessante caso o leitor queira aproveitar o cenário para configurar roteamento entre os roteadores e observar o aprendizado de rotas que ocorre em cada cliente.

O cliente da "VRF CINZA" aprende a rede 172.30.0.0/16, enquanto que o cliente da "VRF VERDE" aprende a rede 172.20.0.0/16, o que confirma que o isolamento lógico está funcionando. Tomando como exemplo o protocolo EIGRP, a configuração dos roteadores CE não muda nada (eles sequer conhecem as VRFs), mas no PE é necessário usar o recurso address-family (AF) para especificar a VRF. O parâmetro "Autonomous-System" deve referenciar o AS do respectivo CE:

PE(config)# router eigrp 65001
PE(config-router)# address-family ipv4 vrf CINZA
PE(config-router)# autonomous-system 1
PE(config-router-af)# network 192.168.0.0
PE(config-router-af)# network 172.30.0.0
PE(config-router-af)# exit
PE(config-router)# address-family ipv4 vrf VERDE
PE(config-router-af)# autonomous-system 2
PE(config-router-af)# network 192.168.0.0
PE(config-router-af)# network 172.20.0.0
PE(config-router-af)# exit

CE1-CINZA(config)# router eigrp 1
CE1-CINZA(config-router)# network 192.168.0.0
CE1-CINZA(config-router)# exit

CE2-VERDE(config)# router eigrp 2
CE2-VERDE(config-router)# network 192.168.0.0
CE2-VERDE(config-router)# exit

Os roteadores CE1-CINZA e CE2-VERDE não precisam de nenhuma configuração adicional, já que eles não têm ciência da existência das VRFs lógicas em PE. No entanto, para o PE é necessário anexar o parâmetro "vrf NOME" nos principais comandos de manipualação e diagnóstico de rotas e hosts, a exemplo dos comandos "ip route" e "ping". As saídas abaixo trazem a alguns comandos básicos:

!--- Visualização da VRF CINZA
PE# show ip vrf CINZA
  Name                             Default RD          Interfaces
  CINZA                            1:1                 Lo1
                                                       Fa0/0
!--- Visualização da VRF VERDE
PE# show ip vrf VERDE
  Name                             Default RD          Interfaces
  VERDE                            2:2                 Lo2
                                                       Fa1/0
!--- Visualização da Tabela de Rotas da VRF CINZA
PE# show ip route vrf CINZA
Routing Table: CINZA
Codes: 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

Gateway of last resort is not set

C    172.30.0.0/16 is directly connected, Loopback1
     192.168.0.0/30 is subnetted, 1 subnets
C       192.168.0.0 is directly connected, FastEthernet0/0

!--- Visualização da Tabela de Rotas da VRF VERDE
PE# show ip route vrf VERDE
Routing Table: VERDE
Codes: 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

Gateway of last resort is not set

C    172.20.0.0/16 is directly connected, Loopback2
     192.168.0.0/30 is subnetted, 1 subnets
C       192.168.0.0 is directly connected, FastEthernet1/0

!--- Exemplo de Uso do Ping na VRF CINZA
PE# ping vrf CINZA 192.168.0.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.0.2, timeout is 2 seconds:
!!!!!

Success rate is 100 percent (5/5), round-trip min/avg/max = 8/8/8 ms

Caso o leitor tenha mais interesse no assunto e queira se aprofundar através de um exemplo realista da aplicação dessa tecnologia em provedores (oferta de VPN/MPLS), sugiro a leitura de outro artigo que escrevi há algum tempo intitulado "Configuração da Nuvem MPLS em Provedores".

Abraço.

Samuel.

6 comentários:

  1. Samuel....Parabéns...muito boa sua explanação.

    ResponderExcluir
  2. Olá Samuel, muito obrigado por compartilhar tal conhecimento, seu blog me servira de muita ajuda para os meus estudos!

    ResponderExcluir
  3. Parabéns cara! Ficou bem claro agora.

    ResponderExcluir
  4. Excelente explicação Samuel.
    Em qual RFC o VRF está padronizada?

    ResponderExcluir