仕様を厳密に調べたわけではなく、実際にやったらこうなった、という結果です。
■ 前提
- Windows 7(以下、クライアント) から ping を打つ時の名前解決の挙動の検証。
- あて先は存在しない名前。
- ping 実行後はクライアント上でDNSキャッシュの削除「ipconfig /flushdns」、NetBISO名のキャッシュの削除「nbtstat -R」を実施。
- クライアントはActive Directoryドメインには参加せず、ワークグループ環境。
- クライアントは固定IPアドレス。
- LLMNR、NetBIOS over TCP/IP、IPv4、IPv6は有効。
■ 結果
名前の指定方法と、試みる名前解決方法の順番。
| コマンド\DNSサフィックス | なし | local | dom.local |
| ping host1 | LLMNR>NBT | DNS>LLMNR>NBT | DNS>LLMNR>NBT |
| ping hsot1.local | DNS>LLMNR>NBT | DNS>LLMNR>NBT | DNS>LLMNR>NBT |
| ping host1.dummy | DNS>NBT | DNS>NBT | DNS>NBT |
| ping host1.dom.local | DNS>NBT | DNS>NBT | DNS>NBT |
この .local というのは実装上特別なようで、
http://technet.microsoft.com/ja-jp/library/bb878128.aspx
によると、
hostname.local の形式の名前をクエリすることに慣れているユーザーに対する利便性として、Windows Vista は hostname.local という名前を hostname に変換し、LLMNR を使用して単一ラベルの名前を解決しようとします。だそうです。たとえば上記の結果のうち、DNSサフィックスなしで「ping host.local」を
実行したとき時にLLMNRで「host1」を問い合わせていました。
補足ですがNetBIOS名は15文字が制限なので、「host1.dom.local」はぎりぎりです。「host12.dom.local」とかだと、NBTで問い合わせしなくなります。
今回は、存在しない名前をあて先にしています。存在する名前にすると結果が変わってくると思います。たとえばLLMNRで解決できればNBTで問い合わせしなくなる、とかです。
NBTについては互換性のため残すのはしょうがないと思いますが、Vistaからの新しい仕様(LLMNR)の追加でさらに複雑化してきましたね・・・

