
/etc/hosts
Linuxでは、DNSはホスト名をIPアドレスに解決するためにどのように連携しますか?
- でホスト名を解決できる場合は、ホスト名が解決された後に
/etc/hosts
DNSが適用されますか、それとも解決されたIPアドレスが「ホスト名」として処理され、繰り返し解決されますか?/etc/hosts
/etc/hosts
私のブラウザ(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
ページを更新した後もサイトに接続できます。なぜ/etc/hosts
再適用されないため、ウェブサイトに接続できないのですか?
ありがとうございます。
答え1
これは、NSS(Name Service Switch)構成(/etc/nsswitch.conf
ファイルディレクティブなど)によってhosts
決まります。たとえば、私のシステムでは次のようになります。
hosts: files mdns4_minimal [NOTFOUND=return] dns
ここではファイルとDNSシステムをfiles
意味します。想像できるように/etc/hosts
dns
何でも最初に来たもの。
また、man 5 nsswitch.conf
これに関するより多くのアイデアについては、こちらをご覧ください。
ただし、NSSホストの確認手順に従うには、次のようにデータベースgetent
として使用します。hosts
getent hosts example.com
答え2
最後の質問に答えるには、最後のホスト名がキャッシュされている/etc/hosts
ため、すぐには再適用されません。常に再インポートするには設定する必要があります。firefox
google.com
network.dnsCacheExpiration
存在する。0
追加about:config
情報(少し古いですが)ここ。話題から外れた内容ならすみません。
参考までに、多くのプログラムは標準パーサー(getaddrinfo(3)
、getnameinfo(3)
[1])を使用しません。ひどいです。。
まず、インターフェイスは非同期ではありません。ある程度複雑なプログラムは、そのタスクを実行する別々のスレッドを作成し、それと通信するための独自のプロトコルを作成する必要がgetaddrinfo()
あります。getaddrinfo_a()
シグナル終わったら、状況はもっと深刻になりました。)
第二に、(Linuxの標準Cライブラリ)のパーサーの実装はglibc
ひどいです。任意の動的オブジェクトを背後のアドレス空間に引き込むことを許可し、dlopen()
それを何らかの方法で含めたり静的に使用したりすることを不可能にします。リンクされた実行文書。
多くのプログラムが標準パーサを直接使用しないため、その動作を正確に複製せず、またはの/etc/resolv.conf
一部または全部を無視します。/etc/hosts
/etc/nsswitch.conf
/etc/gai.conf
gethostbyname()
[1] 長年にわたって廃止された再進入が不可能なipv4専用バージョンは言うまでもありません。
答え3
このファイル/etc/hosts
とDNSは連携しません。独立した名前解決(ネットワーク名)を提供します。
それらを接続する接着剤は/etc/nsswitch.conf
Linuxシステム内部。 AIXサーバーの場合、/etc/netsvc.conf
システム上WindowsMacOSで利用可能ですlookupd -configuration
(LookupOrder検索、同様:)。Cache FF DNS NI DS
各名前解決サービスは異なる確認レベルを見ることができ、しばしば検証するため、実際の順序は複雑になり複雑になることがよくあります。dnsmasq
軽量DNSサーバー(通常は、または(またはその両方)にあります)は通常、ファイルの内容を読み取り、含めます。または、場合によっては、ドット名のDNS解決()を直接呼び出す(非非名前のみを解決する必要があるデフォルトのリゾルバ)と同じです。127.0.0.1:53
::1:53
/etc/hosts
systemd.resolver
mycomputer
mycomputer.here.dev.
通常、サービスは順番に呼び出され、失敗しない最初のサービスが勝ち、正しいアドレスで承認されます。一般的なデフォルトの順序は、(/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でホスト名を解決できる場合は、ホスト名を解決するために/etc/hostsの後にDNSを適用する必要があります。または/etc/hostsで解決されたIPアドレスを「ホスト名」として処理して繰り返し確認すべきですか?
まったく。
ホスト名を解決できる場合(ファイルがDNSの前にある場合)には適用され/etc/hosts
ません。DNS
...でもない「ホスト名」として処理される解決済みのIPアドレス。
それはまさに解決されたアドレスです。
ブラウザ
ブラウザは名前を解決するためにすべての方法を使用できます(確認された名前のキャッシュを確認した後)。上記の順序は、システム提供の方法を使用する場合にのみ適用されます。他のプログラムと同様に、ブラウザはすべてのDNSサーバーに直接接続することを選択できます。
システムの順序/etc/hosts
が以前の場合、DNS
このファイルのエントリがDNS
最初に解決されることを意味します。
だから:
- ...これは、ホスト名を解決するために/ etc / hostsがDNSを無視することを意味しますか?
はい(ブラウザがシステム提供の解像度を使用している場合)
なぜ
/etc/hosts
再適用されないため、ウェブサイトに接続できないのですか?
その特定の名前の内部ブラウザキャッシュが消去された(またはタイムアウトした)後にのみ、ブラウザの外部から名前が再取得されます。
ブラウザはキャッシュ内の名前を解決するとそれを再利用します。
または、ブラウザを閉じて(しばらくお待ちください)、再起動してください。