- ベストアンサー
nslookup すると名前が resolve するのに、ping できない
こんにちは。 PC UNIX で DNS を立ち上げましたが、問題が発生しました。知識のあるかたのアドバイスをお願いします。(ToT) クライアント側 (Win2k, 192.168.0.10, dns prime = 192.168.0.3)側から DNS サーバー(FreeBSD, 192.168.0.3, host name = ns.localnet) に nslookup すると、サーバーは ns, ns.localnet の問い合わせに対して正しい IP アドレス (192.168.0.3) を返します。ところが ping ns, ping ns.localnet 等をするとなぜか "unknown host ns" 等の返事が返ってきます。 そこで web server も立ち上げているので IE で、 http://ns/ を見るとでちゃんとホームページを表示します。ちなみに FTP も問題ありません。 おかしいと思いながらその後もう一度 ping ns してみると、なんと今度はちゃんと ping がとおります。 私なりに整理して考えてみるとどうやらクライアントは ping のときに arp に失敗していて、http, ftp のときは成功する、その後でもう一度 ping を行うと arp の cache を用いるので ping が成功するように見えます。 これは何か OS に依存した問題なのでしょうか? それとも私の設定が何か間違っているのでしょうか? もし上記の症状にピーンと来た方がいたらご教示いただけると幸いです… (もしくは判断するのにもっと必要な情報があれば教えてください)
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#6補足より >nameserver が問い合わせに対して IP を正しく返したり、 >誤って「存在しないと回答」することになりますが、今のところそういった事象は出ていないみたいなんです。 > 実はWindows2000では存在するAレコードを存在しないとしてしまうことがあるようです。 自分も何度か遭遇していますし、まわりでも発生しているのを聞いています。 解析しようと思ったときには再現しなくなったので、今となっては原因不明ですが...。 #今回の質問で再現→解析できることを期待しています^ ^;; ちなみに、そうなった場合は、DNS Clientサービスを再起動すると接続できるようになるみたいでした。 あいまいなアドバイスで参考にならないですね...すみません。
その他の回答 (6)
#3,4のものです。 #3補足より >negative cache とはよく知らないのですが、名前解決ができなかった記録ということでしょうか? > ちょっと微妙ですがだいたいそうです。 対象のnameserverがそのホスト(Aレコード)は存在しないと回答したという記録です。 名前解決できなかった と言ってしまうと、単純にnameserverが落ちていたという場合も 含まれると思いますので...。 >よく分からないのですが仮にそのような記録が残っているのだとすれば、 >ping を打ったときに、もう一度 name server に確認を行うのが普通なのではないでしょうか? > 毎回nameserverに問い合わせに行かなくて済むようにするのがキャッシュであり サーバが無いという情報のキャッシュがNegativeCacheです。 あるなしに関係なく、nameserverへの問い合わせを減らすと考えればわかると思いますが...いかがでしょうか? >つまり ping と IE で名前解決の実装が違う…? 詳しくないのですが、 >普通アプリケーションは (unix などでいう)gethostbyname のようなシステムコールを使うので、 >この辺の実装は特に変わらないという理解だったのですが、違うのでしょうか? > 言われているとおりです。 Windows2000であれば、pingとieは同一のリゾルバ機構を使用します。(Windows9x系は違います) 自分が言っていたのは、 pingの時はNegativeCacheが有効で、その後ieを起動した時にたまたまNegativeCacheの有効期限が切れて(クリアされて) ie接続時に再度nameserverへの問い合わせが発生し、今度は通常通りCacheされたということです。 もし、毎回初回pingがNGでieがOKということであれば自分の予想は外れていることになりますが どのような状況なのでしょうか? 確認としては、 "DNS Client"サービスが起動している→キャッシュが有効になる ipconfig /flushdns で一度DNSのキャッシュを削除する ping ns や ping ns.localnet. で応答確認をする ipconfig /displaydns でキャッシュ状況を確認する といったとこでしょうか。
補足
> 対象のnameserverがそのホスト(Aレコード)は存在しないと回答したという記録です。 > 名前解決できなかった と言ってしまうと、単純にnameserverが落ちていたという場合も > 含まれると思いますので...。 なるほど!理解できました。ありがとうございます。 …とすると nameserver が問い合わせに対して IP を正しく返したり、誤って「存在しないと回答」することになりますが、今のところそういった事象は出ていないみたいなんです。 > もし、毎回初回pingがNGでieがOKということであれば自分の予想は外れていることになりますが > どのような状況なのでしょうか? あれから tcpdump を入れて何度かトライしてますが、いつも成功してしまっています (T_T) また事象が確認できたら書き込みます。
#4です。 ちょっと表現がよろしくなかったので補足します。 >nslookupで名前解決できても、pingやブラウザ等のアプリケーションで >名前解決できるとは限りません。 > nslookupツールはブラウザ等で使用するリゾルバ(DNSクライアント)とちょっと動きが違います。 例えばDNSサーバを複数設定していても、nslookupは同時に1つのDNSサーバとしか通信しません。 そして#4で回答したとおり、キャッシュも使用しません。 その結果、キャッシュの問題やセカンダリのDNSへの問い合わせ等で 応答が異なる可能性があるということを言いたかったです。
お礼
この点は正しく理解していると思います。ありがとうございます。
Windows2000側のDNSキャッシュの問題でしょう。 で、"ns"のNegative cacheがWindows2000側に残っていたのではないかと思います。 ブラウザ等で使用した時にNegative cacheの有効期限が切れて、通常通りDNSサーバに問い合わせにいった ということではないでしょうか。 ちなみに、nslookupではクライアントのDNSキャッシュは使用しません。 nslookupで名前解決できても、pingやブラウザ等のアプリケーションで名前解決できるとは限りません。
補足
negative cache とはよく知らないのですが、名前解決ができなかった記録ということでしょうか?よく分からないのですが仮にそのような記録が残っているのだとすれば、ping を打ったときに、もう一度 name server に確認を行うのが普通なのではないでしょうか? > ブラウザ等で使用した時にNegative cacheの有効期限が切れて、通常通りDNSサーバに問い合わせにいった ということではないでしょうか。 …で、そのときに名前解決が正しくできたということでしょうか? つまり ping と IE で名前解決の実装が違う…? 詳しくないのですが、普通アプリケーションは (unix などでいう)gethostbyname のようなシステムコールを使うので、この辺の実装は特に変わらないという理解だったのですが、違うのでしょうか?
- nta
- ベストアンサー率78% (1525/1942)
PingですからICMPのパケットを拾えばいいのではないでしょうか。 ルータのアドレスが192.168.0.1であればルーティングテーブルは問題ないと思います。しかし、これはPINGが成功するようになった後の状態でしょうか。 「設定」「ネットワークとダイアルアップ接続」には「ローカルエリア接続」以外になにか項目があるでしょうか。
補足
申し送れましたが、我が家の環境ではスイッチングハブを使っています。 さて ICMP を拾う件ですが現状では名前解決が問題なくできているため、ping も普通にとおります。再現性のない事象なので面倒なのですがおりをみて ping が通らなくなったときに確認してみたいと思います。(でも単純に ICMP のパケットが送出されていないだけなんだろうなと思いますが) > 「設定」「ネットワークとダイアルアップ接続」には「ローカルエリア接続」以外になにか項目があるでしょうか。 それ一つだけです。
- nta
- ベストアンサー率78% (1525/1942)
Linuxにパケットキャプチャをインストールしてパケットを確認すれば原因は分かると思うのですが。http://x68000.startshop.co.jp/~68user/net/tcpdump.html ARPはIPからMACアドレスへの解決手段なのでここでは関係ないと思います。Windows OSにはUNC名もしくはホスト名からIPアドレスへの変換のしくみ(名前解決)が複数存在するのでそのあたりの問題か、ネットワーク接続もしくはブリッジが複数存在してデフォルトの経路が決められないのかもしれません。route PRINTコマンドでルーティングテーブルを調べてみて下さい。
補足
おっしゃるとおりで arp の問題はここでは無関係でした。 で、tcpdump はもちろんインストールすることは簡単なのですが、具体的にそこで(nslookup 等で拾えない)どのようなパケットを拾えばいいのでしょうか? route print の結果を以下に示しますが、特に問題はないと思われますが、どうでしょうか?ちなみに ブリッジは一台だけで、GW(ADSL用のブロードバンドルーター 192.168.0.1)と各端末の間にあり、ごくごく一般的な NW 構成です。 =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.10 1 127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1 192.168.0.0 255.255.255.0 192.168.0.10 192.168.0.10 1 192.168.0.10 255.255.255.255 127.0.0.1 127.0.0.1 1 192.168.0.255 255.255.255.255 192.168.0.10 192.168.0.10 1 224.0.0.0 224.0.0.0 192.168.0.10 192.168.0.10 1 255.255.255.255 255.255.255.255 192.168.0.10 192.168.0.10 1 Default Gateway: 192.168.0.1 =========================================================================== Persistent Routes: None
- nta
- ベストアンサー率78% (1525/1942)
Windows 2000において「ローカルエリア接続」「TCP/IP」「詳細設定」「DNS」「以下のDNSサフィックスを順に追加する」が設定されていて解決の範囲が制限されていませんか。
補足
回答ありがとうございます。 ご指摘のあった部分は一切デフォルト設定のままで、何も特別な設定は行っていません。DNS サーバーのアドレスは自動に取得するようになっています。
お礼
情報ありがとうございます。 何日かに分けて試しましたが結局事象が全く再現しなくなったので、とりあえずこの質問はクローズいたします (T_T)