nslookupで名前解決できるけどブラウザとpingで名前解決ができない


■事象
nslookupで名前解決できるけどブラウザとpingで名前解決ができない。
自鯖構築のWEBサーバの名前解決ができなかった。
昨日まで名前解決できていた。
PCは週に1度シャットダウンする程度で、基本的にはスリープにしている。


■解決策
1.DNSキャッシュをクリアする
2.DNS Clientサービスを再起動する


■原因調査
ぐぐれば結構HITしたので回避策としての解決はできるが、直接的な原因がいまいちつかめない。


環境としては、Win7から自鯖DNS(bind)をプライマリに指定。
自鯖DNSはマスタとスレーブ構成で、Win7からはスレーブを指定。
DNSサーバのマスタ、スレーブともに該当サーバの名前解決は可能であった。
数ヶ月前にドメイン名を変更したが、新旧ゾーンを並行運用。
Win7DNSサフィックスに、旧ドメイン名を指定。
 >今回の大きな要因の1つ。


まず、コマンドプロンプトから、DNSキャッシュをクリアしてみた。

ipconfig /flushdns
DNS リゾルバー キャッシュは正常にフラッシュされました。

 >ブラウザから対象ホストの名前解決できず、またPINGも疎通確認できず。NSLOOKUPは名前解決済み。
次に、サービスから、DNS Clientを停止してみた。
 >ブラウザ、PINGともにアクセスを確認できた。NSLOOKUPは名前解決済み。
再度DNS Clientを起動してみた。
PINGを実行すると、疎通確認ができなかった。
 >ブラウザから対象ホストの名前解決できず、またPINGも疎通確認できず。NSLOOKUPは名前解決済み。


そもそも、pingは名前解決にWinsockを使用し、nslookupはDNSサーバから名前解決を行うようである。
上記結果から、DNSゾルバ・キャッシュに問題があると考えた。
DNS Clinet起動後、ブラウザからWEBサーバへアクセスし、DNSキャッシュを確認。

ipconfig /displaydns >dns.txt
※箇所は修正しているところ。
    ※DNSサーバ名※
    ----------------------------------------
    レコード名 . . . . . : ※DNSサーバ名.変更前ドメイン※
    レコードの種類 . . . : 1
    Time To Live  . . . .: 86386
    データの長さ . . . . : 4
    セクション . . . . . . . : 回答
    A (ホスト) レコード. . . : ※192.168.1.xxx

    ...省略

    ※WEBサーバ.変更後のドメイン※
    ----------------------------------------
    名前が存在しません。

見事に、変更前のドメインがキャッシュに残っていた。
DNSサフィックスの指定を外して、再度DNSキャッシュをフラッシュし、同じように確認したところ、変更後のドメインとなっていた。
そして、WEBサーバ.変更前ドメイン、WEBサーバ.変更後ドメインをブラウザ、PINGから名前解決できることを確認した。


■課題というか備忘録
ここで疑問点がでてくる。
・なぜ昨日まで名前解決ができていたか。
DNS Clientサービスの自動起動は必要か。

変更前ドメインに関しては移行作業も完了していることからZONEを削除しても影響はない。
ゾルバキャッシュは結構な頻度で壊れるものなの?
DNS Clientサービスを停止しても、ブラウザ、PINGへの影響がわからない。サービスの説明読んでも意味がわからん。

DNS クライアント サービス (dnscache) により、このコンピューターのドメイン ネーム システム (DNS) 名がキャッシュされ、フル コンピューター名が登録されます。サービスが停止されると、 DNS 名は引き続き解決されます。しかし、DNS 名のクエリの結果はキャッシュされず、コンピューター名は登録されません。サービスが使用不可にされた場合、このサービスに明示的に依存するサービスはすべて起動できなくなります。

毎回DNSクエリが発行される分には、自鯖DNSキャッシュ利用のためあまり影響がないと考える。
コンピュータ名が登録されないことによるデメリットとは?
DNS Clientに依存するサービスってなんだろ?(デフォルトでは依存しているサービスはない模様)

追記(2012/11/11)

結果的に、DNSサーバを2つ登録していたことが原因とおもわれるが。。。
Priに自鯖DNS、SECにルータ(プロバイダ)のDNSを指定していた。
自鯖DNSは、イントラ内の名前解決するために用意したが、
自己解決できない場合は、外部に問い合わせ、
またイントラネット以外の問い合わせ拒否している。
なので、SECのDNSから自鯖の名前解決は100%できない状態である。
SECのDNS外したらまったく再現しなくなった。

・想定
Win7は問い合わせするときに、SECからも問い合わせしているんじゃまいか。
んで、競合して結果見つからんとか。う〜ん、謎。

また、DNS Clientを止めた場合、CygwinからPython(多分wgsi)を起動した時に
有効になってないと起動できなかった。レアケースかも…。


■参考
Windows 名前解決の順序 - Ask the Network & AD Support Team - Site Home - TechNet Blogs
http://blogs.technet.com/b/jpntsblog/archive/2009/07/13/windows.aspx

名前解決のトラブルシューティングDNSゾルバ・キャッシュ編) − @IT
http://www.atmarkit.co.jp/fwin2k/win2ktips/259dnsresolver/dnsresolver.html