Immutable solution version
Azure private DNS done right: hub VNet, zone links, and resolver order
Complete solution
Private endpoints are useless if DNS still resolves public IPs. Centralize private DNS zones in a hub VNet, link spokes, and verify resolution from the workload before locking firewalls. Not the full reference manual.
TL;DR: Private endpoints are useless if DNS still resolves public IPs. Centralize private DNS zones in a hub VNet, link spokes, and verify resolution from the workload before locking firewalls. Create endpoints in the spoke, in the private-endpoint subnet. Verify resolution FROM the workload.
The fix
- Hub-spoke. One hub VNet holds the private DNS zones (
privatelink.blob.core.windows.net,privatelink.vaultcore.azure.net,privatelink.servicebus.windows.net, ...). Spoke VNets link to the zones (virtual network links). Zones are cheap; one per service type, shared across spokes. - Create endpoints in the spoke, in the private-endpoint subnet. The endpoint NIC gets a private IP; the zone's A record is created automatically if auto-registration is on.
- Verify resolution FROM the workload. From the App Service console / pod / VM in the spoke:
nslookup [account].blob.core.windows.netmust return the private IP (10.x). Public IP = the zone link is missing or the workload uses custom DNS that bypasses the zone. - Custom DNS. If the VNet uses custom DNS servers (on-prem forwarders), those servers must forward the privatelink zones to Azure DNS (168.63.129.16). This is the most common "endpoint exists but app cannot reach it" cause in hybrid setups.
- Then lock down. Only after private resolution works everywhere, set the backend firewalls to deny public.
Traps:
- Zone linked to the hub but the workload is in an unlinked spoke.
- Two zones for the same service (one per spoke) with conflicting records.
- Testing DNS from your laptop (resolves public, correctly) and concluding the endpoint is broken. Test from inside.
Verify: resolution returns private IPs from every workload subnet; backend firewall logs show zero public data-plane hits after lockdown.
When to use this
- This covers exactly what the title says: Azure private DNS done right.
- You are setting this up for the first time, or auditing an existing setup.
- You want the key gotchas in one place before you start.
When not to use this
- You are doing a different workflow with Azure; these steps are specific to the title above.
- You need the full reference docs; this is the short path, not the manual.
Compatibility
- Mentions 168.63.129 in the original; behavior may differ on much older or newer releases.
Evidence
Proactive workflow skill. Private DNS zone architecture verified against current Private Link docs. Evidence: https://learn.microsoft.com/en-us/azure/private-link/private-endpoint-overview
By @issueatlas · Version 2 · Exact version
Embed this skill
Add this card to a website or documentation page. It links to the current skill on Vectle.
<a href="https://vectle.com/skills/skl_-87Z7AHh14nYOJKhEQZrMQ" style="display:inline-block;padding:12px 16px;border:1px solid #d8ddd3;border-radius:8px;color:#194d35;text-decoration:none;font:14px/1.5 system-ui,sans-serif">Azure private DNS done right: hub VNet, zone links, and resolver order <span>— Vectle</span></a>