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
- El escenario híbrido de Contoso Airlines
- VPN de punto a sitio: administrar desde casa
- VPN de sitio a sitio: conectar Barcelona y Palma
- Despliegue de la puerta de enlace con Azure CLI
- ExpressRoute: cuándo justifica su precio
- Azure Virtual WAN, a nivel conceptual
- Entrega global: el cliente que compra desde Sudamérica
- Azure Front Door, Azure CDN y Traffic Manager comparados
- DNS público con Azure DNS
- El coste de la salida de datos
- Arquitectura final del módulo y limpieza
- Errores Comunes y Consejos
- Ejercicios
- Conclusión
- 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 |
- 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 tsvLa 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.
- 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.
- 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 noneNotas 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.PolicyBasedsolo 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.xson 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 tableEl 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.
- 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.
- 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.
- 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:
- 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.
- Caché de contenido estático: imágenes, hojas de estilo y scripts se sirven desde el punto de presencia, sin cruzar el Atlántico.
- 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.
- Conmutación por error: si el origen de una región no responde, el servicio global envía el tráfico a otra.
- 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.
- 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 noneEl 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.
- 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:
- 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.
- Sincronización nocturna con la facturación de Barcelona a través de la VPN: sale de Azure, se factura.
- Replicación GZRS de la cuenta de tarjetas hacia North Europe: la replicación geográfica tiene su propio coste de transferencia.
- 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.
- 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 tableBorrar 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/24en Contoso). - Usar
PolicyBasedcuando hace faltaRouteBased. 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-waity 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:
- Marta Ríos administra las VM desde un hotel durante un congreso.
- Los 30 puestos de la oficina de Palma acceden a diario al panel de operaciones y al recurso compartido de Azure Files.
- 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.
- 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.
- ¿Qué servicio de entrega global elegirías y por qué frente a los otros dos?
- ¿Qué contenidos cachearías y cuáles no? Justifica el riesgo de equivocarte.
- Escribe la configuración de la sonda de estado del grupo de orígenes y explica cada parámetro.
- 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.
- Enumera al menos cuatro fuentes de salida de datos en la arquitectura actual de Contoso.
- Para cada una, propón una medida concreta de reducción.
- ¿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:
-
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.
-
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.
- 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- 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 EnabledFront 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 |
- 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-webasnet-appo 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
- ¿Qué es Azure?
- Modelos de servicio, regiones y zonas de disponibilidad
- Crear y configurar tu cuenta de Azure
- Recorrido por el portal de Azure
- Azure Resource Manager: suscripciones, grupos de recursos y etiquetas
- Azure CLI, PowerShell y Cloud Shell
Módulo 2: Servicios principales de Azure
- Máquinas virtuales de Azure
- Escalado y alta disponibilidad del cómputo
- Azure App Service
- Azure Storage: blobs, archivos, colas y tablas
- Redes en Azure: redes virtuales, subredes y NSG
- Conectividad híbrida y entrega global
Módulo 3: Bases de datos de Azure
- Elegir el servicio de datos adecuado
- Azure SQL Database
- Azure Cosmos DB
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Analítica de datos: Data Lake, Data Factory y Synapse
Módulo 4: Seguridad en Azure
- Microsoft Entra ID y gestión de identidades
- RBAC e identidades administradas
- Azure Key Vault
- Protección DDoS y firewall de aplicaciones web
- Microsoft Defender for Cloud
- Gobernanza y cumplimiento con Azure Policy
Módulo 5: Azure DevOps
- Introducción a Azure DevOps
- Azure Repos
- Azure Pipelines: integración continua
- Despliegue continuo con entornos y aprobaciones
- Azure Artifacts
- Infraestructura como código con Bicep
Módulo 6: Servicios avanzados de Azure
- Contenedores en Azure: Container Registry y Container Apps
- Azure Kubernetes Service (AKS)
- Azure Functions
- Azure Logic Apps
- Mensajería y eventos: Service Bus, Event Grid y Event Hubs
- Servicios de IA de Azure
Módulo 7: Monitoreo y gestión
- Azure Monitor: métricas, alertas y paneles
- Log Analytics y consultas KQL
- Application Insights
- Azure Automation y runbooks
- Copias de seguridad y recuperación ante desastres
Módulo 8: Gestión y optimización de costos
- Calculadora de precios y estimación de costes
- Azure Cost Management: análisis, presupuestos y alertas
- Reservas, planes de ahorro y Azure Hybrid Benefit
- Azure Advisor
- Estrategias de optimización y cultura FinOps
