Tracerouteは名前をどのように確認しますか?

Tracerouteは名前をどのように確認しますか?

スクリプトを作成するときに、私が指定したコンピュータ名(「selenium-rc」など)でコンピュータを参照したいと思います。 "selenium-rc"を使用してpingできないため、次のコマンドを使用して名前が認識されていることを確認しました。

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  selenium-rc (192.168.235.41)  0.545 ms  0.241 ms  0.124 ms

いいですね。 Tracerouteが名前を「発見」しました。どのように?次へ...

> traceroute selenium-rc
traceroute: unknown host selenium-rc

うーん…ホストがわからないので、ここではルックアップメカニズムが異なるはずです。私はこれがシステム名解決プロセスを使用していると仮定していますが、最初の例ではTraceroute固有のプロセスを使用しています。正しいですか?

そして後でまた来ると...

> traceroute 192.168.235.41
traceroute to 192.168.235.41 (192.168.235.41), 64 hops max, 52 byte packets
 1  minint-q4e8i52.mycorp.net (192.168.235.41)  0.509 ms  0.206 ms  0.136 ms

まあ、他の結果。 「selenium-rc」の名前はシステム自体では変更されませんでしたが、トレースパス名解決プロセスには一種の優先順位が含まれている必要があり、現在はネットワーク内の他のシステム/サービスによって割り当てられた潜在的に権威のある結果を提供します。 (残念ながら、私が制御できない動的名前であると仮定しているので、スクリプトでは使用できません。)

誰かが結果を説明できますか?

答え1

通常、LinuxとUnixでは、Tracerouteとpingの両方でgethostbyname()呼び出しを使用してシステム名を見つけます。 gethostbyname() は順番にシステム構成ファイルを使用して、名前付きデータベースが照会される順序、つまり /etc/hosts と DNS を決定します。

Linuxでは、基本的な作業はDNSを最初に照会し、次に/ etc / hostsに照会することです(またはそうであるかもしれません)。これは、/etc/host.confで希望の順序を設定して変更または更新できます。

DNSの前に/etc/hostsを検索するには、/etc/host.confで次の順序を設定します。

order hosts,bind

Solaris では、ホストデータベースエントリの /etc/nsswitch.conf ファイルで同じ順序が制御されます。

ホスト:filedns

DNSを検索する前に/ etc / hostsを検索するように検索順序を設定します。

Tracerouteとpingは両方とも、これらの方法を使用して構成された名前付きデータベースをすべて検索します。hostコマンドはnslookupすべてDNSのみを使用するため、一見一貫していない結果を必ずしも複製するわけではありません。

getentSolarisには、検索用に構成された名前付きデータベースのセットに沿ってトレースパスとpingと同じ方法でホストまたはアドレスを識別するために使用できるルックアップツールがあります。

getent hosts <hostname>

/etc/nsswitch.conf にホスト用にリストされているすべてのデータベースが検索されます。

だから。あなたの場合、一貫した結果を得るには、/etc/hosts に以下を追加します。

192.168.235.41 selenium-rc

また、/etc/host.conf に以下があることを確認してください。

order hosts,bind

または、/etc/nsswitch.confに次のものがあることを確認してください。

hosts: files dns

完了すると、ping、Traceroute、ssh、telnet、curl、wgetなどの他のコマンドでより一貫した結果を表示できます。

答え2

逆方向検索は正しく設定されていますが、順方向検索は設定されていないようです。

システムはIPアドレス192.168.235.41を照会して認識できますが、selenium-rc照会しようとするとselenium-rc失敗します。

システムコールの動作は後者によって決まり、前者を参照することをお勧めします/etc/hosts/etc/resolv.confgetaddrinfo

答え3

私の推測:呼び出しはtraceroute 192.168.235.41DNS要求を出し、IPアドレス192.168.235.41に関連付けられた名前を見つけます。 traceroute -n 192.168.235.41見つかったすべてのIPアドレスに対してDNSルックアップを実行せずにTracerouteを起動する方法。 DNS サーバの応答時間が DNS システムが望むよりも長いため、Traceroute は最初にホスト名 192.168.235.41 を提供しませんでした。 Tracerouteが192.168.235.41でパケットを送受信すると、DNSサーバーが応答するため、Tracerouteはホスト名を提供できます。

だから私は「DNSサーバーの問題」と言いたいと思います。これは他のものを疑わせる非常に便利な時期です。ここで「マーフィーの法則」を考えてみてください。後で戻ると、同じIPアドレスに別の名前が表示されるため、トレースパスを実行すると誰かがDNSサーバー構成を台無しにした可能性があります。

関連情報