Enrutamiento entre VNets en Azure
En un post anterior estuvimos tratando el tema de enrutamiento en Azure y aprendimos lo que son las System Routes y las UDR.
Hablando de ese tema un compañero me propuso un escenario donde podemos utilizar las UDR para conseguir el resultado que buscamos. El escenario es el siguiente:
- Tenemos 2 VNETs, VNET1 y VNET2, conectadas mediante VNET Peering.
- En VNET1 tenemos el rango de direcciones 10.0.0.0/16 y hemos creado una subred SUBNET1-1 con el rango 10.0.0.0/24
- En VNET2 tenemos el rango 10.1.0.0/16 y dos subredes, SUBNET2-1 con el rango 10.1.0.0/24 y SUBNET2-2 con el rango 10.1.1.0/24
Aquí están las VNETs:
VNet contiene una subnet, SVNET1-1:
Y VNET2 contiene las subnets SVNET2-1 y SVNET2-2:
Para hacer pruebas tenemos 3 máquinas virtuales, una en cada subnet:
Y el diagrama de red sería algo como:
Al configurar el VNET Peering se establecen rutas del sistema que permiten que las máquinas de cualquiera de las subnets puedan conectar con máquinas de cualquier otra subnet (como siempre, hay que tener en cuenta los firewalls y Network Security Groups que podrían cortar el tráfico), es decir, hay conectividad completa entre todas las subnets de las redes virtuales emparejadas.
Sin embargo, en este escenario tenemos la necesidad de que las máquinas de la subnet SVNET1-1 puedan llegar a las de la subnet SVNET2-1, pero no a las de la subnet SVNET2-2.
La solución podría implementarse con Network Security Groups, pero en este caso vamos a configurar el enrutamiento para conseguir lo que buscamos y veremos que es muy fácil. La idea es bastante simple, mantenemos el enrutamiento por defecto del peering pero creamos en la SVNET1-1 una tabla de enrutamiento con una única ruta que tenga como destino SVNET2-2 (la subred a la que no queremos que llegue el tráfico) y como next hop la propia VNET de origen. De esta forma conseguimos que el tráfico que se origina en SVNET1-1 y que tiene como destino SVNET2-2 no salga de la subred de origen, mientras que el tráfico que va a SVNET2-1 sigue la ruta por defecto.
Empezamos creando la Tabla de Enrutamiento:
Y en esta tabla creamos una única ruta con subred de destino 10.1.1.0/24 y como next hop “Virtual Network” para que el tráfico no salga de la VNet de origen:
Esta tabla de enrutamiento la asociamos con la subred de origen, en este caso SVNET1-1:
Y ya podemos comprobar que desde la máquina que está en la SVNET1-1 (10.0.0.4/24) podemos seguir llegando a SVNET2-1 (10.1.0.4/24), pero no a SVNET2-2 (10.1.1.4/24):