Compartir a través de


Reserva a Internet para zonas DNS privadas de Azure

En este artículo se muestra cómo establecer la propiedad ResolutionPolicy en DNS privado de Azure para habilitar la reserva en la recursividad de Internet cuando se recibe una respuesta de NXDOMAIN autoritativa para una zona de Private Link. NXDOMAIN también se conoce como respuesta negativa. Cuando un solucionador DNS recibe (o ha almacenado en caché) una respuesta negativa, no envía ninguna respuesta DNS al cliente DNS y se produce un error en la consulta.

Problema

Las consultas de DNS privadas para escenarios de aislamiento de red y Azure Private Link en distintos inquilinos y grupos de recursos tienen rutas de acceso únicas de resolución de nombres. Esto puede afectar a la capacidad de acceder a los recursos habilitados para Private Link fuera del control de un inquilino. Existen soluciones alternativas basadas en máquinas virtuales para solucionar este problema, pero estas soluciones aumentan la complejidad operativa y están asociadas a riesgos de seguridad y mayores costos.

Solución

La propiedad ResolutionPolicy en DNS privado de Azure es una solución nativa totalmente administrada. Esta propiedad habilita la recursividad pública a través de la flota de resolución recursiva de Azure cuando se recibe una respuesta de NXDOMAIN autoritativa para una zona de vínculo privado y la dirección privada no se resuelve. La directiva de resolución está habilitada en el nivel de vínculo de red virtual con la configuración de NxDomainRedirect. En Azure Portal, NxDomainRedirect se habilita seleccionando Habilitar reserva en Internet en la configuración del vínculo de red virtual.

Definición de directiva

La propiedad ResolutionPolicy está disponible en la versión de API 2024-06-01 o posterior. En el siguiente ejemplo, resolutionPolicy se establece en NxDomainRedirect en el nivel de recurso virtualNetworkLinks:

{
  "id": "'string'",
  "name": '"string'",
  "type": "Microsoft.Network/privateDnsZones/virtualNetworkLinks",
  "location": "global",
  "properties": {
    "provisioningState": "Succeeded",
    "registrationEnabled": bool,
    "resolutionPolicy": "NxDomainRedirect",
    "virtualNetwork": {
      "id": "'string'"
    }
  }
}

Esta configuración está disponible en Azure Portal en: Zonas DNS privadas>Vínculos de red virtual>Habilitar reserva en Internet.

Funcionamiento

Una respuesta NXDOMAIN (RCODE3) significa que el nombre de dominio consultado (Private Link) no existe. Esta respuesta negativa normalmente impide que los solucionadores vuelvan a intentar la consulta hasta que expire la respuesta negativa almacenada en caché.

Cuando la directiva de resolución NxDomainRedirect está habilitada en un vínculo de red virtual, el solucionador recursivo de Azure reintenta la consulta. El solucionador usa el QNAME del punto de conexión público como etiqueta de consulta cada vez que se recibe una respuesta NXDOMAIN de PrivateEdge para ese ámbito de zona privada.

Este cambio se puede ver en la resolución de la cadena CNAME.

C:\>nslookup remoteprivateendpoint.blob.core.windows.net
Server:  UnKnown
Address:  168.63.129.16

Non-authoritative answer:
Name:    blob.mwh20prdstr02e.store.core.windows.net
Address:  203.0.113.33
Aliases:  remoteprivateendpoint.blob.core.windows.net
          remoteprivateendpoint.privatelink.blob.core.windows.net

Limitaciones

  • Esta directiva solo está disponible para las zonas DNS privadas asociadas a los recursos de Private Link.
  • El parámetro ResolutionPolicy solo acepta Default o NxDomainRedirect como valores posibles.

Demostración de la reserva a la resolución de Internet

En el siguiente ejemplo se muestra cómo habilitar la reserva en la resolución de Internet para una zona de vínculo privado (por ejemplo: privatelink.blob.core.windows.net).

Requisitos previos

  • Al menos dos grupos de recursos: cada uno con una red virtual y un punto de conexión privado.
    • Los grupos de recursos pueden estar en regiones diferentes o en la misma región.
    • Las cuentas de almacenamiento se usan con puntos de conexión privados en este ejemplo, pero se pueden vincular otros servicios PaaS.
  • Se requiere al menos una máquina virtual en una de las redes virtuales para ejecutar consultas de DNS.
    • La red virtual donde reside la máquina virtual debe estar vinculada a una de las zonas de vínculo privado.

En esta guía se supone que ha aprovisionado los recursos de requisitos previos antes de continuar. Para obtener más información, consulte Uso de puntos de conexión privados de Azure.

Revisión de zonas DNS privadas

  1. En la página Inicio de Azure Portal, busque y seleccione Zonas DNS privadas.

  2. Revise la lista de nombres y compruebe que al menos dos zonas DNS privadas tienen el mismo nombre (privatelink.blob.core.windows.net). Observe el ejemplo siguiente:

    Recorte de pantalla de la lista de zonas DNS privadas.

  3. Seleccione las zonas de vínculo privado y, a continuación, seleccione Conjuntos de registros.

  4. Compruebe que los registros de las cuentas de almacenamiento están presentes en cada zona privada.

    Nota:

    Las cuentas de almacenamiento que se encuentran en el mismo grupo de recursos tienen registros de recursos en la misma zona DNS privada.
    Las cuentas de almacenamiento que se encuentran en grupos de recursos diferentes tienen registros de recursos en zonas DNS privadas diferentes (con nombre idéntico).

Demostración del error de resolución de DNS

  1. Anote el nombre de dominio completo (FQDN) y la dirección IP de una cuenta de almacenamiento en la primera zona de vínculo privado que se muestra (por ejemplo: myeaststorageacct1.privatelink.blob.core.windows.net, 10.40.40.5).

  2. Anote también el FQDN y la dirección IP de una zona DNS privada diferente con el mismo nombre (por ejemplo: myeaststorageacct2.privatelink.blob.core.windows.net, 10.10.10.5).

    • Al menos una de estas zonas DNS privadas debe tener un vínculo de red virtual a la red virtual donde puede ejecutar consultas desde una máquina virtual.
  3. Abra un símbolo del sistema en la máquina virtual de Azure e intente resolver el FQDN de ambas cuentas de almacenamiento. Observe el ejemplo siguiente:

    C:\>dig myeaststorageacct1.privatelink.blob.core.windows.net +short
    10.40.40.5
    
    C:\>dig myeaststorageacct2.privatelink.blob.core.windows.net +short
    
    
  4. Tenga en cuenta que una cuenta de almacenamiento se resuelve y la otra cuenta de almacenamiento no.

Configuración de la reserva a la resolución de Internet

  1. Seleccione de nuevo cada una de las zonas DNS privadas, seleccione Vínculos de red virtual y, a continuación, seleccione el icono de lápiz "editar". Observe el ejemplo siguiente:

    Recorte de pantalla del vínculo de edición de la red virtual.

  2. En la parte inferior de la página, seleccione Habilitar reserva en Internet y, a continuación, seleccione Guardar.

    Recorte de pantalla de cómo habilitar la reserva.

  3. Repita estos pasos para cada zona de vínculo privado y permita que se actualicen los vínculos de red virtual.

  4. Intente resolver el FQDN de las cuentas de almacenamiento de nuevo. Observe el ejemplo siguiente:

    C:\>dig myeaststorageacct1.privatelink.blob.core.windows.net +short
    10.40.40.5
    
    C:\>dig myeaststorageacct2.privatelink.blob.core.windows.net +short
    blob.bl5prdstr19c.store.core.windows.net.
    203.0.113.161
    

    La cuenta de almacenamiento que no se resolvió ahora se resuelve correctamente a través de Internet, lo que le permite acceder a este recurso habilitado para Private Link.

Puede usar el Explorador de Azure Resource Graph o la CLI de Azure para consultar vínculos de red virtual habilitados para reserva. Consulte los siguientes ejemplos:

resources
| where tostring(properties.resolutionPolicy) contains 'NxDomainRedirect'
| extend privateDnsZone = extract("/privateDnsZones/([^/]+)/", 1, id)
| project privateDnsZone, resourceGroup, properties.resolutionPolicy

Recorte de pantalla de una consulta de gráfico de recursos.

Entrada:

az graph query -q "resources
| where tostring(properties.resolutionPolicy) contains 'NxDomainRedirect'
| extend privateDnsZone = extract('/privateDnsZones/([^/]+)/', 1, id)
| project privateDnsZone, resourceGroup, properties.resolutionPolicy"

Salida:

{
  "count": 4,
  "data": [
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "myresourcegroup"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "mywestrg2"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "mywestrg"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "myeastrg"
    }
  ],
  "skip_token": null,
  "total_records": 4
}

Para mostrar los valores de directiva de resolución para todas las zonas habilitadas para vínculo privado, puede usar las siguientes consultas del Explorador de Azure Resource Graph y la CLI de Azure:

resources
| where tostring(properties) contains 'resolutionPolicy'
| extend privateDnsZone = extract("/privateDnsZones/([^/]+)/", 1, id)
| project privateDnsZone, resourceGroup, properties.resolutionPolicy

Entrada:

az graph query -q "resources
| where tostring(properties) contains 'resolutionPolicy'
| extend privateDnsZone = extract('/privateDnsZones/([^/]+)/', 1, id)
| project privateDnsZone, resourceGroup, properties.resolutionPolicy"

La siguiente salida de ejemplo de la CLI de Azure tiene una de las zonas habilitadas para vínculo privado establecidas en Valor predeterminado (reserva deshabilitada) para demostrar cómo se muestra esto.

Salida:

{
  "count": 4,
  "data": [
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "Default",
      "resourceGroup": "mywestrg"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "myresourcegroup"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "mywestrg2"
    },
    {
      "privateDnsZone": "privatelink.blob.core.windows.net",
      "properties_resolutionPolicy": "NxDomainRedirect",
      "resourceGroup": "myeastrg"
    }
  ],
  "skip_token": null,
  "total_records": 4
}

Pasos siguientes