Enrutamiento del tráfico de red con una tabla de rutas mediante la CLI de Azure
De forma predeterminada, Azure enruta automáticamente el tráfico entre todas las subredes de una red virtual. Sin embargo, puede crear sus propias rutas para invalidar las predeterminadas de Azure. La posibilidad de crear rutas personalizadas resulta de utilidad si, por ejemplo, quiere enrutar el tráfico entre subredes por medio de una aplicación virtual de red (NVA). En este artículo aprenderá a:
- Creación de una tabla de rutas
- Creación de una ruta
- Creación de una red virtual con varias subredes
- Asociación de una tabla de rutas a una subred
- Crear una aplicación virtual de red básica que enruta el tráfico desde una máquina virtual de Ubuntu
- Implementación de máquinas virtuales (VM) en subredes diferentes
- Enrutamiento del tráfico desde una subred a otra a través de una aplicación virtual de red
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Requisitos previos
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Inicio rápido para Bash en Azure Cloud Shell.
Si prefiere ejecutar comandos de referencia de la CLI localmente, instale la CLI de Azure. Si utiliza Windows o macOS, considere la posibilidad de ejecutar la CLI de Azure en un contenedor Docker. Para más información, vea Ejecución de la CLI de Azure en un contenedor de Docker.
Si usa una instalación local, inicie sesión en la CLI de Azure mediante el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Inicio de sesión con la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para más información sobre las extensiones, consulte Uso de extensiones con la CLI de Azure.
Ejecute az version para buscar cuál es la versión y las bibliotecas dependientes que están instaladas. Para realizar la actualización a la versión más reciente, ejecute az upgrade.
- En este artículo se necesita la versión 2.0.28 o posterior de la CLI de Azure. Si usa Azure Cloud Shell, ya está instalada la versión más reciente.
Creación de una tabla de rutas
Antes de poder crear una tabla de rutas, debe crear un grupo de recursos con az group create para todos los recursos creados en este artículo.
# Create a resource group.
az group create \
--name test-rg \
--location westus2
Cree una tabla de rutas con az network route-table create. En el siguiente ejemplo se crea una tabla de rutas denominada route-table-public.
# Create a route table
az network route-table create \
--resource-group test-rg \
--name route-table-public
Creación de una ruta
Cree una ruta en la tabla de rutas con az network route-table route create.
az network route-table route create \
--name to-private-subnet \
--resource-group test-rg \
--route-table-name route-table-public \
--address-prefix 10.0.1.0/24 \
--next-hop-type VirtualAppliance \
--next-hop-ip-address 10.0.2.4
Asociación de una tabla de rutas a una subred
Para poder asociar una tabla de rutas a una subred, debe crear una red virtual y una subred. Cree una red virtual con una subred con az network vnet create.
az network vnet create \
--name vnet-1 \
--resource-group test-rg \
--address-prefix 10.0.0.0/16 \
--subnet-name subnet-public \
--subnet-prefix 10.0.0.0/24
Cree dos subredes más con az network vnet subnet create.
# Create a private subnet.
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-private \
--address-prefix 10.0.1.0/24
# Create a DMZ subnet.
az network vnet subnet create \
--vnet-name vnet-1 \
--resource-group test-rg \
--name subnet-dmz \
--address-prefix 10.0.2.0/24
Asocie la tabla de rutas route-table-subnet-public a la subred subnet-public con az network vnet subnet update.
az network vnet subnet update \
--vnet-name vnet-1 \
--name subnet-public \
--resource-group test-rg \
--route-table route-table-public
Creación de una aplicación virtual de red
Una aplicación virtual de red es una máquina virtual que realiza una función de red, como el enrutamiento, el firewall o la optimización de la WAN. Creamos una NVA básica a partir de una máquina virtual de Ubuntu de uso general, con fines de demostración.
Cree una máquina virtual que se usará como NVA en la subred subnet-dmz con az vm create. Cuando se crea una máquina virtual, Azure crea y asigna una interfaz de red vm-nvaVMNic y una dirección IP pública de subred a la máquina virtual de forma predeterminada. El parámetro --public-ip-address ""
indica a Azure que no cree ni asigne una dirección IP pública de subred a la máquina virtual, dado que no es necesario que esta esté conectada a Internet.
En el ejemplo siguiente se crea una máquina virtual y se agrega una cuenta de usuario. El parámetro --generate-ssh-keys
hace que la CLI busque una clave SSH disponible en ~/.ssh
. Si encuentra una, se usa esa clave. Si no es así, se genera y se almacena en ~/.ssh
. Por último, implementamos la imagen más reciente Ubuntu 22.04
.
az vm create \
--resource-group test-rg \
--name vm-nva \
--image Ubuntu2204 \
--public-ip-address "" \
--subnet subnet-dmz \
--vnet-name vnet-1 \
--generate-ssh-keys
La máquina virtual tarda en crearse unos minutos. No continúe con el paso siguiente hasta que Azure termine de crear la máquina virtual y devuelva información sobre ella.
Para que una interfaz de red vm-nvaVMNic pueda reenviar el tráfico de red recibido, que no esté destinado a su propia dirección IP, debe tener habilitado el reenvío IP. Habilite el reenvío IP para la interfaz de red con az network nic update.
az network nic update \
--name vm-nvaVMNic \
--resource-group test-rg \
--ip-forwarding true
Dentro de la máquina virtual, también el sistema operativo o una aplicación en ejecución deben poder reenviar el tráfico de red. Usamos el comando sysctl
para habilitar el kernel de Linux para reenviar paquetes. Para ejecutar este comando sin iniciar sesión en la máquina virtual, usamos la extensión de script personalizada az vm extension set:
az vm extension set \
--resource-group test-rg \
--vm-name vm-nva \
--name customScript \
--publisher Microsoft.Azure.Extensions \
--settings '{"commandToExecute":"sudo sysctl -w net.ipv4.ip_forward=1"}'
El comando puede tardar un minuto en ejecutarse. Este cambio no se conservará después de reiniciar una máquina virtual, por lo que si la máquina virtual de NVA se reinicia por cualquier motivo, el script tendrá que repetirse.
Creación de máquinas virtuales
Cree dos máquinas virtuales en la red virtual para poder validar que el tráfico que procede de la subred subnet-public se enruta a la subred subnet-private mediante la aplicación virtual de red de un paso posterior.
Cree una máquina virtual en la subred subnet-public con az vm create. El parámetro --no-wait
permite a Azure ejecutar el comando en segundo plano para que pueda continuar con el siguiente comando.
En el ejemplo siguiente se crea una máquina virtual y se agrega una cuenta de usuario. El parámetro --generate-ssh-keys
hace que la CLI busque una clave SSH disponible en ~/.ssh
. Si encuentra una, se usa esa clave. Si no es así, se genera y se almacena en ~/.ssh
. Por último, implementamos la imagen más reciente Ubuntu 22.04
.
az vm create \
--resource-group test-rg \
--name vm-public \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-public \
--admin-username azureuser \
--generate-ssh-keys \
--no-wait
Cree una máquina virtual en la subred subnet-private.
az vm create \
--resource-group test-rg \
--name vm-private \
--image Ubuntu2204 \
--vnet-name vnet-1 \
--subnet subnet-private \
--admin-username azureuser \
--generate-ssh-keys
La máquina virtual tarda en crearse unos minutos. Después de crear la máquina virtual, la CLI de Azure muestra información similar a la del ejemplo siguiente:
{
"fqdns": "",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Microsoft.Compute/virtualMachines/vm-private",
"location": "westus2",
"macAddress": "00-0D-3A-23-9A-49",
"powerState": "VM running",
"privateIpAddress": "10.0.1.4",
"publicIpAddress": "203.0.113.24",
"resourceGroup": "test-rg"
}
Habilitación del inicio de sesión de Microsoft Entra ID para las máquinas virtuales
En el siguiente ejemplo de código se instala la extensión para habilitar un inicio de sesión de Microsoft Entra ID para una máquina virtual Linux. Las extensiones de máquina virtual son aplicaciones pequeñas que realizan tareas de automatización y configuración posterior a la implementación en máquinas virtuales de Azure.
az vm extension set \
--publisher Microsoft.Azure.ActiveDirectory \
--name AADSSHsign-inForLinux \
--resource-group test-rg \
--vm-name vm-private
az vm extension set \
--publisher Microsoft.Azure.ActiveDirectory \
--name AADSSHsign-inForLinux \
--resource-group test-rg \
--vm-name vm-public
Enrutamiento del tráfico a través de una aplicación virtual de red
Con un cliente SSH de su elección, conéctese a las máquinas virtuales que se crearon anteriormente. Por ejemplo, el siguiente comando se puede usar desde una interfaz de línea de comandos, como Subsistema de Windows para Linux, para crear una sesión SSH con la máquina virtual vm-private. En los pasos anteriores, habilitamos el inicio de sesión de Microsoft Entra ID para las máquinas virtuales. Puede iniciar sesión en las máquinas virtuales mediante las credenciales de Microsoft Entra ID o puede usar la clave SSH que usó para crear las máquinas virtuales. En el siguiente ejemplo, se usa la clave SSH para iniciar sesión en las máquinas virtuales.
Para obtener más información sobre cómo conectarse mediante SSH a una máquina virtual Linux e iniciar sesión con Microsoft Entra ID, consulte Iniciar sesión en una máquina virtual Linux en Azure mediante Microsoft Entra ID y OpenSSH.
### Store IP address of VM in order to SSH
Run the following command to store the IP address of the VM as an environment variable:
```bash
export IP_ADDRESS=$(az vm show --show-details --resource-group test-rg --name vm-private --query publicIps --output tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS
Use el siguiente comando para instalar traceroute en la máquina virtual vm-private:
sudo apt update
sudo apt install traceroute
Use el siguiente comando para probar el enrutamiento del tráfico de red a la máquina virtual vm-public desde la máquina virtual vm-private.
traceroute vm-public
La respuesta es similar al siguiente ejemplo:
azureuser@vm-private:~$ traceroute vm-public
traceroute to vm-public (10.0.0.4), 30 hops max, 60 byte packets
1 vm-public.internal.cloudapp.net (10.0.0.4) 2.613 ms 2.592 ms 2.553 ms
Puede ver si el tráfico se enruta directamente de la máquina virtual vm-private a la máquina virtual vm-public. Las rutas predeterminadas de Azure enrutan el tráfico entre las subredes. Cierre la sesión de SSH en la máquina virtual vm-private.
Almacenar la dirección IP de la máquina virtual con el fin de SSH
Ejecute el siguiente comando para almacenar la dirección IP de la máquina virtual como variable de entorno:
export IP_ADDRESS=$(az vm show --show-details --resource-group test-rg --name vm-public --query publicIps --output tsv)
ssh -o StrictHostKeyChecking=no azureuser@$IP_ADDRESS
Use el siguiente comando para instalar traceroute en la máquina virtual vm-public:
sudo apt update
sudo apt install traceroute
Use el siguiente comando para probar el enrutamiento del tráfico de red a la máquina virtual vm-private desde la máquina virtual vm-public.
traceroute vm-private
La respuesta es similar al siguiente ejemplo:
azureuser@vm-public:~$ traceroute vm-private
traceroute to vm-private (10.0.1.4), 30 hops max, 60 byte packets
1 vm-nva.internal.cloudapp.net (10.0.2.4) 1.010 ms 1.686 ms 1.144 ms
2 vm-private.internal.cloudapp.net (10.0.1.4) 1.925 ms 1.911 ms 1.898 ms
Puede ver que el primer salto es 10.0.2.4, que es la dirección IP privada de la aplicación virtual de red. El segundo salto es 10.0.1.4, la dirección IP privada de la máquina virtual vm-private. La ruta agregada a la tabla de rutas route-table--public y asociada a la subred subnet-public hizo que Azure enrutara el tráfico mediante la NVA, en lugar de a la subred subnet-private directamente.
Cierre la sesión de SSH en la máquina virtual vm-public.
Limpieza de recursos
Cuando ya no se necesiten, use az group delete para quitar el grupo de recursos y todos los recursos que contenga.
az group delete \
--name test-rg \
--yes \
--no-wait
Pasos siguientes
En este artículo, creó una tabla de rutas y la asoció a una subred. Ha creado una aplicación virtual de red sencilla que enruta el tráfico desde una subred pública de subred a una subred privada. Implemente varias aplicaciones virtuales de red preconfiguradas que realicen funciones de red, como son la optimización de la WAN y la de firewall, desde Azure Marketplace. Para más información acerca del enrutamiento, consulte Introducción al enrutamiento y Administración de una tabla de rutas.
Aunque puede implementar muchos recursos de Azure en una red virtual, no es el caso de los recursos de algunos servicios de PaaS de Azure. Pero puede restringir el acceso a los recursos de algunos servicios de PaaS de Azure solo al tráfico que procede de una subred de una red virtual. Para saber cómo hacerlo, consulte Restricción del acceso de red a los recursos de PaaS.