La lección anterior terminó con dos extremos sueltos, uno hacia dentro y otro hacia fuera. Hacia dentro: las oficinas de Barcelona y Palma siguen fuera de la red de Azure, el sistema de facturación heredado vive en un servidor del sótano de Barcelona, y Marta Ríos no puede administrar la plataforma desde casa sin exponer algo a internet. Hacia fuera: un cliente que compra un billete desde Sudamérica cruza el Atlántico en cada petición contra West Europe, y lo nota.

Ambos problemas son de conectividad, pero de signo opuesto. El primero se resuelve con conectividad híbrida: túneles cifrados o circuitos dedicados que unen la red local con la red virtual de Azure, de forma que 10.100.0.0/16 y 10.20.0.0/16 se comporten como una sola red. El segundo se resuelve con entrega global: servicios que ponen el contenido y la terminación de las conexiones cerca del cliente, esté donde esté.

Esta lección cierra el módulo 2 con ambas cosas y con un aviso que aparece en todas las facturas de Azure y que casi nadie anticipa: el coste de la salida de datos.

Aviso de coste importante: esta es la lección más cara del módulo. Una puerta de enlace de VPN se factura por hora desde que se crea, aunque no haya ni un túnel conectado, y tarda entre 20 y 45 minutos en desplegarse. ExpressRoute implica un contrato con un operador y no se prueba en un laboratorio. Front Door y CDN tienen coste por datos servidos. Despliega solo lo que vayas a usar y bórralo el mismo día.

Contenido

  1. El escenario híbrido de Contoso Airlines
  2. VPN de punto a sitio: administrar desde casa
  3. VPN de sitio a sitio: conectar Barcelona y Palma
  4. Despliegue de la puerta de enlace con Azure CLI
  5. ExpressRoute: cuándo justifica su precio
  6. Azure Virtual WAN, a nivel conceptual
  7. Entrega global: el cliente que compra desde Sudamérica
  8. Azure Front Door, Azure CDN y Traffic Manager comparados
  9. DNS público con Azure DNS
  10. El coste de la salida de datos
  11. Arquitectura final del módulo y limpieza
  12. Errores Comunes y Consejos
  13. Ejercicios
  14. Conclusión

  1. El escenario híbrido de Contoso Airlines

Lo que queda en local después de la migración, y por qué:

Sistema Dónde vive Por qué sigue ahí Qué necesita de Azure
Facturación heredada Servidor en Barcelona Integrado con el sistema contable y con un lector de tarjetas homologado Leer las ventas de db-reservas cada noche
Puestos del personal de tierra Barcelona y Palma Son puestos de trabajo físicos Acceder al panel de operaciones y al recurso compartido de Azure Files
Directorio local Barcelona Sincronización de identidades pendiente (módulo 4) Autenticación de los empleados
Administración de Marta Ríos Portátil, desde casa o en viaje Es una persona, no un sistema Llegar a snet-gestion y a Bastion sin abrir puertos

Recuerda el plan de direccionamiento fijado en la lección anterior, porque la conectividad híbrida es donde ese plan demuestra su valor: Barcelona es 10.100.0.0/16, Palma 10.101.0.0/16, el concentrador de Azure 10.10.0.0/16 y producción 10.20.0.0/16. Nada se solapa, así que todo puede enrutarse.

Las tres opciones de conectividad, comparadas de un vistazo:

Opción Por dónde viaja Ancho de banda Latencia Coste Tiempo de puesta en marcha
VPN de punto a sitio Internet, cifrado El del cliente Variable Muy bajo Minutos
VPN de sitio a sitio Internet, cifrado (IPsec) Hasta ~1–10 Gbps según SKU Variable, depende de internet Bajo Horas
ExpressRoute Circuito privado del operador 50 Mbps – 100 Gbps Predecible, con SLA Alto Semanas o meses

  1. VPN de punto a sitio: administrar desde casa

Una VPN de punto a sitio (P2S) conecta un equipo individual a la red virtual. Marta Ríos instala un cliente en su portátil, se autentica y su portátil recibe una dirección de un rango dedicado, con acceso a los recursos privados de la red.

Sus componentes:

Componente Qué es
Puerta de enlace de VPN El recurso de Azure que termina los túneles; vive en GatewaySubnet
Grupo de direcciones del cliente Rango del que se asignan IP a los portátiles; no puede solaparse con nada
Autenticación Certificados, Microsoft Entra ID o RADIUS
Protocolo OpenVPN (recomendado, multiplataforma), IKEv2 o SSTP

Contoso reserva 172.16.30.0/24 para los clientes de P2S: un rango que no colisiona ni con Azure (10.x) ni con las oficinas.

GRUPO_RED="rg-contoso-red-pro"
GATEWAY="vgw-contoso-pro"

# Configurar el punto a sitio sobre una puerta de enlace ya existente,
# con autenticación de Microsoft Entra ID y protocolo OpenVPN.
az network vnet-gateway update \
  --resource-group "${GRUPO_RED}" \
  --name "${GATEWAY}" \
  --address-prefixes 172.16.30.0/24 \
  --client-protocol OpenVPN \
  --vpn-auth-type AAD \
  --aad-tenant "https://login.microsoftonline.com/<id-inquilino>" \
  --aad-audience "<id-aplicacion-cliente-vpn-de-azure>" \
  --aad-issuer "https://sts.windows.net/<id-inquilino>/" \
  --output none

# Descargar el perfil de configuración para el cliente.
az network vnet-gateway vpn-client generate \
  --resource-group "${GRUPO_RED}" \
  --name "${GATEWAY}" \
  --authentication-method EAPTLS \
  --output tsv

La autenticación con Microsoft Entra ID es la opción preferible frente a los certificados: se integra con la autenticación multifactor que configuraste en la lección 01-03, permite revocar el acceso de una persona desactivando su cuenta y no obliga a distribuir ni renovar certificados uno por uno.

Con la P2S conectada, Marta llega a snet-gestion y a Bastion sin ninguna IP pública expuesta, que es exactamente la promesa que dejamos pendiente en la lección anterior.

  1. VPN de sitio a sitio: conectar Barcelona y Palma

Una VPN de sitio a sitio (S2S) conecta una red entera con la red virtual mediante un túnel IPsec/IKE entre el dispositivo VPN de la oficina y la puerta de enlace de Azure. No se instala nada en los equipos: todos los puestos de la oficina llegan a Azure de forma transparente.

graph LR
    subgraph BCN["Oficina Barcelona · 10.100.0.0/16"]
        FW1["Dispositivo VPN<br/>IP pública 198.51.100.10"]
        FAC["Facturación heredada"]
    end
    subgraph PMI["Oficina Palma · 10.101.0.0/16"]
        FW2["Dispositivo VPN<br/>IP pública 198.51.100.42"]
    end
    FW1 -->|"túnel IPsec"| GW["vgw-contoso-pro<br/>GatewaySubnet 10.10.255.0/27"]
    FW2 -->|"túnel IPsec"| GW
    MAR["Marta Ríos<br/>portátil · P2S 172.16.30.x"] -->|"OpenVPN"| GW
    GW --> HUB["vnet-contoso-hub-pro<br/>10.10.0.0/16"]
    HUB -->|peering con tránsito<br/>de puerta de enlace| PRO["vnet-contoso-pro<br/>10.20.0.0/16"]

Los cuatro componentes que hay que crear, y en este orden:

Componente Recurso de Azure Qué representa
Subred de puerta de enlace GatewaySubnet (/27 o mayor) El espacio donde vive la puerta de enlace
IP pública ip-vgw-contoso-pro, Standard estática El extremo de Azure al que apunta la oficina
Puerta de enlace de red virtual vgw-contoso-pro El terminador de túneles del lado de Azure
Puerta de enlace de red local lng-oficina-barcelona La representación en Azure de la red de la oficina: su IP pública y sus rangos

El cuarto es el que más confunde por su nombre: una local network gateway no es un aparato, sino un objeto de Azure que describe el otro extremo. Si la oficina cambia de IP pública o añade una subred, hay que actualizar este objeto.

SKU de la puerta de enlace

SKU Ancho de banda agregado Túneles S2S Conexiones P2S Redundancia de zona Uso
Basic 100 Mbps 10 128 No Heredada, evitar
VpnGw1 650 Mbps 30 250 No Producción pequeña
VpnGw2 1 Gbps 30 500 No Producción media
VpnGw1AZ – VpnGw5AZ 650 Mbps – 10 Gbps 30 500–10.000 Sí Producción con requisito de zonas

Contoso elige VpnGw1AZ: el tráfico entre las oficinas y Azure es modesto (sincronizaciones nocturnas y acceso a un panel), pero la política de la empresa exige redundancia de zona en los componentes críticos, y la puerta de enlace es un punto único de fallo para las dos oficinas.

  1. Despliegue de la puerta de enlace con Azure CLI

#!/usr/bin/env bash
set -euo pipefail

GRUPO_RED="rg-contoso-red-pro"
REGION="westeurope"
VNET_HUB="vnet-contoso-hub-pro"
GATEWAY="vgw-contoso-pro"
IP_GW="ip-vgw-contoso-pro"

ETIQUETAS=(entorno=produccion proyecto=contoso-reservas centro-coste=CC-1042
           [email protected] criticidad=alta)

# 1. GatewaySubnet en el concentrador (nombre obligatorio y literal).
az network vnet subnet create \
  --resource-group "${GRUPO_RED}" --vnet-name "${VNET_HUB}" \
  --name GatewaySubnet --address-prefixes 10.10.255.0/27 --output none

# 2. IP pública estándar con redundancia de zona.
az network public-ip create \
  --resource-group "${GRUPO_RED}" --name "${IP_GW}" \
  --sku Standard --allocation-method Static --zone 1 2 3 \
  --tags "${ETIQUETAS[@]}" --output none

# 3. Puerta de enlace de red virtual. ATENCIÓN: tarda entre 20 y 45 minutos
#    y empieza a facturar por hora desde su creación.
az network vnet-gateway create \
  --resource-group "${GRUPO_RED}" --name "${GATEWAY}" \
  --location "${REGION}" \
  --vnet "${VNET_HUB}" \
  --public-ip-addresses "${IP_GW}" \
  --gateway-type Vpn --vpn-type RouteBased \
  --sku VpnGw1AZ \
  --tags "${ETIQUETAS[@]}" \
  --no-wait

# 4. Representación de la red de Barcelona (IP y rangos del otro extremo).
az network local-gateway create \
  --resource-group "${GRUPO_RED}" --name lng-oficina-barcelona \
  --gateway-ip-address 198.51.100.10 \
  --local-address-prefixes 10.100.0.0/16 \
  --tags "${ETIQUETAS[@]}" --output none

# 5. Lo mismo para Palma.
az network local-gateway create \
  --resource-group "${GRUPO_RED}" --name lng-oficina-palma \
  --gateway-ip-address 198.51.100.42 \
  --local-address-prefixes 10.101.0.0/16 \
  --tags "${ETIQUETAS[@]}" --output none

# 6. Conexiones IPsec (la clave compartida debe venir de Key Vault, nunca del script).
az network vpn-connection create \
  --resource-group "${GRUPO_RED}" --name con-barcelona-pro \
  --vnet-gateway1 "${GATEWAY}" --local-gateway2 lng-oficina-barcelona \
  --shared-key "${CLAVE_BARCELONA}" --output none

az network vpn-connection create \
  --resource-group "${GRUPO_RED}" --name con-palma-pro \
  --vnet-gateway1 "${GATEWAY}" --local-gateway2 lng-oficina-palma \
  --shared-key "${CLAVE_PALMA}" --output none

Notas sobre este script, porque cada una corresponde a un error real que se comete a menudo:

  • --vpn-type RouteBased: es el tipo moderno, obligatorio para P2S, para varios túneles y para la mayoría de escenarios. PolicyBased solo se usa con dispositivos antiguos que no admiten otra cosa y tiene límites severos.
  • --no-wait: el despliegue tarda hasta 45 minutos. Sin esta opción, tu terminal se queda bloqueado.
  • La clave compartida (--shared-key) es un secreto de verdad: debe salir de Azure Key Vault (lección 04-03), nunca de una variable escrita en el repositorio.
  • Las IP 198.51.100.x son de un rango reservado para documentación (RFC 5737): en el despliegue real se ponen las IP públicas de los cortafuegos de las oficinas.
  • El dispositivo de la oficina hay que configurarlo también, con los parámetros equivalentes. Azure genera plantillas de configuración para los fabricantes más comunes.

Verificación del estado de los túneles:

az network vpn-connection show \
  --resource-group rg-contoso-red-pro --name con-barcelona-pro \
  --query "{Conexion:name, Estado:connectionStatus, EntradaBytes:ingressBytesTransferred, SalidaBytes:egressBytesTransferred}" \
  --output table

El estado debe ser Connected. Si aparece Connecting de forma indefinida, el 90 % de las veces es un desajuste de parámetros IPsec entre los dos extremos o una clave compartida distinta.

Y recuerda el detalle económico de la lección anterior: gracias a --allow-gateway-transit en el concentrador y --use-remote-gateways en los radios, esta única puerta de enlace da conectividad a vnet-contoso-pro y a vnet-contoso-dev. Ese es el ahorro que justifica el patrón hub-and-spoke.

  1. ExpressRoute: cuándo justifica su precio

ExpressRoute es una conexión privada entre tu red y Azure a través de un operador de telecomunicaciones. El tráfico no pasa por internet en ningún momento.

Aspecto VPN de sitio a sitio ExpressRoute
Camino Internet público, cifrado IPsec Circuito privado del operador
Ancho de banda Hasta ~10 Gbps (SKU altas), compartido con internet 50 Mbps a 100 Gbps dedicados
Latencia Variable: depende del estado de internet Predecible y estable
SLA de disponibilidad 99,9 % (99,95 % con activo-activo) 99,95 %, con SLA extremo a extremo del operador
Cifrado IPsec obligatorio No cifrado por defecto (circuito privado); se puede añadir
Coste Decenas de euros al mes más salida de datos Cientos o miles al mes, más el enlace del operador
Puesta en marcha Horas Semanas o meses
Acceso a servicios PaaS por IP privada Requiere Private Link Emparejamiento de Microsoft o Private Link

Modelos de emparejamiento

Emparejamiento A qué da acceso Uso típico
Privado (Azure private peering) Recursos con IP privada de tus redes virtuales El principal: VM, bases de datos y puntos de conexión privados
De Microsoft (Microsoft peering) Servicios públicos de Microsoft (Microsoft 365, PaaS con punto de conexión público) Grandes despliegues de Microsoft 365 y acceso a PaaS sin internet

Y dos modelos de conexión: ExpressRoute Direct (te conectas directamente a la red de Microsoft con puertos de 10 o 100 Gbps, para volúmenes enormes) y el habitual a través de un proveedor de conectividad.

¿Lo necesita Contoso?

Marta Ríos lo evalúa y decide que no, todavía no:

Criterio Situación de Contoso Veredicto
Volumen de datos Sincronización nocturna de ventas: unos pocos GB La VPN sobra
Sensibilidad a la latencia Procesos por lotes nocturnos, no interactivos No es crítica
Requisito normativo de no atravesar internet No lo hay: IPsec satisface a la auditoría No obliga
Coste Varios miles de euros al año, más el enlace No se justifica

ExpressRoute se justifica cuando se cumple alguno de estos: mover terabytes con regularidad, migrar grandes bases de datos, escritorios virtuales para cientos de empleados, sistemas interactivos que no toleran variabilidad de latencia, o un requisito de cumplimiento que prohíba explícitamente atravesar internet. Contoso lo reevaluará si migra el sistema de facturación completo. Un patrón habitual, por cierto, es tener ExpressRoute como principal y una VPN de sitio a sitio como respaldo, que es barato y cubre el corte del circuito.

  1. Azure Virtual WAN, a nivel conceptual

Cuando el número de oficinas y de redes virtuales crece, montar y mantener a mano las puertas de enlace, los emparejamiento y las tablas de rutas se convierte en un trabajo a tiempo completo. Azure Virtual WAN es el servicio gestionado que automatiza ese trabajo.

Aspecto Hub-and-spoke construido a mano Azure Virtual WAN
Concentrador Una VNet que creas y gestionas tú Concentrador virtual gestionado por Azure
Conexiones de oficina Una a una, con puertas de enlace y objetos locales Automatizadas, con integración de dispositivos SD-WAN
Enrutamiento entre radios Requiere appliance o rutas manuales Tránsito integrado entre radios
Varias regiones Emparejamiento global y rutas a mano Concentradores en varias regiones, interconectados solos
Cuándo compensa Pocas redes y pocas oficinas Muchas oficinas, varias regiones, VPN + ExpressRoute + P2S a la vez

Para Contoso, con dos oficinas y tres redes virtuales, el hub-and-spoke manual de la lección 02-05 es más simple y más barato. Virtual WAN entraría en juego si la aerolínea creciera a veinte delegaciones o si operase en varias regiones. Basta con que sepas que existe y qué problema resuelve.

  1. Entrega global: el cliente que compra desde Sudamérica

Cambiamos de dirección. Una pasajera en Buenos Aires entra en www.contosoairlines.example para comprar un vuelo. Todo está en West Europe. Veamos qué le cuesta eso.

La latencia de ida y vuelta entre Buenos Aires y Ámsterdam ronda los 220 ms. Una carga de página típica encadena varias operaciones en serie:

Operación Viajes de ida y vuelta Tiempo aproximado
Resolución DNS 1 220 ms (o menos con caché)
Establecimiento TCP 1 220 ms
Negociación TLS 1–2 220–440 ms
Primera petición HTTP 1 220 ms
Recursos estáticos (imágenes, CSS, JS) Varios, en paralelo 220 ms mínimo cada tanda

Resultado: más de un segundo antes de ver nada, sin contar el tiempo de proceso del servidor. Y en un embudo de venta de billetes, cada segundo de espera se traduce en abandonos.

Lo que arregla la entrega global, y es más de lo que la gente supone:

  1. Terminación TLS en el borde: el saludo TCP y TLS se hace contra un punto de presencia cercano (São Paulo, por ejemplo, a unos 30 ms), no contra West Europe. Solo la petición ya establecida viaja a Europa, por conexiones persistentes ya abiertas y optimizadas dentro de la red de Microsoft.
  2. Caché de contenido estático: imágenes, hojas de estilo y scripts se sirven desde el punto de presencia, sin cruzar el Atlántico.
  3. Enrutamiento óptimo: el tráfico entra en la red troncal de Microsoft en el punto más cercano y viaja por ella, no por el internet público.
  4. Conmutación por error: si el origen de una región no responde, el servicio global envía el tráfico a otra.

  1. Azure Front Door, Azure CDN y Traffic Manager comparados

Aspecto Azure Front Door Azure CDN Traffic Manager
Capa 7 (HTTP/S) 7 (HTTP/S) DNS
Qué hace con el tráfico Lo termina y lo reenvía desde el borde Sirve y cachea contenido estático Solo responde a la consulta DNS con un destino
Terminación TLS en el borde Sí Sí No (no ve el tráfico)
Caché Sí Sí, es su especialidad No
Enrutamiento por ruta o cabecera Sí Limitado No
WAF Sí (lección 04-04) Según nivel No
Conmutación por error Rápida, por sondas propias — Por sondas, pero limitada por el TTL del DNS
Protocolos Solo HTTP/S Solo HTTP/S Cualquiera
Velocidad de conmutación Segundos — Minutos (depende de la caché DNS del cliente)

Criterios de elección, en forma de decisión:

  • Sitio o API web accesible desde varias regiones del mundo, que quieres acelerar y proteger → Azure Front Door. Es la respuesta por defecto hoy, porque incluye lo que antes se hacía con CDN más Traffic Manager.
  • Solo distribución de archivos estáticos muy voluminosos (vídeo, descargas, imágenes) → Azure CDN, si su modelo de precios sale mejor para ese perfil.
  • Servicio que no habla HTTP (el protocolo del motor heredado, un servidor de correo, una base de datos) o conmutación entre regiones sin tocar la aplicación → Traffic Manager, porque trabaja a nivel DNS y es agnóstico del protocolo.

Advertencia sobre Traffic Manager que evita disgustos: como solo responde consultas DNS, la conmutación por error tarda lo que tarde en caducar el registro en la caché de los clientes y de los resolutores intermedios. Con un TTL de 60 segundos, la conmutación real puede llevar varios minutos. No es el mecanismo para una conmutación en segundos.

Front Door para Contoso Reservas

#!/usr/bin/env bash
set -euo pipefail

GRUPO="rg-contoso-reservas-pro"
PERFIL="fd-contoso-global"
PUNTO="contoso-reservas"

ETIQUETAS=(entorno=produccion proyecto=contoso-reservas centro-coste=CC-1042
           [email protected] criticidad=alta)

# 1. Perfil de Front Door Standard (Premium añade WAF gestionado y Private Link al origen).
az afd profile create \
  --resource-group "${GRUPO}" --profile-name "${PERFIL}" \
  --sku Standard_AzureFrontDoor --tags "${ETIQUETAS[@]}" --output none

# 2. Punto de conexión: el nombre global por el que entra el tráfico.
az afd endpoint create \
  --resource-group "${GRUPO}" --profile-name "${PERFIL}" \
  --endpoint-name "${PUNTO}" --enabled-state Enabled --output none

# 3. Grupo de orígenes con su sonda de estado y equilibrio de carga.
az afd origin-group create \
  --resource-group "${GRUPO}" --profile-name "${PERFIL}" \
  --origin-group-name og-reservas \
  --probe-request-type GET --probe-protocol Https \
  --probe-path "/salud" --probe-interval-in-seconds 30 \
  --sample-size 4 --successful-samples-required 3 \
  --additional-latency-in-milliseconds 50 --output none

# 4. Origen principal: la aplicación de West Europe.
az afd origin create \
  --resource-group "${GRUPO}" --profile-name "${PERFIL}" \
  --origin-group-name og-reservas --origin-name origen-westeurope \
  --host-name app-contoso-reservas-pro.azurewebsites.net \
  --origin-host-header app-contoso-reservas-pro.azurewebsites.net \
  --http-port 80 --https-port 443 --priority 1 --weight 1000 \
  --enabled-state Enabled --output none

# 5. Ruta con caché de contenido estático y redirección a HTTPS.
az afd route create \
  --resource-group "${GRUPO}" --profile-name "${PERFIL}" \
  --endpoint-name "${PUNTO}" --route-name ruta-principal \
  --origin-group og-reservas --supported-protocols Http Https \
  --patterns-to-match "/*" --forwarding-protocol HttpsOnly \
  --https-redirect Enabled --link-to-default-domain Enabled \
  --enable-caching true --query-string-caching-behavior IgnoreQueryString \
  --output none

echo "Front Door publicado en: https://$(az afd endpoint show -g "${GRUPO}" --profile-name "${PERFIL}" --endpoint-name "${PUNTO}" --query hostName -o tsv)"

Las opciones que merecen explicación:

Opción Efecto
--probe-path "/salud" Reutiliza el punto de salud que creaste en App Service (lección 02-03)
--sample-size y --successful-samples-required Cuántas sondas se evalúan y cuántas deben ir bien para considerar sano el origen
--additional-latency-in-milliseconds 50 Margen de latencia dentro del cual varios orígenes se consideran igual de cercanos
--priority 1 Prioridad del origen: un segundo origen con prioridad 2 sería el de respaldo
--https-redirect Enabled Cualquier petición HTTP se redirige a HTTPS en el borde
--query-string-caching-behavior Si la cadena de consulta forma parte de la clave de caché. Cuidado: IgnoreQueryString es peligroso en páginas de resultados de búsqueda de vuelos

Ese último punto merece un aviso serio: no caches respuestas personalizadas ni resultados de disponibilidad. Si Front Door cachea /vuelos?origen=BCN&destino=EZE ignorando la cadena de consulta, un cliente puede ver los vuelos que buscó otro. Contoso cachea únicamente /estatico/* (imágenes, CSS, JS) y deja pasar sin caché todo lo dinámico.

Si más adelante Contoso montase un segundo despliegue en North Europe, bastaría con añadirlo como origen con prioridad 2 y Front Door conmutaría solo cuando la sonda del principal fallase. Recuerda, sin embargo, la decisión consciente del módulo 1: no hay activo-activo multirregión por coste.

  1. DNS público con Azure DNS

Azure DNS aloja las zonas DNS públicas de tus dominios en la infraestructura de Microsoft, con anycast global y sin servidores que mantener. No registra dominios (para eso está App Service Domains o tu registrador habitual), solo los aloja.

GRUPO_RED="rg-contoso-red-pro"
ZONA="contosoairlines.example"

# 1. Crear la zona pública.
az network dns zone create -g "${GRUPO_RED}" -n "${ZONA}" --output none

# 2. Ver los servidores de nombres que hay que declarar en el registrador.
az network dns zone show -g "${GRUPO_RED}" -n "${ZONA}" \
  --query nameServers --output tsv

# 3. Registro CNAME de www hacia Front Door.
HOST_FD=$(az afd endpoint show -g rg-contoso-reservas-pro \
  --profile-name fd-contoso-global --endpoint-name contoso-reservas \
  --query hostName -o tsv)

az network dns record-set cname set-record \
  -g "${GRUPO_RED}" -z "${ZONA}" -n www \
  --cname "${HOST_FD}" --ttl 3600 --output none

# 4. Registro de verificación de dominio que exige Front Door.
az network dns record-set txt add-record \
  -g "${GRUPO_RED}" -z "${ZONA}" -n "_dnsauth.www" \
  --value "<token-de-validacion-de-front-door>" --output none

# 5. Alias en el vértice del dominio (contosoairlines.example, sin www).
#    El CNAME no está permitido en el vértice: se usa un registro de alias de Azure.
az network dns record-set a create \
  -g "${GRUPO_RED}" -z "${ZONA}" -n "@" \
  --target-resource "$(az afd endpoint show -g rg-contoso-reservas-pro \
      --profile-name fd-contoso-global --endpoint-name contoso-reservas --query id -o tsv)" \
  --output none

El paso 5 resuelve un problema clásico: el estándar DNS no permite un CNAME en el vértice de la zona (el dominio sin www). Los registros de alias de Azure DNS lo solucionan apuntando directamente a un recurso de Azure, y además se actualizan solos si la IP del recurso cambia.

Sobre el TTL: un valor alto (3600 s) reduce consultas y coste; uno bajo (60 s) permite cambiar de destino rápido. Práctica habitual: bajar el TTL a 60 segundos unos días antes de una migración planificada y volver a subirlo después.

  1. El coste de la salida de datos

Aquí está la sorpresa que se lleva todo el mundo con su primera factura de Azure, y por eso cierra la parte técnica del módulo.

La regla general de Azure:

  • La entrada de datos (ingress) es gratuita. Subir a Azure no cuesta.
  • La salida de datos (egress) se factura. Todo lo que sale hacia internet, y buena parte de lo que se mueve entre regiones o entre zonas.
Tipo de tráfico ¿Se factura?
De internet hacia Azure (entrada) No
De Azure hacia internet (salida) Sí, por GB, con los primeros 100 GB al mes gratuitos
Entre recursos de la misma región y misma VNet No
Entre zonas de disponibilidad de la misma región Sí en algunos escenarios
Entre regiones (por ejemplo, West Europe → North Europe) Sí
A través de un emparejamiento de redes virtuales Sí, en ambos sentidos
A través de una VPN o de ExpressRoute Sí (en ExpressRoute depende del plan)
Servido desde la caché de Front Door o CDN Sí, con una tarifa distinta y normalmente menor por zona geográfica

Dónde duele esto en el caso de Contoso:

  1. Tarjetas de embarque descargadas por los pasajeros. Cada PDF que sale a internet se factura. Un millón de descargas de 300 KB son 300 GB al mes: pequeño, pero real, y crece con el negocio.
  2. Sincronización nocturna con la facturación de Barcelona a través de la VPN: sale de Azure, se factura.
  3. Replicación GZRS de la cuenta de tarjetas hacia North Europe: la replicación geográfica tiene su propio coste de transferencia.
  4. Tráfico entre radios y concentrador por emparejamiento: parece «interno», pero se factura por GB en ambos sentidos.

Cuatro formas de reducirlo, todas aplicables desde ya:

  • Cachear en el borde: cada respuesta servida desde caché de Front Door es una salida menos desde la región (y más rápida).
  • Comprimir: activar la compresión en Front Door y en App Service reduce los bytes servidos.
  • No mover datos entre regiones sin motivo: procesa donde están los datos.
  • Vigilar el desglose de la factura: en el módulo 8 verás cómo Cost Management descompone el gasto por servicio y por tipo de medidor, y cómo Nuria Peña, la responsable financiera, lo revisa cada mes con el equipo. La salida de datos suele estar entre las tres primeras líneas y casi nadie la había presupuestado.

  1. Arquitectura final del módulo y limpieza

graph TB
    CLI["Clientes globales<br/>(Buenos Aires, Madrid, Barcelona…)"] --> DNS["Azure DNS<br/>contosoairlines.example"]
    DNS --> FD["Azure Front Door<br/>fd-contoso-global<br/>TLS en el borde + caché"]
    FD --> WEBAPP["App Service<br/>app-contoso-reservas-pro"]
    WEBAPP --> API["App Service<br/>app-contoso-api-disponibilidad-pro"]
    API --> SQL["db-reservas<br/>(módulo 3)"]
    WEBAPP --> BLOB["sttarjetascontosopro<br/>Private Link"]
    subgraph AZ["Azure · West Europe"]
        FD
        WEBAPP
        API
        SQL
        BLOB
        VMS["vm-motor-disponibilidad-01<br/>snet-gestion"]
        GW["vgw-contoso-pro<br/>VpnGw1AZ"]
    end
    OFI["Oficinas Barcelona y Palma<br/>10.100.0.0/16 · 10.101.0.0/16"] -->|VPN sitio a sitio| GW
    MARTA["Marta Ríos desde casa"] -->|VPN punto a sitio| GW
    GW --> VMS

Limpieza, empezando por lo más caro:

GRUPO_RED="rg-contoso-red-pro"

# 1. Conexiones y puerta de enlace: LO PRIMERO, es lo que más factura por hora.
az network vpn-connection delete -g "${GRUPO_RED}" -n con-barcelona-pro
az network vpn-connection delete -g "${GRUPO_RED}" -n con-palma-pro
az network vnet-gateway delete -g "${GRUPO_RED}" -n vgw-contoso-pro
az network public-ip delete -g "${GRUPO_RED}" -n ip-vgw-contoso-pro

# 2. Front Door.
az afd profile delete -g rg-contoso-reservas-pro --profile-name fd-contoso-global --yes

# 3. Zona DNS (si era de pruebas).
az network dns zone delete -g "${GRUPO_RED}" -n contosoairlines.example --yes

# 4. Comprobación final de gasto residual en toda la suscripción.
az network vnet-gateway list --query "[].{Gateway:name, SKU:sku.name, Grupo:resourceGroup}" -o table
az network public-ip list --query "[?ipConfiguration==null].{IP:name, Grupo:resourceGroup}" -o table
az disk list --query "[?diskState=='Unattached'].{Disco:name, GB:diskSizeGb}" -o table

Borrar la puerta de enlace tarda varios minutos. Hazlo antes de irte, no después: una VpnGw1AZ olvidada un mes cuesta más que todo el resto del laboratorio de este módulo junto.

Errores Comunes y Consejos

  • Crear la puerta de enlace de VPN «para probar» y olvidarla. Factura por hora desde el minuto uno, esté o no conectada. Es el error de coste más caro de todo el módulo.
  • Solapar el grupo de direcciones de la P2S con la red de Azure o con la de la oficina. El cliente conecta, pero no llega a nada. Reserva un rango exclusivo (172.16.30.0/24 en Contoso).
  • Usar PolicyBased cuando hace falta RouteBased. No admite P2S ni varios túneles y hay que rehacer la puerta de enlace entera.
  • Poner mal los rangos en la puerta de enlace de red local. Si falta una subred de la oficina, esa parte de la red no llega a Azure y el síntoma es «funciona a medias».
  • Escribir la clave compartida de la VPN en el script. Va a Key Vault (04-03). Un repositorio con una clave IPsec es un incidente de seguridad.
  • Suponer que ExpressRoute cifra el tráfico. Es un circuito privado, no cifrado por defecto. Si el requisito es cifrado extremo a extremo, hay que añadirlo.
  • Esperar de Traffic Manager una conmutación en segundos. Trabaja por DNS: la caché de los clientes manda. Para conmutación rápida, Front Door.
  • Cachear contenido dinámico o personalizado en Front Door. Un resultado de búsqueda de vuelos cacheado puede mostrarse a otro cliente. Cachea solo lo estático.
  • Olvidar el registro de alias en el vértice del dominio. No se puede usar CNAME en @; los alias de Azure DNS son la solución.
  • No presupuestar la salida de datos. Es una de las primeras líneas de la factura y la que menos gente anticipa. Enlázalo con el presupuesto que creaste en la lección 01-03.
  • Consejo: despliega la puerta de enlace con --no-wait y aprovecha los 30-45 minutos para configurar el resto. Y ponle una alerta de presupuesto específica.
  • Consejo: documenta en el repositorio la tabla de rangos (Azure, oficinas, P2S). En una incidencia de conectividad a las tres de la mañana, ese documento vale más que cualquier diagrama bonito.

Ejercicios

Ejercicio 1: elegir la conectividad adecuada

Para cada necesidad de Contoso Airlines, indica qué solución usarías y justifícala:

  1. Marta Ríos administra las VM desde un hotel durante un congreso.
  2. Los 30 puestos de la oficina de Palma acceden a diario al panel de operaciones y al recurso compartido de Azure Files.
  3. Contoso decide migrar el sistema de facturación completo y mover 8 TB de histórico en un fin de semana, además de mantener después una sincronización continua de baja latencia.
  4. La aerolínea abre delegaciones en 18 aeropuertos, cada una con su red local, y quiere conectarlas todas sin gestionar 18 puertas de enlace.

Ejercicio 2: entrega global

La pasajera de Buenos Aires tarda más de un segundo en ver la página de búsqueda de vuelos.

  1. ¿Qué servicio de entrega global elegirías y por qué frente a los otros dos?
  2. ¿Qué contenidos cachearías y cuáles no? Justifica el riesgo de equivocarte.
  3. Escribe la configuración de la sonda de estado del grupo de orígenes y explica cada parámetro.
  4. Si Contoso añadiese un despliegue en North Europe, ¿cómo lo configurarías para que fuese de respaldo y no activo-activo?

Ejercicio 3: auditar la factura de salida de datos

Nuria Peña, la responsable financiera, pregunta por qué el apartado de red de la factura ha subido un 40 % este trimestre.

  1. Enumera al menos cuatro fuentes de salida de datos en la arquitectura actual de Contoso.
  2. Para cada una, propón una medida concreta de reducción.
  3. ¿Qué tráfico de la arquitectura es gratuito y conviene explicar a Nuria para que no lo persiga?

Soluciones

Solución 1:

Caso Solución Justificación
1. Marta desde un hotel VPN de punto a sitio con autenticación de Entra ID Es un equipo individual y una ubicación cambiante; no hay dispositivo VPN que configurar y se aprovecha el MFA existente
2. Los 30 puestos de Palma VPN de sitio a sitio Conecta la red entera de forma transparente; además el acceso a Azure Files por SMB (puerto 445) prácticamente exige conectividad privada
3. Migrar 8 TB y sincronización de baja latencia ExpressRoute Volumen y latencia predecible: mover 8 TB por una VPN sobre internet es lento e inestable. Se planifica con semanas de antelación y se deja la VPN como respaldo
4. 18 delegaciones Azure Virtual WAN Gestiona centralizadamente las conexiones de muchas sedes con tránsito integrado, en lugar de mantener a mano puertas de enlace, objetos locales y rutas

Solución 2:

  1. Azure Front Door. Frente a Azure CDN, porque no solo hay que cachear estáticos: también interesa terminar TLS en el borde y acelerar el contenido dinámico por la red troncal de Microsoft, además de poder añadir WAF (04-04). Frente a Traffic Manager, porque este solo responde consultas DNS y no toca el tráfico: no reduciría en nada la latencia de establecimiento de conexión, que es el grueso del problema.

  2. Cacheable y no cacheable:

Contenido ¿Caché? Motivo
/estatico/* (CSS, JS, imágenes, logotipos) Sí, con TTL largo Idéntico para todos y cambia poco
/vuelos?origen=…&destino=… No Depende de la disponibilidad en tiempo real: cachearlo vendería plazas inexistentes
/mi-reserva/* No Contenido personal; un fallo de caché mostraría los datos de un pasajero a otro
Tarjeta de embarque en PDF No Se sirve con SAS temporal (lección 02-04); cachearla anularía la protección

El riesgo de equivocarse es doble y grave: mostrar datos personales de un pasajero a otro (incidente de privacidad y RGPD) y vender plazas que ya no existen.

  1. Sonda de estado:
az afd origin-group create \
  --resource-group rg-contoso-reservas-pro --profile-name fd-contoso-global \
  --origin-group-name og-reservas \
  --probe-request-type GET \        # método de la sonda: GET, no HEAD, para ejercitar la aplicación
  --probe-protocol Https \          # se comprueba por el mismo canal que usa el cliente
  --probe-path "/salud" \           # punto de salud creado en la lección 02-03
  --probe-interval-in-seconds 30 \  # frecuencia: equilibrio entre reacción y carga
  --sample-size 4 \                 # se evalúan las 4 últimas muestras
  --successful-samples-required 3 \ # con 3 buenas de 4, el origen se considera sano
  --additional-latency-in-milliseconds 50
  1. Añadiendo el segundo origen al mismo grupo con prioridad 2:
az afd origin create -g rg-contoso-reservas-pro --profile-name fd-contoso-global \
  --origin-group-name og-reservas --origin-name origen-northeurope \
  --host-name app-contoso-reservas-nor.azurewebsites.net \
  --priority 2 --weight 1000 --enabled-state Enabled

Front Door envía todo el tráfico a la prioridad 1 mientras esté sana y solo conmuta a la 2 cuando las sondas fallan. Con la misma prioridad en ambos, se repartiría el tráfico (activo-activo), que es precisamente lo que Contoso descartó por coste en el módulo 1.

Solución 3:

1 y 2. Fuentes de salida y medidas:

Fuente de salida Medida de reducción
Descarga de tarjetas de embarque en PDF por los pasajeros Comprimir el PDF; servir por Front Door (tarifa por zona y menor); evitar reenvíos duplicados por correo
Sincronización nocturna con la facturación de Barcelona por VPN Enviar solo deltas en lugar del volcado completo; comprimir la transferencia
Replicación GZRS de sttarjetascontosopro a North Europe Revisar si todos los contenedores necesitan redundancia geográfica; los datos regenerables pueden ir en una cuenta ZRS aparte
Tráfico entre concentrador y radios por emparejamiento Colocar en el mismo radio los componentes que más hablan entre sí
Respuestas de la web y de la API a clientes de internet Activar compresión y caché en Front Door; reducir el tamaño de las respuestas JSON
  1. Tráfico gratuito, que conviene explicar para no perseguir fantasmas: toda la entrada de datos hacia Azure (subidas de tarjetas, peticiones entrantes, la carga inicial de la migración), y el tráfico dentro de la misma región y la misma red virtual, como el que va de snet-web a snet-app o de la aplicación a su base de datos. Es decir: procesar datos donde están no cuesta transferencia; moverlos fuera, sí.

Conclusión

Con esta lección cierras el módulo 2 y la plataforma de Contoso Airlines ya está de pie. Has resuelto el escenario híbrido: VPN de punto a sitio con autenticación de Microsoft Entra ID para que Marta Ríos administre desde cualquier sitio sin exponer un solo puerto, y VPN de sitio a sitio para Barcelona y Palma, con sus cuatro componentes —GatewaySubnet, IP pública, puerta de enlace de red virtual y puerta de enlace de red local—, la elección de SKU VpnGw1AZ con redundancia de zona y el aprovechamiento de una única puerta de enlace para todos los radios del hub-and-spoke. Sabes qué aporta ExpressRoute frente a la VPN —ancho de banda, latencia predecible, SLA y no atravesar internet—, sus modelos de emparejamiento, y por qué Contoso decide no contratarlo todavía. Conoces Azure Virtual WAN y el problema que resuelve cuando las sedes se multiplican. Y en la otra dirección has montado la entrega global: entiendes de dónde salen los más de mil milisegundos que sufre una pasajera en Buenos Aires, has comparado Front Door, CDN y Traffic Manager con criterios de elección claros, has publicado Contoso Reservas tras Front Door con sonda de estado, redirección a HTTPS y caché solo de lo estático, has alojado el dominio en Azure DNS con su registro de alias en el vértice, y sabes anticipar el coste de la salida de datos que aparecerá en la factura del módulo 8.

Recapitulando el módulo entero: empezaste desplegando máquinas virtuales para el motor de disponibilidad heredado, con sus discos, sus tamaños y la diferencia entre detenida y desasignada. Después diste escalado y alta disponibilidad al cómputo con conjuntos de escalado, reglas automáticas y programadas, zonas de disponibilidad y un Load Balancer con sondas de estado. Publicaste Contoso Reservas y la API de Disponibilidad en App Service, con planes, ranuras de despliegue e intercambio con calentamiento para publicar sin cortar la venta. Guardaste las tarjetas de embarque en Azure Storage, resolviendo la redundancia pendiente —LRS en desarrollo, GZRS en producción— y automatizando su ciclo de vida hacia Cool y Archive. Construiste la red virtual con sus subredes, NSG, zonas DNS privadas y puntos de conexión privados que sacaron la base de datos y el almacenamiento de internet. Y hoy has unido esa red con las oficinas y con el mundo.

Tienes cómputo, almacenamiento y red. Falta lo que da sentido a todo: los datos. La base de datos db-reservas lleva apareciendo en cada lección como una pieza que existe pero que aún no has diseñado ni desplegado, y las decisiones que quedan por tomar no son menores: ¿una base relacional o un almacén de documentos? ¿Azure SQL Database, MySQL, PostgreSQL o Cosmos DB? ¿Cuánto cuesta cada opción, cómo se escala y cómo se recupera si alguien borra una tabla un viernes por la tarde?

En el módulo 3, Bases de datos de Azure, empezamos justamente por ahí: por el criterio para elegir el servicio de datos adecuado —relacional frente a NoSQL, gestionado frente a instalado en una VM, coste frente a rendimiento— y después desplegaremos de verdad la base de datos de reservas de Contoso Airlines en Azure SQL Database, con su nivel de servicio, su copia de seguridad, su restauración a un momento dado y su conexión privada a la red que acabas de construir. Nos vemos allí.

Curso de Azure

Módulo 1: Introducción a Azure

Módulo 2: Servicios principales de Azure

Módulo 3: Bases de datos de Azure

Módulo 4: Seguridad en Azure

Módulo 5: Azure DevOps

Módulo 6: Servicios avanzados de Azure

Módulo 7: Monitoreo y gestión

Módulo 8: Gestión y optimización de costos

Módulo 9: Estudios de caso y mejores prácticas

© Copyright 2026. Todos los derechos reservados