これは、NSS (Name Service Switch) 構成、つまり /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
firefox
のため、すぐには再度適用されません google.com
で取得した最後のホスト名をキャッシュしています;常に再度フェッチする場合は、network.dnsCacheExpiration
を設定する必要があります。 0
まで about:config
で .詳細はこちら(少し古いですが)。トピックから外れていたらすみません。
補足として、多くのプログラムは標準のリゾルバー (getaddrinfo(3)
) を使用していません。 、 getnameinfo(3)
[1]) 最悪だから .
まず、インターフェイスは非同期ではありません。適度に複雑なプログラムは、getaddrinfo()
だけを実行する別のスレッドを生成する必要があります。 そして、それと通信するための独自のプロトコルを発明します (そして、getaddrinfo_a()
に入ることすらやめましょう) 、シグナルを送信しています 完了すると、さらに悪いことになります)。
次に、glibc
でのリゾルバーの実装 (Linux の標準 C ライブラリ) は恐ろしいもので、dlopen()
経由でランダムな動的オブジェクトをアドレス空間に引き込むことを期待しています。 背後にあり、それを何らかの方法で格納したり、静的にリンクされた実行可能ファイルで使用したりすることを不可能にします.
多くのプログラムは標準のリゾルバーを直接使用しないため、その動作を正確に再現しようとせず、/etc/resolv.conf
の一部またはすべてを無視します。 、 /etc/hosts
、 /etc/nsswitch.conf
または /etc/gai.conf
.
[1] そして、リエントラントではなく、ipv4 のみの gethostbyname()
についても触れていません。 、これは古くから非推奨でした。
ファイル /etc/hosts
と DNS は連携しません。名前 (ネットワーク名) の独立した解決を提供します。
それらをつなぐ接着剤は /etc/nsswitch.conf
の中にあります Linux システム用。 /etc/netsvc.conf
で AIX サーバーの場合、Windows のシステムでは lookupd -configuration
でリストできます (Cache FF DNS NI DS
のような LookupOrder を検索します。 ) MacOS システムで。
実際の順序は複雑になり、通常は各名前解決サービスが他のレベルの解決の内部を調べることができる (多くの場合そうする) ため、複雑になります。 dnsmasq
のように (一般的に 127.0.0.1:53
の軽い DNS サーバー 、または ::1:53
(または両方)) 通常は /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
適用されません (ファイルが DNS の前にある場合)。
も 「ホスト名」として扱われる解決済みの IP アドレスです。
それは単純に、解決されたアドレスです。
ブラウザ
ブラウザーは、任意の方法を使用して名前を解決できます (解決された名前のキャッシュを確認した後)。システムが提供する方法を使用する場合にのみ、上記の順序が適用されます。ブラウザーは、他のプログラムと同様に、任意の DNS サーバーに直接接続することを選択できます。
システム注文に /etc/hosts
がある場合 DNS
より前 、それはそのファイルのエントリが DNS
よりも優先されることを意味します 解決サービス
そう:
<ブロック引用>- ... ホスト名を解決するために /etc/hosts が DNS をオーバーライドするということですか?
はい (ブラウザがシステム提供の解像度を使用する場合)。
<ブロック引用>
なぜ /etc/hosts
しないのですか ウェブサイトに接続できないため、再度申請しますか?
その特定の名前のブラウザの内部キャッシュがクリアされる (またはタイムアウトする) まで、その名前はブラウザの外部で再度検索されます。
ブラウザのキャッシュで解決された名前がある場合、ブラウザはそれを再度使用します。
これを使用してキャッシュをクリアします。
または、ブラウザーを閉じて (しばらく待ってから) 再起動してください。