Conceptos

Cloud DNS Outbound Endpoints: Google Cloud deja que el DNS híbrido salga por un rango privado tuyo

Por Equipo Cloud Privado · · 12 min de lectura
Una VPC envía consultas DNS por un túnel privado rojo hasta un resolver propio, con el rango 35.199.192.0/19 tachado

Las claves en 30 segundos

  • El problema era el origen, no el reenvío. Cuando una zona de reenvío de Cloud DNS consultaba un resolver privado (en tu centro de datos, en Azure o en AWS), la consulta llegaba desde 35.199.192.0/19, un rango de Google que había que anunciar por la conexión híbrida y abrir en el cortafuegos.
  • Los Outbound Endpoints cambian ese origen por una subred proxy-only regional de tu propia VPC, con direccionamiento privado que eliges tú. El DNS pasa a entrar en el mismo modelo de rutas y reglas que el resto del tráfico privado.
  • La IP del endpoint no es la que ve el resolver remoto. Sirve para colocar el endpoint en la red; las consultas salen siempre del rango proxy-only. Es la diferencia con AWS y Azure, donde sí salen de las IP del propio endpoint.
  • Encaja en un modelo hub & spoke: un endpoint en una VPC central de DNS puede servir a zonas de otras VPC sin conectividad de red entre ellas.
  • Está en Preview, solo admite IPv4 y destinos privados, y no se puede mezclar con el reenvío clásico en la misma zona o política.

El DNS es el servicio del que nadie se acuerda hasta que falla, y en una arquitectura híbrida falla de una forma especialmente traicionera: la red está arriba, los túneles también, pero una aplicación en la nube no consigue resolver erp.empresa.local porque la respuesta del DNS de la oficina no sabe volver. Durante años, en Google Cloud, buena parte de esos sustos tenía el mismo origen: el rango 35.199.192.0/19.

Google ha publicado los Cloud DNS Outbound Endpoints, de momento en Preview, y la novedad interesa más a los equipos de redes y de seguridad que a los de DNS. Partimos de un análisis de Juan Gd en Medium que lo resume bien y lo hemos contrastado con la documentación oficial, que añade detalles y alguna precisión.

Cómo funcionaba hasta ahora

Cloud DNS permite crear zonas de reenvío (corp.ejemplo.com se pregunta a tal servidor) y políticas de servidor que mandan todas las consultas de una VPC a resolvers alternativos. Cuando el destino es privado, una IP de tu centro de datos o de otra nube alcanzable por VPN o interconexión, Cloud DNS envía la consulta desde un rango fijo: 35.199.192.0/19.

Ese rango tiene una particularidad: solo es accesible desde una VPC de Google Cloud o desde una red local conectada a ella. No es Internet, pero tampoco es tuyo. Y para que funcionase había que hacer tres cosas en el otro extremo:

  1. Anunciar la ruta de vuelta. La red local tenía que saber que 35.199.192.0/19 se alcanza por el túnel o la interconexión hacia esa VPC. Con rutas dinámicas, eso suponía un anuncio personalizado en la sesión BGP del Cloud Router.
  2. Abrir el puerto 53 (UDP y TCP) desde ese rango en el cortafuegos local.
  3. Asegurar la simetría. La respuesta tenía que volver a la misma VPC de la que salió la consulta, nunca por Internet ni por otra VPC.

Funcionaba, pero chocaba con la manera en que piensan las redes corporativas. Meter un prefijo público ajeno en las tablas de rutas internas, permitirlo en el cortafuegos y explicárselo al auditor genera reticencias razonables. Y había un problema más fino: todas las VPC consultaban desde el mismo rango. El resolver de la oficina no podía distinguir si la pregunta venía de producción, de preproducción o de la VPC de un proveedor, así que no había forma de aplicar reglas distintas a cada entorno.

Qué cambia con los Outbound Endpoints

Un Outbound Endpoint es un recurso regional que se crea dentro de una VPC y se asocia a una zona de reenvío o a una política de servidor. Para crearlo hacen falta, en cada región:

PiezaPara qué sirve
Una VPC y una regiónEl endpoint es regional; se crea uno por región donde haya cargas
Una subred normal y una IPv4 privada dentro de ellaColocar el endpoint en la pila de red de la VPC
Una subred proxy-only regional activa, de /26 como mínimo (--purpose=REGIONAL_MANAGED_PROXY, --role=ACTIVE)El origen real de las consultas DNS que salen hacia los destinos

El borrador del que partimos hablaba de una subred «reversed proxy-only»; el nombre correcto es subred proxy-only regional, la misma familia de subredes que usan los balanceadores de aplicación regionales, y de hecho puede compartirse con ellos dentro de la misma región.

Lo importante está en la tercera fila. La documentación lo dice sin ambigüedad: las consultas salen únicamente del rango de la subred proxy-only, no de la IP del endpoint. Quien configure el cortafuegos del resolver remoto mirando la IP del endpoint se encontrará con que no llega nada.

Reenvío clásicoCon Outbound Endpoint
Origen que ve el resolver remoto35.199.192.0/19, igual para todas las VPCLa subred proxy-only que tú defines
Ruta de vueltaAnunciar un prefijo de Google en tu redUn prefijo privado de tu propio plan de direccionamiento
Reglas por entornoImposible distinguir VPC por origenUn rango distinto por VPC si se quiere
DestinosPrivados y públicosSolo privados (RFC 1918, RFC 6598 o privados declarados)
ProtocoloIPv4IPv4

Esa fila de «reglas por entorno» es, para nosotros, la mejora de fondo. Google lo plantea así en su documentación: crear un endpoint y una zona en cada VPC, cada uno autorizado solo para la suya, permite que el resolver local vea un rango de origen distinto por VPC. Producción puede consultar la zona del ERP y desarrollo no, y eso se decide en el cortafuegos del centro de datos, con las mismas reglas con las que se gobierna el resto del tráfico. Es la idea de la microsegmentación aplicada al DNS.

Por qué no es exactamente lo que hacen AWS y Azure

La comparación con las otras dos grandes nubes es inevitable, porque ambas resolvieron esto hace años con un modelo más directo:

NubeServicioDe dónde salen las consultas
AWSRoute 53 Resolver, outbound endpointDe las IP privadas que eliges para el endpoint en las subredes de tu VPC
AzureDNS Private Resolver, outbound endpointDe una subred dedicada y delegada en exclusiva al resolver (de /28 a /24)
Google CloudCloud DNS, Outbound Endpoint (Preview)De la subred proxy-only regional, no de la IP del endpoint

En AWS, lo que configuras es lo que ves: la IP del endpoint es la IP de origen. En Google hay una capa de indirección, el endpoint por un lado y el rango de salida por otro, que obliga a explicar bien el diseño a quien opera el otro extremo. Coincidimos con la conclusión del artículo de origen: no es tan limpio como el modelo de AWS o Azure, pero resuelve lo que importaba, que era sacar el DNS de un rango ajeno y meterlo en el direccionamiento privado propio.

Hub & spoke sin conectar las VPC entre sí

Hay un detalle de diseño que facilita mucho la vida en organizaciones con decenas de proyectos. Un endpoint no tiene por qué estar en la VPC donde nace la consulta. Las zonas y políticas de una VPC spoke pueden usar un endpoint alojado en una VPC central, un hub de DNS, y Cloud DNS se encarga internamente de llevar la consulta hasta él. Según la documentación, no hace falta conectividad de red entre el hub y la VPC de origen: la que sí necesita alcanzar los destinos es la red del endpoint, por Cloud VPN, Cloud Interconnect o peering con otra VPC.

El resultado es un único punto de salida del DNS hacia la red corporativa, con un único rango que anunciar y que abrir, aunque detrás haya muchas VPC. Para usar un endpoint de otro proyecto hacen falta los permisos de enlace (dns.outboundEndpoints.bindPrivateDNSZone y bindPrivateDNSPolicy). En una VPC compartida, el endpoint y sus subredes se crean en el proyecto anfitrión; no se pueden crear desde un proyecto de servicio.

Si lo que se busca es que las spokes hereden toda la configuración DNS del hub (zonas privadas incluidas), el camino sigue siendo el DNS peering de Cloud DNS, que es independiente de esto.

Alta disponibilidad y límites

Los endpoints son regionales, así que la redundancia hay que diseñarla. Google recomienda al menos dos regiones. Cloud DNS ordena los endpoints asociados a una zona por latencia y tasa de error, prueba primero el mejor y salta al siguiente si falla; cuando el caído se recupera, vuelve a preferirlo. Una VM en una región sin endpoint propio sigue resolviendo a través del mejor endpoint de su VPC.

Los límites que conviene tener presentes antes de diseñar:

  • 10 endpoints por proyecto y región (ampliable con cuota) y hasta 100 por zona o política.
  • Todos los endpoints de una misma zona o política deben pertenecer a la misma VPC.
  • Solo IPv4, tanto en origen como en destino.
  • Solo destinos privados. No sirve como IP de salida fija para consultar DNS públicos; esos se siguen resolviendo por el borde de Google.
  • Un mecanismo por zona o política: o el rango clásico o endpoints, no ambos a la vez.
  • Región, proyecto, red, subred e IP del endpoint no se pueden cambiar: hay que borrarlo y crearlo de nuevo, y antes desasociarlo de todas las zonas.
  • No se puede borrar una subred proxy-only que esté en uso; para cambiarla hay que crear otra como BACKUP, promoverla y esperar a que se vacíe.

Cómo se monta

Con la herramienta de línea de comandos, el flujo es crear la subred proxy-only, crear el endpoint y asociarlo. Los nombres y rangos son de ejemplo:

# 1. Subred proxy-only regional (mínimo /26): será el origen de las consultas
gcloud compute networks subnets create dns-egress-euw1 \
    --network=hub-dns --region=europe-west1 \
    --range=10.200.0.0/26 \
    --purpose=REGIONAL_MANAGED_PROXY --role=ACTIVE

# 2. El endpoint, con una IP de una subred normal de la misma VPC
gcloud beta dns outbound-endpoints create dns-out-euw1 \
    --network=hub-dns --subnetwork=hub-dns-euw1 \
    --location=europe-west1 --endpoint-ip=10.10.0.53

# 3. Asociarlo a una zona de reenvío (o a una política con "dns policies update")
gcloud beta dns managed-zones update corp-ejemplo \
    --outbound-endpoints=projects/PROYECTO/locations/europe-west1/outboundEndpoints/dns-out-euw1,projects/PROYECTO/locations/europe-southwest1/outboundEndpoints/dns-out-esw1

Son comandos beta porque la función está en Preview, con las condiciones habituales de Google para lo que aún no es GA: sin compromiso de soporte completo y con posibilidad de cambios. Para crearlos hacen falta los roles roles/dns.admin y roles/compute.networkAdmin.

Lo que hay que tocar en el otro extremo

Aquí está la mitad del trabajo que no sale en los anuncios. El resolver al que se reenvía vive en tu centro de datos, en tu cloud privado o en otra nube, y allí hay que preparar dos cosas:

  1. La ruta de vuelta hacia el rango proxy-only. El resolver tiene que saber devolver la respuesta por la interconexión o la VPN. Si la red local aprende las rutas de Google por BGP, conviene comprobar que ese prefijo llega de verdad y, si se usan anuncios personalizados en el Cloud Router, añadirlo.
  2. Permitir DNS (UDP y TCP 53) desde ese rango. El TCP no es opcional: las respuestas grandes, como las firmadas con DNSSEC, lo necesitan.

La guía de migración de Google propone un orden prudente, y lo suscribimos: crear subredes y endpoints, preparar rutas y cortafuegos, probar con una zona temporal y una VM, y solo entonces mover las zonas reales. La regla para 35.199.192.0/19 no se quita hasta el final, tras confirmar en los registros que ya no llega nada desde ese rango y que ningún otro servicio de Google depende de ella. Si algo falla, la vuelta atrás es apuntar la zona otra vez al mecanismo clásico.

Un aviso que no es evidente: en migraciones con mucho volumen, Google advierte de unos diez minutos de escalado del nuevo camino, y recomienda mover las zonas de una en una para no perder consultas.

Lo que esto dice del DNS en entornos híbridos

Más allá de Google Cloud, el anuncio refuerza una idea que vemos a menudo en proyectos híbridos y multicloud: el DNS forma parte del plano de red, no es un servicio aparte. Cuando una empresa conecta su infraestructura privada con una o varias nubes públicas, la resolución de nombres cruza las mismas fronteras que el tráfico de aplicación, y debería gobernarse igual:

  • Direccionamiento planificado. El rango proxy-only es un prefijo más del plan de direccionamiento y no debe solaparse con nada del centro de datos ni de las otras nubes. En entornos multicloud, ese plan común es lo primero que conviene tener por escrito.
  • Conectividad privada de verdad. El DNS híbrido depende del túnel o de la interconexión. Hablamos de las opciones (VPN, SD-WAN, overlay) en conectividad entre sedes, y de dónde se cruzan físicamente las redes en los puntos neutros.
  • Cortafuegos con origen identificable. Saber qué entorno pregunta permite limitar qué zonas ve cada uno, que es una medida de ciberseguridad barata y poco aplicada. En firewall, NAT y SDN en Proxmox contamos cómo se traduce esto del lado de la virtualización.
  • Resolvers propios bien expuestos. El resolver interno que recibe estas consultas no debería aceptar peticiones de cualquier origen. En entornos compartidos, además, el DNS es superficie de ataque, como vimos con NATjack.

La mejora de Google no cambia la arquitectura de nadie de la noche a la mañana, pero quita una excepción incómoda. Y en redes, cada excepción que desaparece es una regla menos que explicar en la próxima auditoría.

Preguntas frecuentes

¿Qué IP ve mi DNS local cuando recibe una consulta de Cloud DNS con un Outbound Endpoint? Una dirección de la subred proxy-only regional de la VPC donde está el endpoint. No la IP del endpoint, que solo sirve para colocarlo en la red.

¿Puedo seguir usando 35.199.192.0/19? Sí. El reenvío clásico sigue existiendo. Lo que no se puede es combinar ambos mecanismos en la misma zona de reenvío o política de servidor.

¿Necesito conectar por peering las VPC spoke con la VPC del endpoint? No. Según la documentación de Google, no hace falta conectividad entre el hub y la VPC de origen. La red del endpoint sí debe alcanzar los resolvers de destino.

¿Sirve para reenviar a un DNS público con una IP de salida fija? No. Los Outbound Endpoints solo admiten destinos privados. Las consultas a servidores públicos se resuelven por la infraestructura de Google, sin pasar por el endpoint.

¿Está listo para producción? Está en Preview. Para cargas críticas, lo razonable es probarlo en una zona no esencial, desplegarlo en dos regiones y mantener el camino clásico preparado como vuelta atrás.

Fuentes


¿Conectas tu infraestructura privada con una o varias nubes públicas y el DNS se ha convertido en una colección de excepciones? En Cloud Privado diseñamos entornos híbridos y multicloud sobre centros de datos en España y los conectamos con las nubes públicas que ya uses. Si quieres revisarlo con alguien que mire las dos orillas, hablemos.