Dentro del mundo del routing, es posible realizar la segmentación del tráfico cuando tenemos diferentes clientes o cuando necesitamos que, por ejemplo, el tráfico de management quede aislado del resto. Esto es posible a lo llamado VRF (Virtual Routing and Forwarding).

Las VRFs son principalmente utilizadas en la MPLS para aislar el tráfico de cada cliente, pero no se encuentra limitada a dicha tecnología. Cuando las VRFs son usadas en una red que no trabaja con MPLS, son llamadas VRF-Lite.

La gracia de usar VRFs, es que se crean contextos de routing (routers virtuales dentro del router físico), donde cada uno de estos posee una tabla de enrutamiento completamente aislada de las demás, permitiendo configurar protocolos de enrutamiento en cada contexto.

La tabla de rutas que no pertenece a una VRF creada por nosotros (la que aparece usando el comando show ip route) es denominada GRT (Global Routing Table).

A continuación, se muestra un ejemplo de cómo se verían las VRFs:

Como se puede observar en la ilustración anterior, las VRFs son routers aislados dentro de un mismo chasis.

Por lo tanto, se puede decir que, las VRFs equivalen a la utilización de VLANs en los switches, donde se segmenta lógicamente el switch, para trabajar en distintos dominios de colisión.

Para la demostración de la configuración de VRFs, se utilizará la siguiente topología:

Donde al momento de configurar las VRF de cada cliente, quedaría lógicamente como se muestra a continuación:

Existen dos formas de configurar VRF-Lite, la primera corresponde a una forma legacy, la cual solo soporta IPv4, y la segunda, la cual es recomendada utilizar, que soporta IPv4 e IPv6.

Lo primero que tenemos que hacer para crear las distintas VRFs, es asignarles un nombre:

Configuración legacy:

R1(config)#ip vrf cliente1
R1(config-vrf)#description CLIENTE1
R1(config-vrf)#ip vrf cliente2
R1(config-vrf)#description CLIENTE2
R1(config-vrf)#ip vrf cliente3
R1(config-vrf)#description CLIENTE3 

En la configuración recomendada, es necesario indicar en que versión de IP se trabajará, con el comando address-family:

R1(config)#vrf definition cliente1
R1(config-vrf)#description CLIENTE1
R1(config-vrf)#address-family ipv4
R1(config-vrf-af)#exit-address-family
R1(config-vrf)#exit
R1(config)#vrf definition cliente2
R1(config-vrf)#description CLIENTE2
R1(config-vrf)#address-family ipv4   
R1(config-vrf-af)#exit-address-family
R1(config-vrf)#exit      
R1(config)#vrf definition cliente3
R1(config-vrf)#description CLIENTE3
R1(config-vrf)#address-family ipv4   
R1(config-vrf-af)#exit-address-family
R1(config-vrf)#exit

Luego de tener creadas las VRFs, se asocian las interfaces que trabajarán en cada una de estas.

Es necesario tener en cuenta, que una interfaz (física o virtual [como las SVI]) solo puede pertenecer a una única VRF.

En esta asociación, si la interfaz posee dirección IP, al momento de ingresar el comando de la VRF, este es automáticamente eliminada:

R1(config)#int f0/0
R1(config-if)#ip add 10.10.10.1 255.255.255.0
R1(config-if)#ip vrf forwarding cliente1
% Interface FastEthernet0/0 IPv4 disabled and address(es) removed due to enabling VRF cliente1
R1(config-if)#do sh ip int br | in 0/0
FastEthernet0/0            unassigned      YES manual up                    up

En el ejemplo anterior, se da una muestra de cómo asociar una interfaz a una VRF con el comando legacy, y a continuación se muestra como se realiza con la versión de configuración recomendada:

R1(config)#int f0/0
R1(config-if)#vrf forwarding cliente1
R1(config-if)#description cliente1-a
R1(config-if)#ip add 192.168.10.1 255.255.255.0
R1(config-if)#int f2/0
R1(config-if)#vrf forwarding cliente1
R1(config-if)#description cliente1-b
R1(config-if)#ip add 192.168.11.1 255.255.255.0
R1(config-if)#int f1/0
R1(config-if)#vrf forwarding cliente2
R1(config-if)#description cliente2-a
R1(config-if)#ip add 192.168.10.1 255.255.255.0
R1(config-if)#int f2/1
R1(config-if)#vrf forwarding cliente2
R1(config-if)#description cliente2-b
R1(config-if)#ip add 192.168.12.1 255.255.255.0
R1(config-if)#int f1/1
R1(config-if)#vrf forwarding cliente3
R1(config-if)#ip add 192.168.30.1 255.255.255.0
R1(config-if)#description cliente3-a
R1(config-if)#int f3/0
R1(config-if)#description cliente3-b
R1(config-if)#vrf forwarding cliente3
R1(config-if)#ip add 192.168.13.1 255.255.255.0

Como se puede observar, las interfaces Fa0/0 y Fa1/0 tienen la misma IP, esto se debe a que al trabajar en contextos distintos de routing, no se produce solapamiento entre las redes de estas interfaces.

R1#sh ip int br
Interface                  IP-Address      OK? Method Status                Protocol
FastEthernet0/0            192.168.10.1    YES manual up                    up      
FastEthernet1/0            192.168.10.1    YES manual up                    up      
FastEthernet1/1            192.168.30.1    YES manual up                    up      
FastEthernet2/0            192.168.11.1    YES manual up                    up      
FastEthernet2/1            192.168.12.1    YES manual up                    up      
FastEthernet3/0            192.168.13.1    YES manual up                    up      
FastEthernet3/1            unassigned      YES unset  administratively down down

Para poder validar las VRFs creadas con las interfaces asignadas a cada una de estas, se pueden usar los comandos show vrf o show ip vrf:

R1#sh vrf 
  Name                             Default RD          Protocols   Interfaces
  cliente1                         <not set>           ipv4        Fa0/0
                                                                   Fa2/0
  cliente2                         <not set>           ipv4        Fa1/0
                                                                   Fa2/1
  cliente3                         <not set>           ipv4        Fa1/1
                                                                   Fa3/0
R1#sh ip vrf 
  Name                             Default RD          Interfaces
  cliente1                         <not set>           Fa0/0
                                                       Fa2/0
  cliente2                         <not set>           Fa1/0
                                                       Fa2/1
  cliente3                         <not set>           Fa1/1
                                                       Fa3/0

Como se tienen las VRFs configuradas, y con interfaces asociadas, al momento de hacer un show ip route, se puede notar que no se muestra ninguna ruta en la tabla, y esto se debe a que en la GRT no se tiene ninguna red asociada, solo en las VRFs creadas:

R1#show 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

R1#

Pero si se hacen shows para ver las tablas de las VRFs, podrán encontrar las rutas configuradas en cada interfaz:

R1#show ip route vrf cliente1

Routing Table: cliente1
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

      192.168.10.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.10.0/24 is directly connected, FastEthernet0/0
L        192.168.10.1/32 is directly connected, FastEthernet0/0
      192.168.11.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.11.0/24 is directly connected, FastEthernet2/0
L        192.168.11.1/32 is directly connected, FastEthernet2/0
R1#show ip route vrf cliente2

Routing Table: cliente2
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

      192.168.10.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.10.0/24 is directly connected, FastEthernet1/0
L        192.168.10.1/32 is directly connected, FastEthernet1/0
      192.168.12.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.12.0/24 is directly connected, FastEthernet2/1
L        192.168.12.1/32 is directly connected, FastEthernet2/1
R1#show ip route vrf cliente3

Routing Table: cliente3
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

      192.168.13.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.13.0/24 is directly connected, FastEthernet3/0
L        192.168.13.1/32 is directly connected, FastEthernet3/0
      192.168.30.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.30.0/24 is directly connected, FastEthernet1/1
L        192.168.30.1/32 is directly connected, FastEthernet1/1
R1#

Como se esta trabajando con diferentes tablas de rutas, no es posible realizar ping o traceroute de la forma “normal”. Al igual que para revisar las tablas de rutas de una VRF específica se utiliza el comando seguido de vrf más el nombre de este, para hacer un ping, también es necesario indicar la VRF en la cual se encuentra la ruta a que queremos llegar:

R1#ping 192.168.11.10 source f0/0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.11.10, timeout is 2 seconds:
Packet sent with a source address of 192.168.10.1 
.....
Success rate is 0 percent (0/5)
R1#ping vrf cliente1 192.168.11.10 source f0/0
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.11.10, timeout is 2 seconds:
Packet sent with a source address of 192.168.10.1 
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 4/6/12 ms
R1#

Por lo tanto, al hacer el ping sin VRF, lo que hace el router es buscar la ruta en la GRT, y por este motivo, no se tiene respuesta, mientras que usando la VRF correcta, si se tiene respuesta.