pingの名前解決がDNSと一致しない理由

同意しない


ほとんどの人は、IPアドレス(1)ではなくDNS名(例:server192.168.3.45.lax.company.com)を介してホストを知っているため、DNS名として監視システムに入力します。 したがって、監視システムが実際にユーザーが期待するものを監視していることを確認するために、名前解決が期待どおりに機能するという強い要件があります。

LogicMonitorコレクターがDNS名をIPアドレスに誤って解決する方法についてのサポートリクエストを受け取ることがありますが、DNSはすべて正常に設定されているため、コレクターに問題があります。 ただし、問題は単にホストが名前を解決する方法の相互作用にあり、DNSが名前を解決する方法と常に同じであるとは限りません。

混乱は、人々が名前解決の設定を検証するためによく使用するツールであるという事実にあります– hostnslookup –  名前解決システムを使用します。 彼らは/etc/resolv.confにリストされている(またはActive Directory構成によって渡された)ネームサーバーと通信し、特定のホストが何として解決されるかについてネームサーバーに尋ねます。
ただし、WindowsとLinuxはDNSシステムを使用するだけではありません。 Linuxの/ etc / hostsファイル、WindowsのWindowsSystem32driversetchosts、NIS、NetBIOSの名前解決、nscdなどのキャッシュシステムなど、名前を解決する他のソースがあります。 host or nslookup、ただし、オペレーティングシステムが使用する可能性のある矛盾する情報を返す可能性があります。

簡単な例として、foo.comのアドレスを10.1.1.1に定義するローカルエントリがあることが以下にわかります。

 [[メール保護]:〜] $ cat / etc / hosts 127.0.0.1 www.logicmonitor.com www.logicmonitor.com.localdomain www.logicmonitor.com4 www.logicmonitor.com4.localdomain4 :: 1 www.logicmonitor.comwww.logicmonitor.com。ローカルドメインwww.logicmonitor.com6www.logicmonitor.com6.localdomain6 10.1.1.1 foo.com

一方、 ping プログラムはローカルに設定されたアドレスを使用します:

[[メール保護]:〜] $ ping foo.com PING foo.com(10.1.1.1)56(84)バイトのデータ。 ^ C --- foo.comping統計--- 2パケット送信、0受信、100%パケット損失、時間1725ms

  host & nslookup プログラムはしません:

[[メール保護]:〜] $ host foo.comfoo.comのアドレスは23.21.224.150foo.comのアドレスは23.21.179.138foo.comのメールは1000で処理されます。 [[メール保護]:〜] $ nslookup foo.comサーバー:216.52.126.1アドレス:216.52.126.1#53権限のない回答:名前:foo.comアドレス:23.21.224.150

あまり明白ではない(しかしより一般的な)ケースは、nscd(ネームサービスキャッシュデーモン)が関係している場合です。 Nscdは、オペレーティングシステムに返された結果をキャッシュし、特定の期間の同じ名前のルックアップの結果として返す場合があります。 したがって、DNSレコードが変更され、/ etc / hostsにエントリがない場合、オペレーティングシステムはnscdによってキャッシュされているため、古いDNSレコードを引き続き使用する可能性があります。 Nslookupは正しいアドレスを表示しますが、オペレーティングシステム(したがってLogicMonitorコレクター)は表示しません。

それで、物語の教訓は? 使用しているツールがどこから情報を取得しているかを把握します。 もしそれが nslookup or host、ドメインネームシステムにクエリを実行するだけです。 オペレーティングシステム(ping、telnetなど)は、他の情報源を使用している可能性があります。
[Mea Culpa:ホストを解決するコレクター用のデバッグツールは「!nslookup」と呼ばれますが、名前解決要求を基盤となるオペレーティングシステムに渡すだけです。 これは明らかに誤った名称であることがわかりました。実際には!osnamelookupである必要があります。 修正します…]