Humanity

Edit the world by your favorite way

Windowsは.(ドット)を含まないホスト名は解決しない

このページのように、nslookupではうまくホスト名解決できるものの、pingではホスト名解決できないという症状が出ていました。
また、tcpdumpしてみてもpingの場合はパケットが一切届いていません。
調べてみると(というかリンク先に書いてありますが)、どうやらnslookupコマンドは、pingInternet Explorer(腐った牛乳)やVimperator(ブラウザ)などの通常のアプリケーションとは違った名前解決を行うようです。

nslookupツールはブラウザ等で使用するリゾルバ(DNSクライアント)とちょっと動きが違います。
例えばDNSサーバを複数設定していても、nslookupは同時に1つのDNSサーバとしか通信しません。
そして#4で回答したとおり、キャッシュも使用しません。
その結果、キャッシュの問題やセカンダリのDNSへの問い合わせ等で
応答が異なる可能性があるということを言いたかったです。

nslookup すると名前が resolve するのに、ping できない 【OKWave】

さらに調べると以下のMicrosoftのページが見つかりました。

Configuring IP Addressing and Name Resolution

上のページはWindows XPがどのようにしてホスト名解決を行っているかのとても詳しい資料(英語)です。
フローチャートがかなり複雑だったものの、どうやら.(ドット)を含む場合と含まない場合で処理が違うことは分かりました。
そこで「windows ホスト名 解決 ドット」で出てきたのが以下のページ。

「.」(ドット)を含まないホスト名を登録する場合、Windowsパソコンからは「ホスト名」+「.」(ドット)で名前解決を行う必要があります。
Windowsでは「.」(ドット)を含まないホスト(ドメイン)名に対しては名前解決が発生しませんので注意して下さい。

登録したホスト名 WindowsからのPINGコマンド 名前解決の可否
pc1 ping pc1 NG(ドットを含まないため)
pc1 ping pc1. OK(ドットを含むため)
www.pc1 ping www.pc1 OK(ドットを含むため)
13−5.EasyDNS設定

強調は私がやりました。
以前は解決できていたような気もするので、そんな仕様が存在するとは全く知りませんでした。
解決策としては、引用にもある通り、.を末尾につけるとうまくいくようです。(「pc1」→「pc1.」)