GNU/Linux >> Linux の 問題 >  >> Linux

/etc/hosts と DNS はどのように連携してホスト名を IP アドレスに解決しますか?

これは、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 でホスト名を解決できる場合、/etc/hosts の後に DNS を適用してホスト名を解決しますか?または /etc/hosts によって解決された IP アドレスを「ホスト名」として扱い、再帰的に解決しますか?
  • なし。

    ホスト名が /etc/hosts で解決できる場合 、DNS 適用されません (ファイルが DNS の前にある場合)。

    「ホスト名」として扱われる解決済みの IP アドレスです。

    それは単純に、解決されたアドレスです。

    ブラウザ

    ブラウザーは、任意の方法を使用して名前を解決できます (解決された名前のキャッシュを確認した後)。システムが提供する方法を使用する場合にのみ、上記の順序が適用されます。ブラウザーは、他のプログラムと同様に、任意の DNS サーバーに直接接続することを選択できます。

    システム注文に /etc/hosts がある場合 DNS より前 、それはそのファイルのエントリが DNS よりも優先されることを意味します 解決サービス

    そう:

    <ブロック引用>
    1. ... ホスト名を解決するために /etc/hosts が DNS をオーバーライドするということですか?

    はい (ブラウザがシステム提供の解像度を使用する場合)。

    <ブロック引用>

    なぜ /etc/hosts しないのですか ウェブサイトに接続できないため、再度申請しますか?

    その特定の名前のブラウザの内部キャッシュがクリアされる (またはタイムアウトする) まで、その名前はブラウザの外部で再度検索されます。

    ブラウザのキャッシュで解決された名前がある場合、ブラウザはそれを再度使用します。

    これを使用してキャッシュをクリアします。

    または、ブラウザーを閉じて (しばらく待ってから) 再起動してください。


    Linux
    1. CentOS / RHEL 6 で /etc/shadow および/または /etc/passwd ファイルの削除されたルート エントリから復元する方法

    2. /etc/shadow および /etc/passwd ファイルの変更を Auditd で監視するにはどうすればよいですか?

    3. grpck コマンド – /etc/group および /etc/gshadow ファイル内の破損したエントリまたは重複したエントリを削除します。

    1. / etc / hostsを補完するユーザー固有のHostsファイルを作成しますか?

    2. / etc / motdはどのように更新されますか?

    3. Linux/OSX の /etc/hosts/ ファイルで、ワイルドカード サブドメインを使用するにはどうすればよいですか?

    1. /etc/hosts または /etc/sysconfig/network-scripts/ifcfg-* に対して行った手動の変更が失われる

    2. CentOS / RHEL :削除された /etc/passwd ファイルから回復する方法

    3. BIND DNS サーバーを新しいハードウェアに移行する方法は?