El siguiente documento tiene por objetivo llevar a cabo algunas pruebas de concepto relativas a Networking en Azure. El caso de negocio abarca la unión de 2 oficinas de una empresa global, Oficina Norte (ubicada al norte de Estados Unidos) y Oficina Sur (ubicada en Brasil), las cuales se unen a través de una red Hub (Ubicada al este de Estados Unidos).
Entre los puntos abordados destacan:
- Creación de Vnet
- Creación de Subnet
- Peering
- Implementación de transitividad entre Vnets a través de la implementación de un NVA.
- Configuración de Network Security Groups
Para comenzar, vamos a crear un grupo de recursos donde desplegaremos cada uno de los componentes de nuestra solución. Siga estos pasos para la creación del RG:
- Vaya a la barra de búsqueda superior y escriba
resource groups
, luego seleccione el elemento del listado según aparece en la imagen:
- Presione el botón
Create
, ubicado en el sector superior izquierdo.
- Ingrese
networking-training-rg
como nombre del RG, seleccione la regiónEast US 2
y presione enReview + create
.
- Finalmente, en la pantalla siguiente presione el botón
Create
.
- A continuación, el grupo recientemente creado debería aparecer en el listado de grupos de recursos, haga click sobre éste para acceder:
- Haga click sobre el botón
Create
, ubicado en el sector superior izquierdo de la pantalla.
-
Escriba
virtual network
sobre el cuadro de búsqueda y presione enter. -
Seleccione el primer elemento del listado y luego presione sobre el botón
Create
.
- Seleccione el grupo de recursos creado con anterioridad y la región a desplegar la Virtual Network (
West US 2
). Finalmente agregue como nombre de la Vnetoficina-norte-vnet
y presioneNext: IP Addresses
.
-
En la siguiente pantalla, elimine el
IPv4 address space
predeterminado. -
Ingrese el siguiente CIDR para definir el IPv4 address space:
10.0.0.0/8
-
Presione sobre el botón
Add subnet
-
Ingrese
it-norte-subnet
como nombre de la Subnet y el siguiente Subnet address range10.0.1.0/24
. Finalmente presione el botón Add.
- Presione en
Review + create
y finalmente enCreate
.
Procederemos a habilitar la Azure Cloud Shell. Esta herramienta corresponde a una interfaz de línea de comandos que viene incorporada en el portal de Azure, la cual nos permitirá ejecutar diferentes comandos de Azure CLI.
- Haga click en el ícono de consola ubicado arriba a la derecha, esto iniciará una Azure Cloud Shell.
-
Seleccione
Bash
como lenguage y luego presione enShow advanced settings
. -
Seleccione la región
East US 2
o alguna de su preferencia. -
En Resource group, seleccione
Use existing
y luego seleccione el grupo de recursos creado para el tutorial (networking-training-rg). -
En Storage Account, seleccione
Create new
e ingrese un nombre cuenta de Storage Account, Azure validará que este nombre sea único y solo contenga números y letras. -
En File share, seleccione
Create new
e ingrese un nombre de File share (ej:azcli
). -
Finalmente presione el botón
Create Storage
. Azure Cloud Shell hace uso de un recurso de File share dentro de un Storage account, para simular el sistema de archivos. Como resultado, ahora podrá empezar a escribir comando en Azure Cloud Shell.
A continuación, crearemos 2 Vnets adicionales llamadas hub-vnet
y oficina-sur-vnet
, además crearemos una Subnet para cada una de las Vnets, las cuales se llamarán dmz-subnet
y it-sur-subnet
respectivamente.
- Ejecute el siguiente comando para generar la Vnet y Subnet de
hub
:
az network vnet create \
--resource-group networking-training-rg \
--name hub-vnet \
--address-prefixes 172.16.0.0/12 \
--subnet-name dmz-subnet \
--subnet-prefixes 172.16.1.0/24 \
--location eastus2
- Ejecute el siguiente comando para generar la Vnet y Subnet de
oficina-sur
:
az network vnet create \
--resource-group networking-training-rg \
--name oficina-sur-vnet \
--address-prefixes 192.168.0.0/16 \
--subnet-name it-sur-subnet \
--subnet-prefixes 192.168.1.0/24 \
--location brazilsouth
- Debería visualizarse los siguientes recursos en el resource gruop:
A continuación, vamos a crear una VM en cada una de las Vnets, para poder realizar pruebas de conectividad.
- En primer lugar, vamos a crear un archivo llamado cloud-init.txt, este archivo nos permitirá precargar algunas herramientas en nuestras VMs.
code cloud-init.txt
- Agregar siguiente information al archivo. Con esta configuración
inetutils-traceroute
es instalado, lo cual contiene la utilidad detraceroute
. Finalmente, presioneCTRL + S
para guardar y luegoCTRL + Q
para salir.
#cloud-config
package_upgrade: true
packages:
- inetutils-traceroute
- Generamos la primera VM para la red de la oficina norte:
az vm create \
--resource-group networking-training-rg \
--name of-norte-001-vm \
--location westus2 \
--vnet-name oficina-norte-vnet \
--subnet it-norte-subnet \
--image UbuntuLTS \
--admin-username azureuser \
--size Standard_B1s \
--generate-ssh-keys \
--custom-data cloud-init.txt \
--no-wait
- Luego la VM con el rol de NVA para la vnet Hub:
az vm create \
--resource-group networking-training-rg \
--name nva-001-vm \
--location eastus2 \
--vnet-name hub-vnet \
--subnet dmz-subnet \
--image UbuntuLTS \
--admin-username azureuser \
--size Standard_B1s \
--generate-ssh-keys \
--custom-data cloud-init.txt \
--no-wait
- Finalmente, la VM en la red de la oficina sur:
az vm create \
--resource-group networking-training-rg \
--name of-sur-001-vm \
--location brazilsouth \
--vnet-name oficina-sur-vnet \
--subnet it-sur-subnet \
--image UbuntuLTS \
--admin-username azureuser \
--size Standard_B1s \
--generate-ssh-keys \
--custom-data cloud-init.txt
A continuación, validaremos que no tenemos acceso entre las diferentes redes.
- Tomamos nota de cada una de las IPs públicas generadas para cada VM. En nuestro caso, almacenaremos el valor de la IP pública de
of-norte-001-vm
en la variable$norteip
y denva-001-vm
en la variable$nvaip
. Para listar las IPs públicas generadas, se debe utilizar el siguiente comando:
az vm list-ip-addresses --resource-group networking-training-rg --query '[].virtualMachine.network.publicIpAddresses'
- Para guardar la IP xxx.xxx.xxx.xxx en la variable
norteip
y luego la IP yyy.yyy.yyy.yyy en la variablenvaip
, ejecutamos:
norteip=xxx.xxx.xxx.xxx
nvaip=yyy.yyy.yyy.yyynvai
- Accedemos a la VM
of-norte-001-vm
ssh azureuser@$norteip
- Realizamos ping a
nva-001-vm
yof-sur-001-vm
, cuyas IPs deberían ser172.16.1.4
y192.168.1.4
respectivamente.
azureuser@of-norte-001-vm:~$ ping 172.16.1.4 -c 4 -W 1
azureuser@of-norte-001-vm:~$ ping 192.168.1.4 -c 4 -W 1
Nota: Para diferencias los comandos ejecutados desde una VM a los ejecutados desde la Azure Cloud Shell, hemos agregado el nombre de la VM al comando. Para poder ejecutar el comando anterior con éxito, no se debe copiar la parte que dice
azureuser@of-norte-001-vm:~$
, esto es solo para referenciar el origen del comando.
- Ambos ping deberían fallar.
A continuación, genaremos el peering entre oficina norte y el hub a través del portal de Azure.
- Ingresamos a
oficina-norte-vnet
desde el listado de recursos:
- Seleccionamos
Peerings
(bajo la sección Settings) en menú lateral izquierdo:
- A continuación, presionamos en el botón
Add
:
- Bajo la sección de This virtual network, en Peering link name ingresamos como nombre
oficina-norte-vnet-to-hub-vnet
, luego, en la sección Remote virtual network ingresamos como Peering link name el valorhub-vnet-to-oficina-norte-vnet
.
- Seleccionamos
hub-vnet
en el selector de Virtual network de la sección Remote virtual network. Finalmente, mantenemos todos los valores predeterminados y presionamos sobre el botónAdd
:
- A continuación, deberíamos poder ver el nuevo Peering, con el estado Connected. Si el estado es Updating, por favor espere unos minutos y vuelva a recargar la vista.
- Además, si revisamos la sección Peering de la
hub-vnet
, encontraremos que una nueva conexión de Peering se ha creado automáticamente:
- Finalmente realizamos una prueba de ping desde
of-norte-001-vm
hacianva-001-vm
, la cual debería ser exitosa. Con esto validamos que la reciente conexión de Peering ha funcionado correctamente.
azureuser@of-norte-001-vm:~$ ping 172.16.1.4 -c 4 -W 1
A continuación, generaremos el Peering para las redes faltantes a través de Azure CLI.
- Generamos Peering
hub-vnet-to-oficina-sur-vnet
az network vnet peering create \
--name hub-vnet-to-oficina-sur-vnet \
--remote-vnet oficina-sur-vnet \
--resource-group networking-training-rg \
--vnet-name hub-vnet \
--allow-vnet-access \
--allow-forwarded-traffic
- Luego realizamos la conexión en el sentido contrario:
az network vnet peering create \
--name oficina-sur-vnet-to-hub-vnet \
--remote-vnet hub-vnet \
--resource-group networking-training-rg \
--vnet-name oficina-sur-vnet \
--allow-vnet-access \
--allow-forwarded-traffic
- A continuación, comprobamos que al ingresar a
nva-001-vm
, es posible llegar aof-norte-001-vm
yof-sur-001-vm
ssh azureuser@$nvaip
azureuser@nva-001-vm:~$ ping 10.0.1.4 -c 4 -W 1
azureuser@nva-001-vm:~$ ping 192.168.1.4 -c 4 -W 1
- No obstante, si ingresamos mediante ssh a
of-norte-001-vm
y realizamos un ping haceof-sur-001-vm
, el comando va a fallar. Es decir, la conexión de Peering no es transitiva!!
Para permitir el tráfico transitivo a través del NVA, debemos permitir IP forwarding tanto en la NIC de la VM (en Azure), como dentro del sistema operativo (Ubuntu)
- Ejecutamos el siguiente comando para habilitar IP forwarding en la NIC de
nva-001-vm
az network nic update --name nva-001-vmVMNic -g networking-training-rg --ip-forwarding true
Nota: Es posible que el nombre entregado en el parámetro
--name
sea diferente, dependiendo del nombre utilizado para crear la VM. La manera más sencilla de validar el nombre de la NIC, es revisando en el listado del grupo de recursos:
- Luego nos conectamos a la
nva-001-vm
y habilitamos ipforwarding dentro de ella:
ssh azureuser@$nvaip
azureuser@nva-001-vm:~$ sudo vim /etc/sysctl.conf
- Descomentamos la línea que dice
net.ipv4.ipforward=1
, cerramos Vim (ESC
+:wq!
+ENTER
) y luego ejecutamos el siguiente comando para persistir los cambios:
azureuser@nva-001-vm:~$ sudo sysctl -p
Es esta sección, vamos a configurar una User Defined Route para it-norte-subnet
, que enrutará todo el tráfico destinado a 192.168.1.0/24
hacia nuestro nva-001-vm
.
- Ingresamos a
oficina-norte-vnet
, luego vamos a la sección de Subnets y seleccionamosit-norte-subnet
. Finalmente, validamos que no existe ninguna Route table seleccionada.
- Posteriormente, escribímos
route
en la barra de búsqueda superior y seleccioanmos Route tables.
-
Pulsamos en el botón
Create
. -
Seleccionamos nuestro grupo de recursos (
network-training-rg
), la región en la que estamos trabajando (West US 2
) y agregamos como nombreit-norte-udr
. Finalmente presionamos el botónReview + create
y en la página siguiente presionamos enCreate
.
- Una vez creado el recurso, accedemos a éste. Luego vamos a la sección
Routes
del menú de la izquierda y presionamos sobre el botónAdd
:
- Agregamos la siguiente configuración y luego presionamos en el botón
Add
:
- Route name:
it-sur-subnet-to-nva
- Address prefix destination:
IP Addresses
- Destination IP addresses/CIDR ranges:
192.168.1.0/24
- Next hop type:
Virtual appliance
- Next hop address:
172.16.1.4
- Posteriormente, vamos a la sección subnets y hacemos click en
Associate
. Luego seleccionamos la Virtual networkoficina-norte-vnet
y la subnetit-norte-subnet
. Finalmente, presionamos el botónOK
.
- Volvemos a ingresar a la Subnet (
it-norte-subnet
) y veremos que ahora tenemos asociada la Route tableit-norte-udr
:
- Finalmente, es necesario repetir los pasos anteriores, para crear una User defined route para la subnet
it-sur-subnet
, tomando en cuenta la siguiente configuración:
- Nombre de Route table:
it-sur-udr
. - Ubicación:
Brazil South
- Ruta a agregar:
- Route name:
it-norte-subnet-to-nva
- Address prefix destination:
IP Addresses
- Destination IP addresses/CIDR ranges:
10.0.1.4/24
- Next hop type:
Virtual appliance
- Next hop address:
172.16.1.4
- Route name:
Finalmente, ingresamos a of-norte-001-vm
y ejecutamos un ping hacia 192.168.1.4
azureuser@of-norte-001-vm:~$ ping 192.168.1.4 -c 4 -W 1
Si el ping ha funcionado correctamente, Felicitaciones!!
Tarea:
- Crear un NSG y asociarlo a la Subnet
dmz-subnet
. - Denegar todo el tráfico entrando que se dirija a
it-sur-subnet
. - Probar ping desde
of-norte-001-vm
haciaof-sur-001-vm
: Debe fallar. - Agregar regla a NSG que permita tráfico desde
it-norte-subnet
haciait-sur-subnet
. - Probar nuevamente ping, ahora debe funcionar.