2009年 08月 30日
Windows 7 の DNS 名前解決ができない
nslookup では名前解決できても ping が通らない。
現象は Windows だけ発生するようだ。
Linux (SUSE Linux)ではこの現象はでない。
Microosft ゴールデンコンビ Windows Server + Windows 7 を使っても報告された。
なお ping は飛べども、ローカルLAN内のPCが見えない症状は、Windows 固有のマスターブラウザーの問題です。DNSの問題ではなさそうでした。
Windows 7 ネットワークに表示されない - SUSE + samba で解決する
C:\>nslookup myserver
サーバー: UnKnown
Address: 192.168.1.2
名前: linux01.intra
Address: 192.168.1.99
Aliases: myserver.intra
C:\>ping myserver
ping 要求ではホスト myserver が見つかりませんでした。ホスト名を確認してもう一度実
行してください。
C:\>
-影響-
- Novell Client for Windows Vista/7 で「ツリーが見つかりません」
- Windows ドメインが見つからない
- ローカルプリンタを LPR 接続できない
- LAN 内のイントラネットリソースにホスト名で接続できない
- samba に再接続できない
と言った影響が出ます。
-解決策-
サービスの DNS Client を再起動すると「治ることもある」が他のホストに ping できなくなったりする。

どうも、外部の DNS を参照するとその現象が出る傾向がある。
DHCPクライアントの場合 DHCP サーバ のグローバルオプションから外部の DNSを削除する。 その後 DNS Client を再起動するか > ipconfig /flushdns を実行する
固定IPの場合ネットワークのプロパティから外部のDNSを削除して、LAN内だけを参照すると良いようだ....
外部の名前解決はintra DNSが外部の ISPのDNS から引いてキャッシュする。intra DNS サーバの resolv.conf には ISP の DNS を登録する。

- そもそも”名前解決”という言葉の意味が違う -
Windows の名前解決の仕様で、無茶苦茶で致命的な弱点は、セカンダリDNSがイントラネットではなく、外部ネットワークのDNS を、予備のDNSとして登録しても、何等かの理由で優先DNSが捕まらない場合、DNS クライアントを再起動するまで予備DNSしか見ない事です。これでは ping を飛ばしても、内部ネットワークのリソースにはDNS名で繋がらないわけですね。セカンダリDNSに ISP の DNS や 8.8.8.8 などの google のマジック DNS IP を設定すると、まず、この現象が出ます。
他のシステムは、名前解決はDNSキャッシュを保持せず、DNSサーバーに依存しますが、Windows は DNS サーバーの設定が正しくても、DNSサーバーは参照しません。最初に参照するのは Windows 固有の機能である "DNSキャッシュリゾルバ"という特別な機能です。その次に参照するのがHosts だの Winsock だの NetBios だの、”マスターブラウザ”というMicrosoft 独自の名前解決の機能です。DNS サーバーの設定が正しくても、最後に参照しに行きます。(がうまく動くかどうかはわからない)
その後 「コンピュータの管理」から Service > DNS Client を Restart すると治りました。
※無線LAN のスイッチが入っていると、モバイルルータなどを経由してISPから名前解決しようとします。たまたま隣の家のゲストアカウントだとかコンビニのフリー Wifi に「黙ってオジャマ」して繋がってくれていることもあります。全く餓鬼じゃあンメいしぃ....
それは無理というものです。無線のスイッチは必ず切りましょう...
SOHO 向き無線ルータ、アクセスポイントなどにはDNSは Default Gateway しかみないものもあります。また、DNSも指定ができない場合や、 DNS/DHCP を Disable にできない場合があります。おかしいなと思ったらLANケーブルが外れていて、無線でつながっていました、なんてこともあります。間違って無線ルータなどを DNS サーバーとして捕まえると、まずおかしくなります。困ったことに無線ルータは DHCP を動かさない事には DHCP で無線接続の IP を取れないのですね。だから無線 LAN も内部の DNS を参照するように手動設定するしかない。(意味ねぇよ)そういう仕様の無線ルータは使ってはいけないという事になります。
せめて bootp を転送してくれればありがたいのですが、SOHO 向けの無線ルータの仕様は「買ってみないと分からない」ので、別に有線ルータで外部と接続し、無線LANルータは単なるアクセスポイントとして、あるいは単機能のブリッジ転送してくれる無線アクセスポイントだけ利用した方が良いようです。
多分FONなんかにつながった時は内部に PING できない仕様になっています。
また、IPV4 のネットワーク設定より IPV6 の設定が優先されてしまうようなので IPV6 も無効にするのが良いでしょう。 IPV4 で名前解決できない場合 IPV6 で名前解決してしまうようなケースがあるので、その場合も nslookup で通っても、DNS 名で ping できないことになります。
-zone転送を受ける-
dns1(master) 側で xxxx.intra デバイスを A レコードに登録したら、 dns2(slave)側でゾーンを更新します。
dns2:/var/lib/named/slave # rndc refresh intra
zone refresh queued
dns2:/var/lib/named/slave #
なぜか ゾーンファイルは slave/intraX となりますが、問題ないようです。
--
アプリケーションサーバ・バカな私には、ずいぶん理解するまで時間がかかりましたが、DNS 屋さんからすると当たり前なことなんでしょうね。サーバ屋さんからすると「サーバが落ちたら」ということを考えがちです。そのためのスレーブです。反省しました。このような情報は”DNSの教科書”には書かれていないので、経験です。
このバグまだ引きずっているのでしょうか。
nslookupで名前解決できるが、pingで名前解決できない。
バグではなく仕様っぽいところが実にいやらしい。
Windows 7 ネットワークに表示されない - SUSE + samba で解決する
islandcenter.jp
-Keyword-
Novell Client for Windows 7 SUSE Linux DNS イントラネット Ping NSlookup dig Windows8 Windows10