名前解決の順番を整理する
はじめに
あれなんでホスト名でping通るんだっけという時に毎回ググってしまうので、整理のため、書き残します。
Windowsの優先順位
後述のサイトの内容を総合するとこんな感じかと理解してます。
- hosts
- DNS
- LLMNR
- NBT(NetBios over TCP/IP)
Linuxの優先順位
ディストリビューションやバージョンによって若干異なると思いますが、ざっくりデフォルトでは以下のようです。
- hosts
- DNS
なお、/etc/nsswitch.confで優先順位の変更は可能です。
Windowsの動きを試してみた(hosts vs DNS)
Linuxは割とシンプルだったので、Windowsの動きについて確認してみました。
以下のような構成とします。
win02のhostsはわざとwin01のIPアドレスを異なるもので指定してます。この状態でwin02からwin01に対しping打ってみます。
DNSよりもhostsの設定が優先されました。
Windowsの動きを試してみた(LLMNR vs NBT)
次は以下のような構成とします。
win02のhostsには何も定義せず、DNS設定もなくします。この状態でwin02からwin01に対しping打ってみます。
キャッシュしているNetBios名とIPアドレスがないことを確認し、pingを打つと、NetBiosのキャッシュに入ってました。期待値としてはこのキャッシュに入らず、LLMNRだけで解決することだったのですが。。
なお、Resolve-DnsNameで-LlmnrOnlyオプション指定してwin01は解決できるので、LLMNRが動作していない訳ではなさそうです。
Windowsの動きを試してみた(DNS vs NBT)
上でLLMNRの動作が何ともだったので、LLMNRを無効化して試しました。結果はDNSが優先されました。NetBiosのキャッシュも空のままでした。
おわりに
LLMNRとNBTあたりの優先順位はもしかすると違うところがあるのかもしれないのですが、Windowsは多層的に名前解決をする仕組みがあることを再認識しました。そもそもLLMNRの存在知らなかったし。。
あと、Resolve-DnsNameが便利そうということを知れたのも収穫でした。
おまけ
AWSとかAzureとかでNBTとLLMNRの動きを試していたのですが、どうしてもうまくいかず、なんでだろうと思ったら、VPCやVNETではブロードキャストパケットやマルチキャストパケットを通さないようにしているからでした。。
Discussion