hostコマンドが/ etc / hostsのエントリを解決しないのはなぜですか?


25

私は/etc/hostsubuntu 12.04マシンに次のファイルを持っています

127.0.0.1 localhost
10.248.27.66 ec2-50-112-220-110.us-west-2.compute.amazonaws.com puppetmaster

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

ただし、puppetmastertelnetコマンドは解決しますが、hostコマンドは名前を正しく解決しません

root@ip-10-248-34-162:/home/ubuntu# host puppetmaster
Host puppetmaster not found: 3(NXDOMAIN)

root@ip-10-248-34-162:/home/ubuntu# telnet puppetmaster 8140
Trying 10.248.27.66...
Connected to ec2-50-112-220-110.us-west-2.compute.amazonaws.com.
Escape character is '^]'.

hostコマンドが/ etc / hostsのエントリを解決しないのはなぜですか?

回答:


52

hostプログラムが使用するlibresolv直接DNSクエリを実行するためには、すなわち、使用されませんgethostbyname

ほとんどのプログラムは、別のホストに接続しようとすると、gethostbynameシステムコールまたは同様の関数を呼び出します。この関数はの構成に従います/etc/nsswitch.conf。このファイルには、Ubuntu 12.04ではデフォルトで次の行があります。

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4

つまり、最初にを使用し/etc/hosts、次にDNSクエリにフォールバックします。

この方法でホスト検索を実行する場合は、を使用してこれを実行できますgetent hosts。例えば:

$ getent hosts serverfault.com
198.252.206.16  serverfault.com

これがお役に立てば幸いです。


2
Kvisleに感謝しますが、私はまだ少し混乱しています。の行は/etc/nsswitch.confこのように見え、hosts: files dns変更しましたhosts: files mdns4_minimal [NOTFOUND=return] dns mdns4が、どちらの場合/etc/hostsも照会されず、代わりに直接DNSクエリが作成されたように見えます。またはの/etc/hostsようなコマンドを使用するときに最初にクエリが実行されることを確認するにはどうすればdigよいhostですか?
user784637

4
できません。dig / hostはDNSを直接使用します。最初にホストファイルをチェックするgetent hostsgethostbyname()
名前検索

ああ、私は悪い、私は今それを得た=)
user784637

1
私は、最近の使用または廃止された理由のgetent ahosts代わりに使用すべきであると信じています。私が正しく理解していれば、昔のUNIX Cプログラムがどのように機能していたかをエミュレートし、modermプログラムが機能する方法をエミュレートします。getent hostsgetent hostsgethostbyaddr()gethostbyname*()getent hostsgetent ahosts
ミッコランタライネン

しかし、ホストコマンドに/ etc / hostsも使用させる方法はありますか?
コーネル

10

このhostユーティリティはDNSルックアップユーティリティのみであるためです。

ほとんどのアプリケーションは、ライブラリ呼び出しgetaddrinfoまたはを使用しますgethostbyname。これらのライブラリは、呼び出さ/etc/nsswitch.confれたファイルに問い合わせて、検索の優先順位と、異なる検索の実行方法のポリシーを決定します。

通常/etc/nsswitch.conf、行が含まれています

hosts:        files dns

これは、プログラムに、最初に照会/etc/hostsし、失敗した場合にDNS を照会するように指示します。

ホストはDNSルックアップのみ/etc/hostsを実行するため、ルックアップを覗き込むことはありません。


3

あなたはそれを見つけてdig、とnslookup同じように振る舞いますhost

これは、これらのコマンドのすべての目的が、ファイルを調べるのではなく、DNSルックアップを行うことであるためです。

他のほとんどのプログラムは、オペレーティングシステムの名前リゾルバーを使用します。この名前リゾルバーは、要求しているホスト名を解決する方法を決定し/etc/nsswitch.conf、必要に応じ/etc/resolv.confて決定します。(これは単純化です。他のオプションがあります。)nsswitch.conf通常、ファイルはDNSではなくローカルファイルを優先します。



-1

/etc/nsswitch.confファイルを確認し、「hosts」という単語で始まる行を探しますか?この行に「ファイル」という言葉がありますか?「はい」の場合、「dns」という単語の前後にありますか?

通常のシステムでは、この行は次のようになります

hosts      files dns

あなたのものが存在しないか、異なる順序である場合、それはあなたの問題かもしれません。


存在し、このように見えますhosts: files dns
-user784637
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.