Compartilhar via


Fallback para a Internet para zonas DNS privadas do Azure

Este artigo mostra como definir a propriedade ResolutionPolicy no DNS Privado do Azure para habilitar o fallback para a recursão da Internet quando uma resposta NXDOMAIN autoritativa é recebida para uma zona de Link Privado. O NXDOMAIN também é conhecido como uma resposta negativa. Quando um resolvedor DNS recebe (ou armazena em cache) uma resposta negativa, ele não envia nenhuma resposta DNS ao cliente DNS e a consulta falha.

Problema

As consultas de DNS privado para o Link Privado do Azure e os cenários de isolamento de rede em diferentes locatários e grupos de recursos têm caminhos exclusivos de resolução de nomes. Isso pode afetar a capacidade de acessar recursos habilitados para o Link Privado fora do controle de um locatário. Existem soluções alternativas baseadas em VM para resolver esse problema, mas essas soluções aumentam a complexidade operacional e estão associadas a riscos de segurança e custos mais altos.

Solução

A propriedade ResolutionPolicy no DNS Privado do Azure é uma solução nativa totalmente gerenciada. Essa propriedade permite a recursão pública por meio da frota de resolvedores recursivos do Azure quando uma resposta NXDOMAIN autoritativa é recebida para uma zona de link privado e o endereço privado não é resolvido. A política de resolução é habilitada no nível do link de rede virtual com a configuração NxDomainRedirect. No portal do Azure, o NxDomainRedirect é habilitado pela seleção de Habilitar fallback para a Internet na configuração de link de rede virtual.

Definição de política

A propriedade ResolutionPolicy está disponível na API versão 2024-06-01 ou superior. No exemplo a seguir, resolutionPolicy é definido como NxDomainRedirect no nível de recurso virtualNetworkLinks:

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

Essa configuração está disponível no portal do Azure em: Zonas DNS Privadas>Links de Rede Virtual>Habilitar fallback para a Internet.

Como ele funciona

Uma resposta NXDOMAIN (RCODE3) significa que o nome de domínio consultado (Link Privado) não existe. Essa resposta negativa normalmente impede que os resolvedores repitam a consulta até que a resposta negativa armazenada em cache expire.

Quando a política de resolução NxDomainRedirect é habilitada em um link de rede virtual, o resolvedor recursivo do Azure tenta novamente a consulta. O resolvedor usa o QNAME do ponto de extremidade público como o rótulo de consulta sempre que uma resposta NXDOMAIN é recebida do PrivateEdge para esse escopo de zona privada.

Essa alteração pode ser vista na resolução da cadeia do 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

Limitações

  • Essa política só está disponível para as zonas DNS privadas associadas aos recursos de Link Privado.
  • O parâmetro ResolutionPolicy só aceita Default ou NxDomainRedirect como valores possíveis.

Demonstrar a resolução de fallback para a Internet

O exemplo a seguir mostra como habilitar a resolução de fallback para a Internet para uma zona de link privado (por exemplo: privatelink.blob.core.windows.net).

Pré-requisitos

  • Pelo menos dois grupos de recursos: cada um com uma rede virtual e um ponto de extremidade privado.
    • Os grupos de recursos podem estar em regiões diferentes ou na mesma região.
    • As contas de armazenamento são usadas com pontos de extremidade privados neste exemplo, mas outros serviços de PaaS podem ser vinculados.
  • Pelo menos uma máquina virtual em uma das redes virtuais é necessária para executar consultas DNS.
    • A rede virtual em que a máquina virtual reside deve ser vinculada a uma das zonas de link privado.

Este guia considera que você tenha provisionado os recursos de pré-requisito antes de prosseguir. Para saber mais, confira Usar os pontos de extremidade privados do Azure.

Analisar as zonas DNS privadas

  1. Na página inicial do portal do Azure, procure e selecione Zonas DNS privadas.

  2. Confira a lista de nomes e verifique se pelo menos duas zonas DNS privadas têm o mesmo nome (privatelink.blob.core.windows.net). Consulte o seguinte exemplo:

    Captura de tela da lista de zonas DNS privadas.

  3. Selecione as zonas de link privado e, em seguida, selecione Conjuntos de registros.

  4. Verifique se os registros das contas de armazenamento estão presentes em cada zona privada.

    Observação

    As contas de armazenamento que estão no mesmo grupo de recursos têm registros de recursos na mesma zona DNS privada.
    As contas de armazenamento que estão em grupos de recursos diferentes têm registros de recursos em diferentes zonas DNS privadas (com um nome idêntico).

Demonstrar a falha na resolução de DNS

  1. Anote o FQDN (nome de domínio totalmente qualificado) e o endereço IP de uma conta de armazenamento na primeira zona de link privado mostrada (por exemplo: myeaststorageacct1.privatelink.blob.core.windows.net, 10.40.40.5).

  2. Anote também o FQDN e o endereço IP de uma zona DNS privada diferente com o mesmo nome (por exemplo: myeaststorageacct2.privatelink.blob.core.windows.net, 10.10.10.5).

    • Pelo menos uma dessas zonas DNS privadas precisa ter um link de rede virtual para a VNet em que você possa executar consultas por meio de uma máquina virtual.
  3. Abra um prompt de comando na máquina virtual do Azure e tente resolver o FQDN das duas contas de armazenamento. Consulte o seguinte exemplo:

    C:\>dig myeaststorageacct1.privatelink.blob.core.windows.net +short
    10.40.40.5
    
    C:\>dig myeaststorageacct2.privatelink.blob.core.windows.net +short
    
    
  4. Observe que uma conta de armazenamento é resolvida e a outra não.

Configurar a resolução de fallback para a Internet

  1. Selecione cada uma das zonas DNS privadas novamente, escolha Links de Rede Virtual e, em seguida, o ícone de lápis “editar”. Consulte o seguinte exemplo:

    Captura de tela da edição do link de rede virtual.

  2. Na parte inferior da página, selecione Habilitar fallback para a Internet e escolha Salvar.

    Captura de tela de como habilitar o fallback.

  3. Repita essas etapas para cada zona de link privado e dê tempo para que os links de rede virtual sejam atualizados.

  4. Tente resolver o FQDN das contas de armazenamento novamente. Consulte o seguinte exemplo:

    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
    

    A conta de armazenamento que não estava sendo resolvida agora está sendo resolvida com êxito pela Internet, permitindo que você acesse esse recurso habilitado para Link Privado.

Você pode usar o Explorador do Azure Resource Graph ou a CLI do Azure para consultar links de rede virtual habilitados para fallback. Veja os exemplos a seguir:

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

Captura de tela de uma consulta de grafo 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"

Saída:

{
  "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 exibir os valores de política de resolução para todas as zonas habilitadas para link privado, use as seguintes consultas do Explorador do Azure Resource Graph e da CLI do 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"

O exemplo de saída da CLI do Azure a seguir tem uma das zonas habilitadas para link privado definidas como Padrão (fallback desabilitado) para demonstrar como isso é exibido.

Saída:

{
  "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
}

Próximas etapas