VRF-Leaking: Como acceder a otras VRF
- jogofus
- 29 oct
- 5 Min. de lectura
Hace un tiempo escribí sobre lo que eran las VRF y en qué ámbitos se utilizaban.
Por refrescar un poco, una VRF (en inglés, Virtual Routing and Forwarding) es una instancia de enrutamiento totalmente separada del resto de instancias.
Es decir, tiene su propia tabla de enrutamiento y no se comparte con ninguna otra.
Podríamos decir que se trata de "un router dentro de otro router".
Como conté en aquella entrada, una de las ventajas de las que disponíamos era tener overlap de direcciones IP, segmentación de tal forma que clienteA y clienteB no se verían nunca entre ellos (a no ser que fuéramos nosotros los que indicáramos que sí se vieran, como vamos a hacer hoy en esta entrada).

¿Cómo lo define Huawei?
La tecnología VRF (Virtual Routing and Forwarding) aísla datos o servicios mediante la creación de múltiples tablas de enrutamiento en un único dispositivo de reenvío de Capa 3, y se utiliza comúnmente en VPNs MPLS, Firewalls y otras aplicaciones que requieren aislamiento. VRF, también conocida como Instancia VPN, es una tecnología de virtualización que crea múltiples instancias VPN en un dispositivo físico, cada una con su propia interfaz, tabla de enrutamiento y proceso de protocolo de enrutamiento. Cada VRF puede considerarse como un router virtual, como un dispositivo PE dedicado, que consta de los siguientes elementos: ■ Una tabla de enrutamiento separada y, por supuesto, un espacio de direcciones separado. ■ Un conjunto de interfaces pertenecientes al VRF. ■ Un conjunto de protocolos de enrutamiento utilizados sólo para este VRF. Para cada PE, se pueden mantener uno o más VRFs, junto con una tabla de enrutamiento pública (también llamada tabla de enrutamiento global), con múltiples instancias VRF separadas e independientes entre sí.
Cómo hemos visto, hace referencia a que las VRF también son llamadas instancias VPN. Esto cobrará sentido cuando hablemos de VPNv4.
Caso de uso particular: dos clientes con acceso a mismos servidores
El otro día me puse a pensar en la cantidad de empresas que conectan todos sus clientes a su red para acceder a los servidores, pero no las separan por VRF, lo que puede suponer que un cliente pueda llegar a saltar a una VPN si tenemos algún fallo de configuración.
Y me dije: ¿cómo podríamos segmentarlo aún más, además de las vlan?
Mi idea era que cada cliente tuviera su conexión IPsec con su VRF asociada, pero que pudiera acceder a otra VRF donde están los servidores de propósito general.
Según la definición anterior, esto no debería ser posible, ya que tienen instancias de enrutamiento distintas y no conocen las redes que hay en otras VRF.
Y es aquí donde comienza lo que se llama VRF-Leaking.
Manos a la obra: nuestro laboratorio
En este ejemplo se han configurado 4 VRF distintas, una por cada cliente.

Por simplificar, vamos a hacer que VRF1 y VRF2 puedan verse entre sí, pero no con el resto de VRF.
Así que comenzamos.
En primer lugar configuramos el router CORE y los router ISP para que compartan rutas mediante OSPF. Para ello, primero deberemos asignar cada interfaz (en este caso son físicas, no VPN) a cada VRF. Recordar hacer lo primero esto porque en cuanto se añade a un VRF borra toda configuración que tenga esa interfaz.
CORE:
Creamos las VRF:
enable
configure terminal
vrf definition vrf1
!
vrf definition vrf2
!
vrf definition vrf3
!
vrf definition vrf4
!Asignamos las interfaces a cada VRF y le damos IP:
interface Ethernet0/0
vrf forwarding vrf1
ip address 10.10.10.1 255.255.255.252
duplex auto
!
interface Ethernet0/1
vrf forwarding vrf2
ip address 20.20.20.1 255.255.255.252
duplex auto
!
interface Ethernet0/2
vrf forwarding vrf3
ip address 30.30.30.1 255.255.255.252
duplex auto
!
interface Ethernet0/3
vrf forwarding vrf4
ip address 40.40.40.1 255.255.255.252
duplex auto
!Ya que estamos en CORE, vamos a crear las instancias OSPF para cada una:
router ospf 1 vrf vrf1
network 10.10.10.0 0.0.0.3 area 0
!
router ospf 2 vrf vrf2
network 20.20.20.0 0.0.0.3 area 0
!
router ospf 3 vrf vrf3
network 30.30.30.0 0.0.0.3 area 0
!
router ospf 4 vrf vrf4
network 40.40.40.0 0.0.0.3 area 0
!Bien. Ahora procedemos a crear las redes y OSPF en cada router ISP. Por simplificar, solo lo voy a hacer en uno.
ISP1:
Configuración de interfaces:
interface Ethernet0/0
ip address 10.10.10.2 255.255.255.252
duplex auto
!
interface Ethernet0/1
ip address 192.168.1.1 255.255.255.0
duplex auto
!Configuración de OSPF:
router ospf 1
network 10.10.10.0 0.0.0.3 area 0
network 192.168.1.0 0.0.0.255 area 0
!Si vemos las tablas OSPF tanto en CORE como en ISP, podremos ver que ya se han distribuido por OSPF:

Ahora, para poder redistribuir estas redes de forma interna, necesitaremos de un proceso BGP mediante VPNv4. Se hace igual que con BGP normal, pero al no indicarle el peer y decirle que se trata de VRF, asume que se tratan de VPNv4
CORE:
router bgp 65000
bgp router-id 1.1.1.1
bgp log-neighbor-changes
!
address-family ipv4 vrf vrf1
redistribute connected
redistribute ospf 1
exit-address-family
!
address-family ipv4 vrf vrf2
redistribute connected
redistribute ospf 2
exit-address-family
!Aquí básicamente estamos creando una instancia BGP con ASN 65000 y que para cada vrf1 redistribuya las rutas conectadas y las aprendidas por OSPF, concretamente por los procesos 1 y 2 de OSPF.
Ahora, en cada VRF deberemos etiquetar el tráfico de sálida y el tráfico que va a permitir importar. Es decir, cada VRF va a decir "mi tráfico está etiquetado con la X y voy a permitir solo el tráfico con la etiqueta Y".
CORE:
vrf definition vrf1
rd 1:1
route-target export 1:10
route-target import 2:10
!
address-family ipv4
exit-address-family
!
vrf definition vrf2
rd 2:1
route-target export 2:10
route-target import 1:10
!
address-family ipv4
exit-address-family
!Las direcciones VPNv4 juegan un papel clave en el entorno de las redes MPLS con VRF. Estas direcciones permiten distinguir de manera única las rutas de distintos clientes dentro de una infraestructura compartida. A diferencia de una dirección IPv4 convencional, una VPNv4 incluye un Route Distinguisher (RD) de 8 bytes combinado con una dirección IPv4 de 4 bytes, formando una etiqueta extendida que asegura la separación lógica entre instancias de red.

El RD sirve para diferenciar las rutas de distintos clientes cuando tienen direcciones IP que coinciden. Lo que hace es tomar una dirección IPv4 normal y añadirle este identificador, creando así una dirección VPNv4 única. De esta forma, MPLS puede trabajar con direcciones IP iguales de clientes diferentes sin que haya conflictos.
El proceso es sencillo: cuando una ruta entra en una VRF, su dirección IPv4 se transforma en VPNv4 poniéndole delante el RD que tiene configurado esa VRF. Esto hace posible que las rutas viajen por la red del operador manteniendo separado el tráfico de cada cliente.
Aparte del RD, existe otro elemento llamado Route Target (RT), que también es un atributo de comunidad extendida para VPN MPLS. Los RT se encargan de decidir qué rutas se comparten entre las VRF y la red principal MPLS. Son claves para establecer qué rutas puede ver cada VRF, aunque no forman parte de la dirección VPNv4 como tal.
Ahora sí, podremos comprobar que las rutas han sido aprendidas por BGP y que el cliente 1 llega al cliente 2 y viceversa.








Comentarios