Udostępnij przez


Przełączenie się na internet dla prywatnych stref DNS w usłudze Azure

W tym artykule pokazano, jak ustawić właściwość ResolutionPolicy w usłudze Azure Private DNS, aby umożliwić powrót do rekursji internetowej po odebraniu autorytatywnej odpowiedzi NXDOMAIN dla strefy Private Link. NXDOMAIN jest również znany jako negatywna odpowiedź. Gdy program rozpoznawania nazw DNS odbiera (lub buforuje) negatywną odpowiedź, nie wysyła odpowiedzi DNS do klienta DNS i zapytanie kończy się niepowodzeniem.

Problem

Prywatne zapytania DNS dotyczące usługi Azure Private Link oraz scenariuszy izolacji sieci w różnych dzierżawach i grupach zasobów mają unikalne ścieżki rozpoznawania nazw. Może to mieć wpływ na możliwość uzyskiwania dostępu do zasobów korzystających z Private Link poza kontrolą dzierżawcy. Istnieją obejścia oparte na maszynach wirtualnych, aby rozwiązać ten problem, ale te rozwiązania zwiększają złożoność operacyjną i są związane z ryzykiem bezpieczeństwa i wyższymi kosztami.

Rozwiązanie

Właściwość ResolutionPolicy w usłudze Azure Private DNS jest całkowicie zarządzanym, natywnym rozwiązaniem. Ta właściwość umożliwia rekursję publiczną za pośrednictwem floty recursyjnych resolverów platformy Azure, gdy zostanie odebrana autorytatywna odpowiedź NXDOMAIN dla strefy łącza prywatnego i jeśli prywatny adres nie zostanie rozwiązany. Polityka rozwiązywania jest włączona na poziomie łącza sieci wirtualnej z ustawieniem NxDomainRedirect. W portalu Azure NxDomainRedirect jest włączony, wybierając pozycję Włącz powrót do internetu w konfiguracji łącza sieci wirtualnej.

Definicja zasad

Właściwość ResolutionPolicy jest dostępna w interfejsie API w wersji 2024-06-01 lub nowszej. W poniższym przykładzie resolutionPolicy jest ustawiona na NxDomainRedirect na poziomie zasobu virtualNetworkLinks:

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

To ustawienie jest dostępne w witrynie Azure Portal pod adresem: Prywatne strefy DNS>Łącza sieci wirtualnej>Włącz powrót do internetu.

Jak to działa

Odpowiedź NXDOMAIN (RCODE3) oznacza, że zapytana nazwa domeny (Private Link) nie istnieje. Ta negatywna odpowiedź zwykle uniemożliwia programom rozpoznawania nazw ponawianie próby zapytania do momentu wygaśnięcia buforowanej odpowiedzi ujemnej.

Kiedy polityka rozwiązywania NxDomainRedirect jest włączona na łączu sieci wirtualnej, rekurencyjny resolver Azure ponawia zapytanie. Resolver używa publicznego punktu końcowego QNAME jako etykiety zapytania za każdym razem, gdy odpowiedź NXDOMAIN jest odbierana od PrivateEdge dla tego zakresu strefy prywatnej.

Tę zmianę można zobaczyć w rozwiązaniu łańcucha 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

Ograniczenia

  • Ta zasada jest dostępna tylko dla stref prywatnych DNS skojarzonych z zasobami usługi Private Link.
  • Parametr ResolutionPolicy akceptuje tylko wartości Default lub NxDomainRedirect jako możliwe.

Demonstruj powrót do rozwiązania internetowego

W poniższym przykładzie pokazano, jak włączyć rezerwowe rozpoznawanie internetu dla strefy łącza prywatnego (na przykład: privatelink.blob.core.windows.net).

Wymagania wstępne

  • Co najmniej dwie grupy zasobów: każda z siecią wirtualną i prywatny punkt końcowy.
    • Grupy zasobów mogą znajdować się w różnych regionach lub w tym samym regionie.
    • Konta magazynowe są używane z prywatnymi punktami końcowymi w tym przykładzie, ale inne usługi PaaS mogą być powiązane.
  • Co najmniej jedna maszyna wirtualna w jednej z sieci wirtualnych jest wymagana do uruchamiania zapytań DNS.
    • Sieć wirtualna, w której znajduje się maszyna wirtualna, powinna być połączona z jedną ze stref łącza prywatnego.

W tym przewodniku założono, że przed kontynuowaniem zasoby wstępne zostały już przygotowane. Aby uzyskać więcej informacji, zobacz Używanie prywatnych punktów końcowych platformy Azure.

Przeglądanie prywatnych stref DNS

  1. Na stronie głównej witryny Azure Portal wyszukaj i wybierz strefy Prywatna strefa DNS.

  2. Przejrzyj listę nazw i sprawdź, czy co najmniej dwie prywatne strefy DNS mają taką samą nazwę (privatelink.blob.core.windows.net). Zobacz poniższy przykład:

    Zrzut ekranu listy prywatnych stref DNS.

  3. Wybierz strefy linków prywatnych, a następnie wybierz pozycję Zestawy rekordów.

  4. Sprawdź, czy rekordy dla kont magazynowych znajdują się w każdej strefie prywatnej.

    Uwaga

    Konta magazynu, które znajdują się w tej samej grupie zasobów, mają rekordy w tej samej Prywatnej strefie DNS.
    Konta magazynowe znajdujące się w różnych grupach zasobów mają rekordy zasobów w różnych (o identycznych nazwach) prywatnych strefach DNS.

Demonstrowanie niepowodzenia rozpoznawania nazw DNS

  1. Zapisz w pełni kwalifikowaną nazwę domeny (FQDN) i adres IP dla konta pamięci masowej w pierwszej strefie prywatnego łącza pokazanej (na przykład: myeaststorageacct1.privatelink.blob.core.windows.net, 10.40.40.5).

  2. Zanotuj również nazwę FQDN i adres IP dla innej prywatnej strefy DNS o tej samej nazwie (na przykład: myeaststorageacct2.privatelink.blob.core.windows.net, 10.10.10.5).

    • Co najmniej jedna z tych prywatnych stref DNS musi mieć połączenie z siecią wirtualną (VNet), w której można uruchamiać zapytania z maszyny wirtualnej.
  3. Otwórz wiersz polecenia na maszynie wirtualnej platformy Azure i spróbuj rozpoznać pełną nazwę domeny (FQDN) obydwu kont magazynu. Zobacz poniższy przykład:

    C:\>dig myeaststorageacct1.privatelink.blob.core.windows.net +short
    10.40.40.5
    
    C:\>dig myeaststorageacct2.privatelink.blob.core.windows.net +short
    
    
  4. Zwróć uwagę, że jedno z kont magazynowych jest rozpoznawane, a drugie konto magazynowe nie jest rozpoznawane.

Konfigurowanie powrotu do rozwiązania internetowego

  1. Ponownie wybierz każdą prywatną strefę DNS, wybierz pozycję Łącza sieci wirtualnej, a następnie wybierz ikonę ołówka "edytuj". Zobacz poniższy przykład:

    Zrzut ekranu przedstawiający edytowanie linku sieci wirtualnej.

  2. W dolnej części strony wybierz pozycję Włącz powrót do Internetu , a następnie wybierz pozycję Zapisz.

    Zrzut ekranu przedstawiający sposób włączania trybu awaryjnego.

  3. Powtórz te kroki dla każdej strefy łącza prywatnego i poczekaj na zaktualizowanie łączy sieci wirtualnej.

  4. Spróbuj ponownie ustalić w pełni kwalifikowaną nazwę domenową kont magazynowych. Zobacz poniższy przykład:

    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
    

    Konto magazynowe, które wcześniej nie było rozpoznawane, jest teraz pomyślnie rozpoznawane za pośrednictwem internetu, co umożliwia dotarcie do tego zasobu z obsługą Private Link.

Możesz użyć Eksploratora usługi Azure Resource Graph lub interfejsu wiersza polecenia platformy Azure do wykonywania zapytań dotyczących linków sieci wirtualnej z obsługą mechanizmu przełączenia awaryjnego. Zobacz poniższe przykłady:

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

Zrzut ekranu przedstawiający zapytanie grafu zasobów.

Dane wejściowe:

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

Wyjście:

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

Aby wyświetlić wartości zasad rozpoznawania dla wszystkich stref z włączoną obsługą łącza prywatnego, możesz użyć następujących zapytań eksploratora usługi Azure Resource Graph i interfejsu wiersza polecenia platformy Azure:

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

Dane wejściowe:

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

Następujące przykładowe dane wyjściowe Azure CLI przedstawiają jedną ze stref z włączoną obsługą łącza prywatnego ustawioną na Domyślna (rezerwowa wyłączona), aby zademonstrować sposób, w jaki jest to wyświetlane.

Wyjście:

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

Następne kroki