Windowsの名前解決のトラブルシューティング(DNSリゾルバーキャッシュ編):Tech TIPS
Windowsには、DNSの問い合わせ結果をキャッシュするDNSリゾルバ・キャッシュ機能がある。リゾルバ・キャッシュが働くと、意図しない名前解決結果が得られることがあるので、トラブルシューティング時にはipconfigコマンドで強制的にフラッシュするとよい。
対象OS:Windows 2000 Professional/Windows XP Professional/Windows XP Home Edition/Windows 2000 Server/Windows 2000 Advanced Server
解説
DNSとは、IPアドレスと名前(FQDN名)を(相互に)変換するためのデータベース・サービスであるが、Windows 2000やXPのDNSクライアントには、DNSサーバに問い合わせた結果をシステムの内部にキャッシュしておいて、外部のDNSサーバへの問い合わせをなるべく抑制するという機能が含まれている。これを「DNSリゾルバ・キャッシュ」といい、実際には「DNS Client」サービスが担当している。「リゾルバ(resolver)」とは、名前解決(name resolution)を行うための機能やサービスのことを指す(一般的にはネーム・リゾルバと呼ばれる)。
ネットワーク上のサービスを使う場合、さまざまな場面でFQDN名からIPアドレスへの変換が必要となる。例えばWebブラウザでURLを指定した場合や、エクスプローラでネットワーク上のサーバにある共有リソースを使う場合など、ほかのマシン上のリソースを使う場合は、ほとんどいつもDNSサーバへアクセスしていると考えてよいだろう。Windows 2000やXPでは、従来のWindows 9xやMe、NTなどと違って、このDNSの名前解決に頼る部分が大幅に増えている(従来はNetBIOSのブロードキャストなどを使った名前解決が多かった)。そのため、リゾルバ・キャッシュを使うと、DNSサーバへのクエリーすることなく、アプリケーションに対して高速に応答が返せるし、ネットワーク・トラフィックの抑制にも役に立つ。
Windows 2000/XPにおけるDNSリゾルバ・キャッシュは、次のようにして機能している。
- クライアントがDNSによる名前解決を希望した場合、実際のDNSサーバに問い合わせる前に、まずDNSのリゾルバ・キャッシュの内容を調査する。この中にすでにキャッシュされたDNSのレコードがある場合、その内容をクライアントへ返す。
- キャッシュにヒットしなかった場合は、実際のDNSサーバへクエリーを発行し、その結果のDNSレコードをクライアントへ返すとともに、DNSキャッシュへも格納する。DNSサーバが複数存在する場合は、TIPS「優先DNSサーバと代替DNSサーバの動作について」のようにして、各DNSサーバへ(繰り返し)クエリーを発行する。DNSサーバからの応答が否定応答(応答が戻ってこないのではなく、そのレコードは「存在しない」という結果が戻ってくること)が戻ってきた場合も、その結果をキャッシュしておいて、以後はクライアントへ否定応答を返す。
- キャッシュに保持される時間には限度がある。DNSサーバから返された結果のレコード(SOAリソース・レコード)には必ずTTL(Time To Live。生存時間)が指定されているので、その時間になるまではDNSサーバに対する再クエリーは行われない(キャッシュされる)。ただしこの有効時間は(デフォルトでは)最大で1日(8万6400秒)に制限されており、1日以上経過すれば、元のDNSレコードのTTLにかかわらず、キャッシュから破棄される。否定応答の場合は、最大300秒キャッシュされ、その後キャッシュから破棄される。
- リゾルバ・キャッシュの内容は、システムを再起動したり、「DNS Client」サービスを再起動したりするとすべてフラッシュされ、初期値として、hostsファイルの内容や、システム内で最近解決されたFQDN名などがロードされる。
このように、DNSリゾルバ・キャッシュには、最近利用された名前解決の結果が記録されている。だが場合によっては、好ましくない(つまり、正しくない)名前解決の結果がアプリケーションに返されることがあり、ネットワークがつながらないなどのトラブルを引き起こすこともある。例えばLAN内でDHCPなどを使っている場合、場合によってはIPアドレスと名前の対応が変わってしまい、予期しないホストへ接続しようとしたりすることになる。ファイル・サーバやアプリケーション・サーバならば、固定的なIPアドレスを割り当てて運用することが多いので、このようなトラブルは起こりにくいかもしれないが、クライアントPCの場合は、起動するたびにIPアドレスが変わり、お互いにつながらないというトラブルが発生することがある。
また、ドメイン名やIPアドレス、(ISPなどで)ホスティングされているマシンやサービスの変更など、ネットワーク環境の移行などで名前とIPアドレスの対応が変わった場合も、注意が必要である。古いDNSレコードがキャッシュされていると、新しく設置したはずのネットワーク・サービスへつながらない、などというトラブルが発生しやすい。
このような場合は、キャッシュの内容を強制的にフラッシュ(破棄)して、確実にDNSサーバへの問い合わせが行われるようにする必要がある。また、ネットワークのトラブルシューティング作業を行う場合にも、予期しないDNSレコードに振り回されたりしないように、まずはこのリゾルバ・キャッシュのフラッシュをするように心がけておきたい。といっても、フラッシュする方法は非常に簡単である。
●DNSリゾルバ・キャッシュの内容の表示
DNSリゾルバ・キャッシュの内容を表示するには、コマンド・プロンプト上で「ipconfig /displaydns」コマンドを実行する。これを実行すると、現在キャッシュに入っているDNSレコードの情報の一覧が表示される。場合によってはかなりキャッシュの内容が大きくなっているので、1度テキスト・ファイルにリダイレクトして保存させてから、エディタなどで検索するとよいだろう。
なお、DNSによる名前解決の状態を調べるためにnlsookup.exeコマンドを使うこともあるだろう(こちらの方が多いだろうが)。だがこのコマンドを使うと、DNSリゾルバ・キャッシュの内容とは関係なく、DNSサーバに直接問い合わせが行われ、その結果が表示される。そのため、クライアント・アプリケーションから見たDNSの名前解決の結果とは必ずしも一致しないので、ケース・バイ・ケースで使い分けていただきたい。
C:\>ipconfig /displaydns
Windows IP Configuration
lpr8
----------------------------------------
Record Name . . . . . : lpr8
Record Type . . . . . : 1
Time To Live . . . . : 528518
Data Length . . . . . : 4
Section . . . . . . . : Answer
A (Host) Record . . . : 192.168.0.98
www.goo.ne.jp
----------------------------------------
Record Name . . . . . : www.goo.ne.jp
Record Type . . . . . : 1
Time To Live . . . . : 509
Data Length . . . . . : 4
Section . . . . . . . : Answer
A (Host) Record . . . : 210.150.25.37
……(以下省略)……
●DNSリゾルバ・キャッシュの内容のフラッシュ
DNSリゾルバ・キャッシュの内容をフラッシュ(破棄)するには、コマンド・プロンプト上で「ipconfig /flushdns」コマンドを実行すればよい。システムを再起動したり、「DNS Client」サービスを再起動したり、Windows XPならば「ネットワークの修復」([ネットワーク接続]ツールで、使用しているネットワークのアイコンを右クリックし、メニューから[ネットワークの修復]を選択する)などを行っても同様の効果があるが、コマンド・プロンプト上でこのコマンドを実行するのが一番簡単でよいだろう。
C:\>ipconfig /flushdns
Windows IP Configuration
Successfully flushed the DNS Resolver Cache.
■関連リンク
- LAN または高速インターネット接続の修復オプションについて(マイクロソフト サポート技術情報)
- WinInet で DNS 名前解決キャッシュの更新を反映する方法(マイクロソフト サポート技術情報)
■この記事と関連性の高い別の記事
- WindowsでDNSサーバのキャッシュの内容を調査する(TIPS)
- 優先DNSサーバと代替DNSサーバの動作について(TIPS)
- nslookupの基本的な使い方(イントラネット編)(TIPS)
- DNSサービスのルート・ヒントを変更する(TIPS)
- DNSのラウンドロビン設定を確認する(TIPS)
- Windowsでリモートネットワークの名前解決をhosts/lmhostsで行う(TIPS)
- ネットワークの修復機能とは(TIPS)
- Google Public DNSでWindowsのWeb表示を高速化する(TIPS)
- DNSサーバでゾーンごとに異なるフォワーダを使う(TIPS)
- 分散サービス拒否(DDoS)攻撃を仕掛けるDNS ampとは?(TIPS)
Copyright© Digital Advantage Corp. All Rights Reserved.