Hybrid DNS Designを理解するための前提
hybrid DNSは2方向: Azure resourceがon-prem domainを解決する経路と、on-prem DNS/clientがAzure Private DNS zoneを解決する経路。片方向成功だけでは完成しない。 on-prem→Azure private zoneは、on-prem DNS conditional forwarderからDNS Private Resolver inbound endpoint private IPへ送る。168.63.129.16はAzure VNet内部用で、on-premから直接到達させない。
Azure→on-premはPrivate Resolver outbound endpoint + forwarding rulesetでon-prem DNS targetへ送る。Azure client側はdistributed modelならDefault Azure DNSを維持できる。 DNS packet自体にVPN/ExpressRoute等のnetwork reachabilityが必要。名前解決設計とtransport route/NSG/firewallを別々に検証する。
Private DNS zoneはResolverが存在するVNet、またはqueryを受けるinbound endpointが参照できるVNetへlinkする。 DNS failoverではresolver endpointだけでなくon-prem conditional forwarder target、region failure、upstream DNS consistencyを含めて複数failure domainを試験する。
Control plane / DNS plane / Data plane
Azure DNS → matching ruleset → outbound endpoint → on-prem DNS → authoritative/recursive answer。
client → on-prem DNS → conditional forwarder → inbound endpoint → Azure DNS/linked Private DNS zone。
VPN/ExpressRoute + routing + firewall/NSGでDNS UDP/TCP 53を双方向に運ぶ。DNS controlとnetwork pathの両方が必要。
Query / packet path
- Azure側test clientでon-prem FQDNをqueryする。
- Azure DNSがruleset suffixをmatchし、outbound endpointからon-prem DNSへ送る。
- on-prem DNSがanswerを返しAzure clientへ戻る。
- on-prem側test clientでAzure private FQDNをqueryする。
- on-prem DNSのconditional forwarderがAzure Resolver inbound IPへ送る。
- inbound endpointがlinked Private DNS zone/Azure DNSで解決しanswerを返す。
- 同じ2本のqueryをfailure test時にも再実行し、secondary resolver/pathへの切替を確認する。
仕組みを分解する
Hybrid DNSのincidentでは最初にfailure directionを固定します。「Azure→on-prem」が失敗しているのか、「on-prem→Azure」が失敗しているのかで見るresourceが逆になります。前者はruleset/outbound/target DNS、後者はon-prem conditional forwarder/inbound/Private DNS linkが中心です。両方向ともtimeoutならDNS設定より先にER/VPN、UDR、NSG/firewall、MTU/TCP 53などtransportを疑います。
設計判断
| 判断軸 | 設計方針 |
|---|---|
| Namespace map | on-prem authoritative zones、Azure Private DNS zones、public zonesを一覧化し、suffixごとのauthority/forward targetを1枚にする。 |
| Direction-specific HA | inbound endpoint/region、outbound target DNS、on-prem DNSの冗長性を別々に設計する。 |
| Forwarding scope | `azure.contoso.com`等の必要suffixだけをforwardし、`.` rootを安易に跨がせてunexpected dependencyを作らない。 |
| Observability | resolver resource stateだけでなくquery latency/rcode、target DNS logs、VPN/ER network evidenceをincident timelineへ統合する。 |
確認手順
Read-only verification
- Azure VM→on-prem FQDN、on-prem client→Azure private FQDNを同じchange windowで両方testする。
- resolver endpoint/ruleset/zone linkのcontrol plane snapshotに加え、target DNS serverでquery受信を確認する。
- UDPだけでなく必要に応じTCP 53も確認し、大きいDNS responseやfragmentation問題を切り分ける。
- failover testではprimary resolver/pathを止めた状態で同一queryがsecondary経路で成功するか、復旧後のfailbackも確認する。
Evidence to keep
- resource ID / subscription / region / VNet / subnetを固定し、同名resource取り違えを防ぐ。
- DNS queryはresolver IP、query name、answer/CNAME、TTL、timestampを一緒に保存する。
- network testはsource、resolved destination IP、protocol/port、winning route/security decisionを保存する。
- 変更前後で同じquery/application journeyを再実行し、cache/既存sessionでの見かけ上成功を避ける。
az dns-resolver inbound-endpoint list -g <rg> --dns-resolver-name <resolver> -o jsonc
az dns-resolver forwarding-rule list -g <rg> --ruleset-name <ruleset> -o table
az network private-dns link vnet list -g <dns-rg> -z <private-zone> -o table
nslookup <onprem-name>
nslookup <azure-private-name> <onprem-dns-ip>Get-AzDnsResolverInboundEndpoint -ResourceGroupName <rg> -DnsResolverName <resolver>
Get-AzDnsForwardingRule -ResourceGroupName <rg> -DnsForwardingRulesetName <ruleset>
Test-NetConnection <onprem-dns-ip> -Port 53
障害切り分け
| 症状 | 第一候補 | 証拠 | 次の確認 |
|---|---|---|---|
| on-prem→Azureだけtimeout | conditional forwarder/inbound path | forward target + 53 reachability | inbound IP/route/firewall修正 |
| Azure→on-premだけNXDOMAIN | ruleset suffix/target | rule match + target query | ruleset/authority修正 |
| 両方向timeout | hybrid network transport | ER/VPN route + port53 | network path修正 |
| 短いAは成功、大response失敗 | MTU/UDP fragmentation/TCP53 | dig +tcp/packet capture | transport/firewall調整 |
| region failureでDNS停止 | single resolver/forwarder target | failover configuration | multi-region resolver targets設計 |
変更時の確認と rollback
- conditional forwarder/ruleset変更前にold target/suffix/stateをexportする。
- hybrid DNS切替は両方向を別check-pointに分け、一方向を戻せるようにする。
- 新Resolverへの移行でold VM forwarderを即停止せず、query telemetryを比較してから退役する。
- rollback後はAzure→on-prem/on-prem→Azureのpair testを再実施する。
Current notes — 2026-09-11
2026年のMicrosoft troubleshooting guidanceでも、on-premから168.63.129.16を直接queryする構成は誤りとして扱われます。Private Resolver inbound endpointをon-prem conditional forwarderのtargetにし、directionごとのpathを明示します。