Azurebrains

Enrutamiento en Azure

En Azure se utilizan Rutas para dirigir el tráfico de red entre máquinas virtuales, entre redes virtuales y redes on-premises y también hacia Internet.

Podemos distinguir dos tipos de rutas en Azure:

En Azure tenemos un tercer tipo de rutas, las rutas BGP, pero de ellas hablaremos en otro post.

Cualquier ruta está compuesta por un prefijo de dirección y un tipo de próximo salto. Por ejemplo, aquí tenemos 2 rutas:

Prefijo de Dirección Tipo de Próximo Salto (Next-Hop)
10.0.0.0/24 Red Virtual
10.0.0.0/16 10.0.0.100

Para la selección de una ruta, Azure siempre utiliza el prefijo de máxima coincidencia. En este ejemplo, si llega un paquete que va dirigido a la IP 10.0.0.17, utilizará la primera ruta (10.0.0.0/24) porque coinciden 24 bits con la IP de destino y el paquete se enviará a la propia red virtual.

En cambio, si llega un paquete dirigido a la IP 10.0.10.14, se utilizará la segunda ruta porque no está incluida esta dirección de destino en 10.0.0.0/24. Esto implica que el paquete se enviará a la IP 10.0.0.100 donde probablemente tengamos un Gateway, un IDS u otro appliance que se encargará de procesarlo.

Las rutas UDR tienen prioridad sobre las rutas BGP, y éstas tienen prioridad sobre las rutas del sistema. Esto significa que si en la tabla de enrutamiento tenemos varias rutas para llegar a un mismo destino y tienen todas la misma longitud de prefijo, Azure aplicará el siguiente orden de prioridades:

  1. UDR
  2. BGP
  3. System Route

Como hemos dicho antes, Azure crea rutas de sistema por defecto y las aplica a las subnets a las que están conectadas nuestras máquinas virtuales. No las podemos modificar, eliminar o crear otras nuevas, pero sí que podemos ver cuáles son estas rutas que se crean por defecto. Para esto, un método es ir desde el portal de Azure a la tarjeta de red para la que queremos ver la tabla de enrutamiento. Supongamos que tenemos una máquina virtual llamada VM1 y vemos los recursos que están creados en nuestra suscripción:

En la imagen hemos marcado la máquina virtual y la interfaz de red que tiene asociada. Si pulsamos en esa interfaz:

Vemos que nos aparece un enlace que dice “Rutas eficaces”, aunque realmente debería haberse traducido como rutas efectivas. Si pulsamos en este enlace podemos ver la tabla de enrutamiento asociada.

En esta tabla sólo hay rutas creadas por defecto (System Routes) y nos aparece una ruta para la red de la subnet (10.0.0.0/24), otra para la salida a Internet de las máquinas virtuales (0.0.0.0/0) y cuatro rutas que no tienen “Próximo Salto” y corresponden con los rangos de IPs reservadas 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 y 100.64.0.0/10 (este es el rango reservado para Carrier Grade NAT). Cualquier paquete que vaya dirigido a una de estas cuatro rutas será descartado.

La primera ruta que aparece en la tabla (10.0.0.0/24 -> Red Virtual) ha sido creada por Azure para habilitar el enrutamiento entre las subredes que pertenecen a una misma VNet. En este caso, no es necesario definir las puertas de enlace para enrutar tráfico entre subredes de una misma VNet. Azure creará una ruta como esta para cada rango definido en las subredes.

También podemos usar PowerShell para ver estas rutas efectivas. Para esto sólo necesitamos un par de comandos. El primero nos permite obtener el nombre de la interfaz de red sobre la que vamos a consultar la tabla de enrutamiento:

En el ejemplo vemos que la interfaz se llama vm1256 y se encuentra en un grupo de recursos llamado RG1. Con estos datos ya podemos obtener la tabla de enrutamiento:

O de una forma más compacta con:

Si necesitamos modificar estas rutas, podemos hacerlo mediante una UDR (User Defined Route). Pongamos el escenario en el que queremos que las máquinas virtuales salgan a Internet pasando por una appliance IDS en lugar de salir de forma directa. Supongamos que esta appliance la tenemos en la IP 10.0.0.111:

  1. El primer paso es crear una tabla de enrutamiento. Desde la casilla de búsqueda en al portal de Azure buscamos “tablas”:

2. Nos aparecerá el icono de “Tablas de rutas” y pulsamos en él:

3. No tenemos ninguna tabla de rutas creada y pulsamos en “Agregar”. Le damos un nombre a la tabla y un grupo de recursos:

4. Una vez creada la tabla, pulsamos en ella:

5. Y ya podemos crear una ruta pulsando en “Rutas”:

6. Agregamos una ruta:

7. Ya está creada la ruta y sólo nos queda asociar la tabla con una subred, para lo que pulsamos en “Subredes”:

8. Indicando la red y la subred con la que queremos asociar la tabla de enrutamiento ya tendremos lista la asociación de la tabla:

Si ahora volvemos a comprobar la tabla de enrutamiento asociada a la interfaz de red de nuestra máquina:

Vemos que ya aparece la nueva ruta que hemos creado.