Linuxでは、/etc/hosts
とDNSが連携してホスト名をIPアドレスに解決する方法を教えてください。
/etc/hosts
で解決できる場合、DNSは/etc/hosts
の後にホスト名を解決するために適用されますか、または/etc/hosts
によって解決されたIPアドレスを「ホスト名」として再帰的に解決しますか?私のブラウザー(firefoxとgoogle chrome)で/etc/hosts
に追加すると:
127.0.0.1 google.com www.google.com
ブラウザのアドレスバーにwww.google.comと入力してEnterキーを押しても、ウェブサイトに接続しません。 /etc/hosts
からその行を削除すると、Webサイトに接続できます。ホスト名を解決するために/etc/hosts
がDNSをオーバーライドするということですか?
/etc/hosts
に行を再度追加した後も、Webページを更新した後でも、Webサイトに接続できます。 /etc/hosts
が再度適用されず、Webサイトに接続できないのはなぜですか?
ありがとう。
これは、NSS(ネームサービススイッチ)構成、つまり/etc/nsswitch.conf
ファイルのhosts
ディレクティブによって決まります。たとえば、私のシステムでは:
hosts: files mdns4_minimal [NOTFOUND=return] dns
ここで、files
は/etc/hosts
ファイルを指し、dns
はDNSシステムを指します。そしてあなたが想像できるようにどちらか先に勝った方が勝つ。
また、man 5 nsswitch.conf
を参照して、これについてさらに理解を深めてください。
余談ですが、NSSホスト解決の順序に従うには、データベースとしてgetent
をhosts
とともに使用します。例:
getent hosts example.com
ファイル/etc/hosts
とDNSは連動しません。それらは名前(ネットワーク名)の独立した解決を提供します。
それらをリンクする接着剤は inside /etc/nsswitch.conf
for linux systems です。 AIXサーバーの場合は/etc/netsvc.conf
、システムの場合は Windows で、MacOSシステムではlookupd -configuration
(LookupOrderの検索:Cache FF DNS NI DS
)を使用してリストできます。
実際の順序は複雑になり、通常、各名前解決サービスが他のレベルの解決を調べることができるため(多くの場合そうです)、複雑になります。 dnsmasq
(通常127.0.0.1:53
、または::1:53
(またはその両方)にある軽いDNSサーバー)のように、通常は/etc/hosts
ファイルの内容を読み取ってインクルードします。または、systemd.resolver
(mycomputer
のようなドットなしの名前のみを解決する基本的なリゾルバー)は、いくつかの条件下でドット付きの名前(mycomputer.here.dev.
)のDNS解決を直接呼び出します。
一般に、サービスは順番に呼び出され、失敗しない最初のサービスが勝ち、正しいアドレスとして受け入れられます。一般的な基本的な順序は、/etc/hosts
(ファイル)、mDNS(ドットなしの名前)、DNS、NIS、NIS +、LDAPです。一部のLinuxシステムでは、サービス内の コンピュータhostname
の最後の解決策がありますmyhostname
たとえば、このシステムでは(cat /etc/nsswitch
から):
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
非常に古い(glibc 2.4以前)order
エントリ /etc/Host.conf
として次のように注意してください:
order hosts,bind,nis
ファイル(ファイル/etc/hosts
)ネームサービスにのみ適用されます。
NISおよびLDAPに関連するこの(Linux)クライアントコンピュータへの影響は、(通常)使用されるDNSサーバー(バインド、バインド解除など)によって制御されます。
そう:
- ホスト名を/ etc/hostsで解決できる場合、DNSは/ etc/hostsの後に適用されてホスト名を解決しますか、または/ etc/hostsによって解決されたIPアドレスを「ホスト名」として扱い、再帰的に解決しますか?
無し。
ホスト名が/etc/hosts
で解決できる場合、DNS
は適用されません(ファイルがDNSの前にある場合)。
norは、「ホスト名」として扱われる解決されたIPアドレスです。
単に解決されたアドレスです。
ブラウザは任意の方法を使用して名前を解決できます(解決された名前のキャッシュをチェックした後)。システム提供の方法を使用する場合のみ、上記の順序が適用されます。ブラウザは、他のプログラムと同様に、任意のDNSサーバーに直接接続することを選択できます。
システムの注文でDNS
の前に/etc/hosts
がある場合、そのファイルのエントリがDNS
解決サービスよりも優先されることを意味します。
そう:
- ...それは、/ etc/hostsがホスト名を解決するためにDNSをオーバーライドすることを意味しますか?
はい(ブラウザがシステム提供の解像度を使用する場合)。
/etc/hosts
が再度適用されず、Webサイトに接続できないのはなぜですか?
その特定の名前についてブラウザの内部キャッシュがクリアされる(またはタイムアウトになる)まで、その名前はブラウザの外で再び検索されます。
ブラウザの名前がキャッシュで解決されている場合、ブラウザはその名前を再び使用します。
または、ブラウザを閉じて(しばらく待って)再起動します。