知識マップ: Windowsの名前解決の順序 ── hosts・DNSキャッシュ・LLMNR/mDNS・DoH
記事「Windowsの名前解決の順序 ── hosts・DNSキャッシュ・LLMNR/mDNS・DoH」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
Windowsで名前をIPアドレスにする処理はひとつではない。.NETのDns.GetHostAddressesや、宛先へ直接接続するHttpClientはWinsockのgetaddrinfoを呼び(HTTPプロキシ経由では宛先の名前はプロキシ側で解決される)、その下でDNSクライアントサービスがキャッシュ(サービス起動時にhostsファイルを読み込んだもの)→DNSサーバー→単一ラベル名のときだけLLMNR・NetBIOSの優先順位で解決する(既定ではDNSとリンクローカルは並行に問い合わせ、最適化を無効にしたときだけ直列になる)。応答は肯定でも否定でもキャッシュに入り、否定応答は既定5秒のあいだ再試行を失敗させ、ipconfig /displaydnsに「Name does not exist」と出る。ipconfig /flushdns(Clear-DnsClientCache)はそれを捨てる。点を含まない単一ラベル名はサフィックス検索リストで補完されてからDNSに送られ、長いリストは遅延を積み上げる。DNSサーバーが無応答なら開始から1・2・4・8秒の時点で再送して10秒で打ち切り、否定応答が返れば止まり、4番目以降のサーバーには4秒後まで届かない。複数NICでは既定のスマートマルチホーム名前解決が全ネットワークへ並行して問い合わせ、バインド順で採用するため、VPN接続中の結果がPCごとに揺れる。単一ラベル名は既定ではDNSと並行にLLMNRやNetBIOSブロードキャストといった同一サブネット限定の手段にも問い合わせられ、DNSの失敗後に順に試されるのは最適化を無効にしたときだけで(WINSが構成されていればNetBIOSはサブネットを越えられる)、グループポリシー「マルチキャスト名前解決を無効にする」でLLMNRを止めるとDNS未登録の機器の単一ラベル名はLLMNRの経路を失い、NetBTも無効なら引けなくなる。MicrosoftはmDNSに揃えてNetBIOS名前解決とLLMNRを縮退させる方針を示している。Windows 11のDoHはDDRを有効にしていなければ既知のDoHサーバー一覧にあるサーバーにだけ使え、hosts・NRPTと統合されて順序は変えず、「DoHを要求する」はドメイン参加PCに適用しない。Microsoft Edgeは内蔵DNSクライアントとセキュアDNSで列の外にいるため、ブラウザーとアプリの結果は食い違い得る。nslookupはキャッシュ・hosts・NRPTを迂回するので、層ごとの確認はResolve-DnsNameのスイッチと、繋がるPCと繋がらないPCの設定ダンプの差分、Wiresharkのキャプチャで行う。アプリ側は宛先をFQDNで持ち、名前解決の結果と所要時間をログに残し、DNSが問い合わせる候補1つあたり最大10秒(サフィックス検索で候補が複数なら全体はそれを超える)のタイムアウトを見込む。
flowchart LR
accTitle: Windowsの名前解決の順序の知識マップ
accDescr: アプリのgetaddrinfoの下でDNSクライアントサービスがキャッシュ(hostsを含む)→DNSサーバー→単一ラベル名だけLLMNR・NetBIOSの優先順位で解決すること(既定ではDNSとリンクローカルは並行)、否定応答もキャッシュされること、サフィックス検索リストと再送タイムアウトが遅延を生むこと、スマートマルチホーム名前解決とLLMNR無効化と単一ラベル名が一部のPCだけの失敗を生むこと、DoHがDDR無効時は既知のサーバー一覧を前提に順序を変えずに輸送路を替えること、ブラウザーの内蔵リゾルバーとセキュアDNSがアプリとの食い違いを生むこと、Resolve-DnsNameと設定ダンプとWiresharkで各層を確かめられること、FQDN指定と名前解決ログが業務アプリの対策になることを示す関係図
windows_dns_client_service["DNSクライアントサービス"]
dns_resolver_cache["DNSリゾルバーキャッシュ"]
single_label_name["単一ラベル名"]
llmnr["LLMNR"]
doh_windows_dns_client["Windows DNSクライアントのDoH"]
dns_gethostaddresses["Dns.GetHostAddresses"]
getaddrinfo["getaddrinfo"]
hosts_file["hostsファイル"]
negative_dns_cache["否定応答のキャッシュ"]
ipconfig_flushdns["ipconfig /flushdns / Clear-DnsClientCache"]
get_dnsclientcache["Get-DnsClientCache / ipconfig /displaydns"]
resolve_dnsname["Resolve-DnsName"]
nslookup["nslookup"]
nrpt["名前解決ポリシーテーブル(NRPT)"]
dns_suffix_search_list["DNSサフィックス検索リスト"]
name_resolution_delay["名前解決の遅延"]
dns_client_retry_timeout["DNSクライアントの再送とタイムアウト"]
smart_multihomed_name_resolution["スマートマルチホーム名前解決"]
group_policy["グループポリシー"]
partial_pc_name_resolution_failure["一部のPCだけ名前解決できない"]
netbios_over_tcpip["NetBIOS over TCP/IP(NetBT)"]
wins["WINS"]
turn_off_multicast_name_resolution_policy["「マルチキャスト名前解決を無効にする」ポリシー"]
mdns["mDNS"]
fqdn_destination["宛先のFQDN指定"]
business_app_destination_config["業務アプリの宛先設定"]
known_doh_server_list["既知のDoHサーバー一覧"]
require_doh_policy["「DoHを要求する」設定"]
active_directory["Active Directory(AD DS)"]
microsoft_edge["Microsoft Edge"]
edge_built_in_dns_client["Edgeの内蔵DNSクライアント"]
browser_secure_dns["ブラウザーのセキュアDNS"]
browser_app_name_resolution_mismatch["ブラウザーとアプリの名前解決結果の食い違い"]
ipv6_address_preference["IPv6優先のプレフィックスポリシー"]
disabledcomponents_prefer_ipv4["DisabledComponentsによるIPv4優先"]
wireshark["Wireshark"]
name_resolution_config_dump["名前解決設定のダンプと差分比較"]
name_resolution_logging["名前解決結果のログ"]
dns_gethostaddresses -->|"利用する"| getaddrinfo
getaddrinfo -->|"利用する"| windows_dns_client_service
windows_dns_client_service -->|"利用する"| dns_resolver_cache
hosts_file -->|"に保存される"| dns_resolver_cache
negative_dns_cache -->|"に保存される"| dns_resolver_cache
ipconfig_flushdns -->|"軽減する"| negative_dns_cache
dns_resolver_cache -->|"で確認できる"| get_dnsclientcache
dns_resolver_cache -->|"で確認できる"| resolve_dnsname
hosts_file -->|"で確認できる"| resolve_dnsname
nslookup -->|"両立しない"| dns_resolver_cache
nslookup -->|"両立しない"| nrpt
nrpt -->|"で確認できる"| resolve_dnsname
single_label_name -->|"利用する"| dns_suffix_search_list
dns_suffix_search_list -.->|"原因になり得る"| name_resolution_delay
windows_dns_client_service -->|"利用する"| dns_client_retry_timeout
dns_client_retry_timeout -.->|"原因になり得る"| name_resolution_delay
smart_multihomed_name_resolution -->|"で構成できる"| group_policy
smart_multihomed_name_resolution -.->|"原因になり得る"| partial_pc_name_resolution_failure
single_label_name -.->|"利用する"| llmnr
single_label_name -.->|"利用する"| netbios_over_tcpip
netbios_over_tcpip -.->|"利用する"| wins
single_label_name -.->|"原因になり得る"| partial_pc_name_resolution_failure
turn_off_multicast_name_resolution_policy -->|"防止する"| llmnr
turn_off_multicast_name_resolution_policy -.->|"原因になり得る"| partial_pc_name_resolution_failure
llmnr -->|"で確認できる"| resolve_dnsname
mdns -->|"の後継"| llmnr
mdns -->|"の後継"| netbios_over_tcpip
fqdn_destination -.->|"防止する"| partial_pc_name_resolution_failure
fqdn_destination -->|"推奨される対応"| business_app_destination_config
hosts_file -.->|"用いるのは非推奨"| business_app_destination_config
doh_windows_dns_client -.->|"前提とする"| known_doh_server_list
doh_windows_dns_client -->|"利用する"| hosts_file
doh_windows_dns_client -.->|"利用する"| nrpt
doh_windows_dns_client -->|"で構成できる"| group_policy
require_doh_policy -->|"用いるのは非推奨"| active_directory
require_doh_policy -.->|"原因になり得る"| partial_pc_name_resolution_failure
microsoft_edge -->|"利用する"| edge_built_in_dns_client
browser_secure_dns -->|"利用する"| edge_built_in_dns_client
browser_secure_dns -->|"で構成できる"| group_policy
browser_secure_dns -.->|"原因になり得る"| browser_app_name_resolution_mismatch
edge_built_in_dns_client -.->|"原因になり得る"| browser_app_name_resolution_mismatch
getaddrinfo -->|"利用する"| ipv6_address_preference
disabledcomponents_prefer_ipv4 -->|"軽減する"| ipv6_address_preference
windows_dns_client_service -->|"で確認できる"| wireshark
partial_pc_name_resolution_failure -.->|"で確認できる"| name_resolution_config_dump
name_resolution_logging -->|"利用する"| dns_gethostaddresses
name_resolution_logging -->|"推奨される対応"| business_app_destination_config
business_app_destination_config -.->|"前提とする"| dns_client_retry_timeout
概念間の関係(全48件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Dns.GetHostAddressesはgetaddrinfoを利用します。
- getaddrinfoはDNSクライアントサービスを利用します。
- DNSクライアントサービスはDNSリゾルバーキャッシュを利用します。
- hostsファイルはDNSリゾルバーキャッシュに保存されます。
- 否定応答のキャッシュはDNSリゾルバーキャッシュに保存されます。
- ipconfig /flushdns / Clear-DnsClientCacheは否定応答のキャッシュを軽減します。
- DNSリゾルバーキャッシュはGet-DnsClientCache / ipconfig /displaydnsで確認できます。
- DNSリゾルバーキャッシュはResolve-DnsNameで確認できます。
- hostsファイルはResolve-DnsNameで確認できます。
- nslookupはDNSリゾルバーキャッシュと両立しません。
- nslookupは名前解決ポリシーテーブル(NRPT)と両立しません。
- 名前解決ポリシーテーブル(NRPT)はResolve-DnsNameで確認できます。
- 単一ラベル名はDNSサフィックス検索リストを利用します。
- DNSサフィックス検索リストは名前解決の遅延の原因になることがあります。
- DNSクライアントサービスはDNSクライアントの再送とタイムアウトを利用します。
- DNSクライアントの再送とタイムアウトは名前解決の遅延の原因になることがあります。
- スマートマルチホーム名前解決はグループポリシーで構成できます。
- スマートマルチホーム名前解決は一部のPCだけ名前解決できないの原因になることがあります。
- 単一ラベル名はLLMNRを利用します。
- 単一ラベル名はNetBIOS over TCP/IP(NetBT)を利用します。
- NetBIOS over TCP/IP(NetBT)はWINSを利用します。
- 単一ラベル名は一部のPCだけ名前解決できないの原因になることがあります。
- 「マルチキャスト名前解決を無効にする」ポリシーはLLMNRを防ぎます。
- 「マルチキャスト名前解決を無効にする」ポリシーは一部のPCだけ名前解決できないの原因になることがあります。
- LLMNRはResolve-DnsNameで確認できます。
- mDNSはLLMNRの後継に当たります。
- mDNSはNetBIOS over TCP/IP(NetBT)の後継に当たります。
- 宛先のFQDN指定は一部のPCだけ名前解決できないを防ぎます。
- 宛先のFQDN指定は業務アプリの宛先設定に対する本記事の推奨です。
- hostsファイルを業務アプリの宛先設定に用いることは推奨されません。
- Windows DNSクライアントのDoHは既知のDoHサーバー一覧を前提とします。
- Windows DNSクライアントのDoHはhostsファイルを利用します。
- Windows DNSクライアントのDoHは名前解決ポリシーテーブル(NRPT)を利用します。
- Windows DNSクライアントのDoHはグループポリシーで構成できます。
- 「DoHを要求する」設定をActive Directory(AD DS)に用いることは推奨されません。
- 「DoHを要求する」設定は一部のPCだけ名前解決できないの原因になることがあります。
- Microsoft EdgeはEdgeの内蔵DNSクライアントを利用します。
- ブラウザーのセキュアDNSはEdgeの内蔵DNSクライアントを利用します。
- ブラウザーのセキュアDNSはグループポリシーで構成できます。
- ブラウザーのセキュアDNSはブラウザーとアプリの名前解決結果の食い違いの原因になることがあります。
- Edgeの内蔵DNSクライアントはブラウザーとアプリの名前解決結果の食い違いの原因になることがあります。
- getaddrinfoはIPv6優先のプレフィックスポリシーを利用します。
- DisabledComponentsによるIPv4優先はIPv6優先のプレフィックスポリシーを軽減します。
- DNSクライアントサービスはWiresharkで確認できます。
- 一部のPCだけ名前解決できないは名前解決設定のダンプと差分比較で確認できます。
- 名前解決結果のログはDns.GetHostAddressesを利用します。
- 名前解決結果のログは業務アプリの宛先設定に対する本記事の推奨です。
- 業務アプリの宛先設定はDNSクライアントの再送とタイムアウトを前提とします。
主要概念の定義
機械可読データ
このデータセットについて
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。