Privater Dienst braucht einen privaten Namen? Private-DNS-Zone erstellen
Private IP-Adressen sind schwer zu merken und können sich beim Ersetzen von Ressourcen ändern. Public DNS ist außerdem der falsche Ort für Namen, die nur innerhalb eines privaten Netzwerks verwendet werden sollen.
Erstelle die Azure-Private-DNS-Zone internal.cloudtrips.dev, verknüpfe sie
mit dem CloudTrips-VNet und erstelle diesen privaten Anwendungsnamen:
web.internal.cloudtrips.dev
WEB02 im verknüpften VNet
|
| fragt Azure-provided DNS
v
Private-DNS-Zone internal.cloudtrips.dev
|
`-- web A Record -> private IP von WEB01
Diese Zone ist privat. Sie benötigt weder eine Internet-Domainregistrierung
noch NS Records bei Vercel oder eine Delegierung von cloudtrips.dev.
Dieser Trip baut auf App braucht ein privates Netzwerk? VNet erstellen und Mehrere Server brauchen eine Adresse? Load Balancer erstellen auf. Behalte
vnet-cloudtrips-test-weusowie die virtuellen Maschinen WEB01 und WEB02.
Public und Private DNS verstehen
Die Public-DNS-Zone aus dem vorherigen Trip und diese private Zone lösen unterschiedliche Probleme:
| Eigenschaft | Public-DNS-Zone | Private-DNS-Zone |
|---|---|---|
| Standort des Resolvers | Internet | Verknüpfte Azure-VNets |
| Typische Antwort | Öffentlicher Endpunkt | Private IP-Adresse |
| Parent-Delegierung | Erforderlich | Nicht erforderlich |
| VNet Link | Nicht verwendet | Erforderlich |
Das Erstellen der privaten Zone allein reicht nicht. Ein Virtual Network Link macht sie für Clients in einem ausgewählten VNet sichtbar. Der Link verbindet keine Netzwerke und erlaubt keinen Datenverkehr durch eine NSG. Er stellt lediglich die DNS-Auflösung dieser Zone bereit.
Vorhandene private Adressen lesen
Lies die aktuellen privaten IP-Adressen, statt feste Werte anzunehmen:
WEB01_IP=$(az vm list-ip-addresses \
--resource-group rg-cloudtrips-network-test-weu \
--name vm-cloudtrips-web01-test-weu \
--query '[0].virtualMachine.network.privateIpAddresses[0]' \
--output tsv)
WEB02_IP=$(az vm list-ip-addresses \
--resource-group rg-cloudtrips-network-test-weu \
--name vm-cloudtrips-web02-test-weu \
--query '[0].virtualMachine.network.privateIpAddresses[0]' \
--output tsv)
printf 'WEB01: %s\nWEB02: %s\n' "$WEB01_IP" "$WEB02_IP"
Die Werte sollten aus snet-app stammen, beispielsweise 10.20.1.x.
Private-DNS-Zone erstellen
Suche im Azure-Portal nach Private DNS zones, wähle + Create und konfiguriere:
Subscription: CloudTrips TEST
Resource group: rg-cloudtrips-network-test-weu
Name: internal.cloudtrips.dev
Wähle Review + create > Create und öffne danach die Zone. Azure erstellt automatisch einen SOA Record. Anders als bei einer Public-DNS-Zone müssen ihre Nameserver nicht zu einem öffentlichen DNS-Anbieter kopiert werden.

Der entsprechende CLI-Befehl lautet:
az network private-dns zone create \
--resource-group rg-cloudtrips-network-test-weu \
--name internal.cloudtrips.dev
Zone mit dem VNet verknüpfen
Öffne in internal.cloudtrips.dev Settings > Virtual network links und
wähle + Add. Konfiguriere:
Link name: link-cloudtrips-test-weu
Subscription: CloudTrips TEST
Virtual network: vnet-cloudtrips-test-weu
Enable auto registration: Deaktiviert
Lass die automatische Registrierung deaktiviert. Dieser Trip erstellt einen gezielten Anwendungs-Record. Auto-Registration ist nützlich, wenn Azure VM-Records automatisch erstellen und entfernen soll. Sie kann aber Namen für alle unterstützten VMs im verknüpften VNet hinzufügen und wird für Private-Endpoint-Zonen nicht benötigt.
Wähle OK und warte, bis der Linkstatus Completed lautet.

Der entsprechende CLI-Befehl liest zuerst die VNet-Ressourcen-ID und erstellt danach den Link:
VNET_ID=$(az network vnet show \
--resource-group rg-cloudtrips-network-test-weu \
--name vnet-cloudtrips-test-weu \
--query id \
--output tsv)
az network private-dns link vnet create \
--resource-group rg-cloudtrips-network-test-weu \
--zone-name internal.cloudtrips.dev \
--name link-cloudtrips-test-weu \
--virtual-network "$VNET_ID" \
--registration-enabled false
Privaten A Record erstellen
Kehre zur Zonenübersicht zurück und wähle + Record set. Konfiguriere:
Name: web
Type: A
TTL: 300
IP address: der zuvor gelesene WEB01_IP-Wert
Wähle OK. Der vollständige Name lautet
web.internal.cloudtrips.dev; die Antwort ist die private IP von WEB01.

Erstelle denselben Record mit der CLI:
az network private-dns record-set a create \
--resource-group rg-cloudtrips-network-test-weu \
--zone-name internal.cloudtrips.dev \
--name web \
--ttl 300
az network private-dns record-set a add-record \
--resource-group rg-cloudtrips-network-test-weu \
--zone-name internal.cloudtrips.dev \
--record-set-name web \
--ipv4-address "$WEB01_IP"
Verwende entweder die Portal-Schritte oder die CLI-Befehle, nicht beide. Sonst versuchst du, dieselben Ressourcen zweimal zu erstellen.
Auflösung aus dem verknüpften VNet prüfen
Dein Mac befindet sich außerhalb des verknüpften VNets. Ein lokaler dig ist
daher kein gültiger positiver Test. Führe die Abfrage mit Azure VM Run Command
auf WEB02 aus:
az vm run-command invoke \
--resource-group rg-cloudtrips-network-test-weu \
--name vm-cloudtrips-web02-test-weu \
--command-id RunShellScript \
--scripts "getent ahostsv4 web.internal.cloudtrips.dev"
Die Ausgabe sollte den in WEB01_IP gespeicherten Wert enthalten.

Beweise nun, dass der Name für die Anwendung und nicht nur für DNS funktioniert:
az vm run-command invoke \
--resource-group rg-cloudtrips-network-test-weu \
--name vm-cloudtrips-web02-test-weu \
--command-id RunShellScript \
--scripts "curl --silent --show-error http://web.internal.cloudtrips.dev/"
Die Antwort sollte enthalten:
CloudTrips response from WEB01

Dieses Ergebnis beweist drei getrennte Dinge: WEB02 sieht die verknüpfte
private Zone, der web Record wird zu WEB01 aufgelöst und die Netzwerkrichtlinie
erlaubt HTTP von WEB02 zu WEB01. DNS-Auflösung allein garantiert nicht, dass
die Verbindung erlaubt ist.
Bestätigen, dass der Name privat ist
Führe auf deinem Mac aus:
dig web.internal.cloudtrips.dev A +short
Es wird keine öffentliche Antwort erwartet. Das ist die beabsichtigte Sicherheitsgrenze und kein Fehler: Azure-provided DNS stellt die Private-DNS-Zone nur verknüpften VNets und angebundenen Netzwerken mit einem passenden DNS-Forwarding-Design bereit.

Private-DNS-Lab behalten oder entfernen
Behalte Zone, VNet Link und Record für spätere Private-Endpoint- und Hybrid-DNS-Trips. Die Zone selbst veröffentlicht WEB01 nicht im Internet.
Wenn du nur dieses Lab entfernen möchtest, lösche zuerst den VNet Link und
danach internal.cloudtrips.dev. Lösche weder das VNet noch die virtuellen
Maschinen, da andere Networking-Trips sie verwenden.
az network private-dns link vnet delete \
--resource-group rg-cloudtrips-network-test-weu \
--zone-name internal.cloudtrips.dev \
--name link-cloudtrips-test-weu \
--yes
az network private-dns zone delete \
--resource-group rg-cloudtrips-network-test-weu \
--name internal.cloudtrips.dev \
--yes