top of page

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).

ree

¿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.

ree

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:

ree

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.

ree

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.

ree

ree

ree

 
 
 

Comentarios


bottom of page