例えば,サーバーのマシン名は,yyyyyyyの名前でxxxxx.localドメインのDNSに登録して場合で以下のような問題が発生する。
Windowsのコマンドプロンプトで,以下のようにnslookupで名前解決できるか確認すると,
D:\home\ueno>nslookup yyyyyyy.xxxxx.local Server: xxxxx-s3.xxxxx.local Address: 192.168.1.8 Name: yyyyyyy.xxxxx.local Address: 192.168.1.231
と結果が返ってくる。 これは,正常にDNS(192.168.1.8のマシン)に登録されている事がわかる。
しかしこの状態で,IEで,http://yyyyyyy.xxxxx.local をURLと入力してアクセスしてみると,ページが表示されない。
これはIE上でyyyyyyy.xxxxx.localの名前解決が出来ないことを意味する。
IEではなく,
D:\home\ueno>ping yyyyyyy.xxxxx.local
としても名前解決が失敗する。
nslookupでは正常に名前解決できるのに,IEやpingでは名前解決できないといった不思議な現象な問題が発生する。
どうもこの問題は,Windowsクライアントの名前解決に問題があることが原因である。
IPパケットを監視すると,nslookupはDNSの問い合わせ/回答パケットが発生するが,IEやpingの場合は全く問い合わせパケットをWindowsマシンが出していない。
nslookupは正常に動作することから,WindowsクライアントマシンのDNSのキャッシュ関連で問題があることが予想される。(nslookupはWindowsのDNSキャッシュを使用しないため。)
一度名前解決が出来ないと,キャッシュにそのことが保持され,いつまでたってもDNSを引きに行かないということが発生する。
以下のことをするとこれが解決する。
1の方法で一時的に正常になるのは,正常にDNSで名前解決が出来るとそれを一定時間キャッシュして,そのキャッシュが有効期間の場合はその情報を使うからである。その後は,名前解決の問い合わせを出さなくなるので,以後名前解決は失敗してしまう。
それとこの方法では一時的にしか解決できないため,これでは不十分である。
DNSのキャッシュを調べるには,
D:\home\ueno>ipconfig /displaydns
とすると,現在キャッシュしている名前がリストアップされる。 キャッシュを削除するには,
D:\home\ueno>ipconfig /flushdns
とすれば良い。
2のDNS Clientサービスを停止する方法の場合は,キャッシュを使わない事になるので,必ずDNS問い合わせを行うロジックになり,上手く動作するようになる。
が,後で述べるようにアクティブディレクトリへのログインが出来なくなってしまう問題がある。
3のWindows XPのKB951748更新のアンインストールに相当するWindows 7は最初からこの問題を含んでいるんで,Windows 7やVistaの場合は,このやり方と同様なアプローチはできないと思う。
4の場合は,各クライアントマシンに全て行う必要がある。そもそもこれが出来ればDNSは使わない。
5の場合は,.local周りの処理のバグなので,.localドメイン名は使用しなければ問題が発生しないと考えられる。だが既に運用している場合ドメイン名を代えるのは面倒くさいこともある。
というように,上手く解決できるソリューションが見つからない。
一番簡単なのは,DNS Clientサービスを停止させることだが,この場合問題となるのがアクティブディレクトリへログイン出来なくなってしまうということだ。ADへのログインが必要ない場合は,これがいい方法と思う。
また,なぜ,IEやping等でDNSへ名前問い合わせをしなくなってしまうかだが,おそらくローカルネットワークドメイン名をxxxxx.localを使用しているからだと思う。正確には,.localを使用するとおそらくDNSを引きに行かなくなってしまうのだと思う。
.localを使うことは,マイクロソフトのアクティブディレクトリ構築時に推奨されている設定なのだが・・・
それにしてもマイクロソフトには,困ったものである。アクティブディレクトリの使用がいかに少ないかがよくわかる。 この様な理由から,ADを構築するような場合には,注意する必要があります。ローカルネットワークのドメイン名には,.localは使用せず以下を使うべきです。
.private .intranet .internal .lan
新しくコメントをつける