web-dev-qa-db-ja.com

誰が/etc/resolv.confを読みますか?

Centos 7サーバーがドメイン名を正しく解決しない。私の知る限り、最近のLinuxシステムでは、/etc/resolv.confdhclientdnsmasqまたはNetwork Managerを使用して生成されることがよくあります。

したがって、最近のLinuxのネットワークスタックに関する一般的な理論的な質問があります。

/etc/resolv.confを読む責任があるのは誰ですか?ドメイン名の解決に関与しているのはどのプレイヤー(サービスまたはカーネルサブシステム)ですか?

SHORT ANSWER:Arch Linux manual ドメイン名解決の高レベルの構成 で行われる = /etc/nsswitch.confおよびName Service Switch glibc AP​​Iに依存します。

glibcは、DNSサーバーにDNS要求を送信するためにnss-resolve関数を使用します。

通常、最新のCentOSシステムではnss-resolve依存systemd-resolvedサービス。 /etc/resolv.confdhclient-scriptのようなものによって生成された場合、systemd-resolvedはそれを読み取って互換モードで動作し、BIND DNSクライアントのような古いシステムの動作をエミュレートします。

16
Boris Burkov

DNSクライアントライブラリが行います。

Cライブラリには、DNSプロトコルでの名前からアドレスへのルックアップをラップし、それらをプロキシDNSサーバーに引き渡して、クエリ解決の面倒な作業をすべて行うDNSクライアントが含まれています。これらのDNSクライアントはたくさんあります。オペレーティングシステムのメインCランタイムライブラリにあるものは、ISCのBINDからのものである可能性が非常に高くなります。しかし、Daniel J. Bernsteinのdnsライブラリからc-aresからadnsまで、他にもたくさんのものがありました。

それらのいくつかには独自のネイティブ設定メカニズムが含まれていますが、通常、ISCのBIND Cクライアントライブラリの設定ファイルであるresolv.confを読み取るBINDライブラリ互換モードがあります。

NSSはこの上に階層化され、nsswitch.confによって構成されます。 NSSルックアップが内部で呼び出すことができるものの1つはDNSクライアントであり、CライブラリのNSSコードによってnsswitch.confが読み取られ、ルックアップがDNSクライアントに渡されるかどうかと場所、およびさまざまな処理方法が決定されます。反応。

(ネームサービスキャッシュデーモン、nscdが原因で、このアイデアには少し複雑な問題があります。しかし、これはCライブラリに追加の上位層クライアントを追加し、ローカルサーバーに固有のプロトコルを話すだけでなく、ローカルサーバーとして機能します。プロキシDNSサーバーに対してDNSプロトコルを話すDNSクライアント。systemd-resolvedは同様の複雑さを追加します。)

systemd-resolvedNetworkManagerconnmandhcpcdresolvconfなどは、BIND DNSクライアント構成ファイルを調整して、通信するDNSクライアントを切り替えますその場で異なるプロキシDNSサーバー。これはこの回答の範囲外です。特に、このWWWサイトには、そのようなメカニズムが関与するビザンチンの詳細を扱っている回答がたくさんあるためです。

Unixの世界でより伝統的な方法は、マシン自体またはLAN上でプロキシDNSサーバーを実行することです。したがって、FreeBSDマニュアルが通常構成されているシステムについて述べているもので、resolv.confがない場合のDNSクライアントライブラリのデフォルトアクションは、127.0.0.1でリッスンするプロキシDNSサーバーであるUnixシステム管理者が通常持っているものと一致します。 (resolv.confのFreeBSDマニュアルは、実際にはdocoでありまたはISCのBINDに由来し、もちろんBIND DNSクライアントの場所でも見つけることができますライブラリは、GNU Cライブラリなど)の他の場所に組み込まれています。

参考文献

20
JdeBP

はるかに優れたFreeBSDのmanページから resolv.conf

 The resolver configuration file contains information that is read by the
 resolver routines the first time they are invoked by a process.

 On a normally configured system this file should not be necessary.  The
 only name server to be queried will be on the local machine, the domain
 name is determined from the Host name, and the domain search path is
 constructed from the domain name.
7
Rob

ファイル/etc/resolv.confは、ホスト名解決を実行する* libc呼び出しによって読み取られます。これは主にgetaddrinfoと非推奨のgethostbynameです。

これらの関数にDNS名が渡されると、次の順序でこれらの機能が実行されます。

  1. ホスト名をローカルで解決しようとします。つまり、/etc/hostsを読み取ります。
  2. これが失敗した場合は、/etc/resolv.confにリストされているDNSサーバーを照会します。
  3. これも失敗した場合は、ホスト名を解決できません。

dnsmasqについて言及したので、これはローカルで実行されるDNSサーバーです。そのため、最近の多くのLinuxディストリビューションでは、/etc/resolv.conf127.0.0.1のみを指します(これがローカルのdnsmasqがリッスンする場所です)。次に、dnsmasqは、クエリをインターネットDNSサーバーに転送するように構成されます。 dnsmasqは、インターネットへの接続時にNetwork Managerによって構成されます。

1
rexkogitans