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

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

私のCentos 7サーバーはドメイン名を正しく解決できませんでした。私が知っている限り、最新のLinuxシステムでは、通常 /etc/resolv.conf、または。dhclientdnsmasqNetwork Manager

だから、現代​​のLinuxのネットワークスタックに関する一般的な理論的な質問があります。

読書は誰が担当しますか/etc/resolv.conf?名前解決に参加する行為者(サービスまたはカーネルサブシステム)は何ですか?

短い答え: Arch Linux マニュアルドメイン名解決の高度な構成に関するものです。に完了しました /etc/nsswitch.confネームサービス移行glibcAPIを使用します。

glibcnss-resolveDNS要求をDNSサーバーに送信する機能を使用してください。

通常、最新のCentOSシステムでnss-resolve にかかっている systemd-resolved提供する。/etc/resolv.conf同様のエントリによって生成されたdhclient-script場合は、それをsystemd-resolved読み取り、互換モードで作業して、BINDDNSクライアントなどの古いシステムの動作をシミュレートします。

答え1

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

Cライブラリには、DNSプロトコルの名前とアドレスのルックアップをカプセル化し、それをプロキシDNSサーバーに渡してクエリ検証のすべての重い操作を実行するDNSクライアントが含まれています。そのようなDNSクライアントがたくさんあります。オペレーティングシステムのデフォルトCランタイムライブラリにあるライブラリは、ISCのBINDライブラリである可能性が高いです。しかし、Daniel J. Bernsteinのライブラリからc-ares、adnsまでdnsはるかに多くのものがあります。

その中には独自の基本的な構成メカニズムが含まれていますが、通常はresolv.confISCのBIND Cクライアントライブラリの設定ファイルであるBINDライブラリ互換モードを読みます。

NSSはその上にありますnsswitch.conf。 NSSルックアップが内部的に呼び出すことができるものの1つはDNSクライアントであり、ルックアップをnsswitch.confDNSクライアントに渡すかどうか、および場所とさまざまな応答を処理する方法を決定するためにCライブラリのNSSコードに読み込まれます。

(このアイデアは、ネームサービスのキャッシュデーモンnscdのために少し複雑です。しかし、これはCライブラリに特別なプロトコルをローカルサーバーに渡す追加の高レベルクライアントを追加するだけです。これはDNSクライアントとプロキシとして機能します。)を使用するDNSサーバーは、 systemd-resolved同様の複雑さを追加します。

systemd-resolved、、、、および他の人は、BIND DNSクライアント構成ファイルを調整して、DNSクライアントがすぐに他のプロキシDNSサーバーと通信するように切り替えましたNetworkManager。これはこの回答の範囲外です。特に、このメカニズムに関する複雑な詳細をすでにカバーしているWWWサイトには多くの回答があるためです。connmandhcpcdresolvconf

Unixの世界でより伝統的な作業方法は、コンピュータ自体またはLAN上でプロキシDNSサーバーを実行することです。したがって、FreeBSD のマニュアルでは、一般的に設定されたシステムを次のように説明します。 DNS クライアント ライブラリがない場合、DNS クライアント ライブラリの基本的な操作は、resolv.confUnix システム管理者が通常行う操作、つまり 127.0.0.1 プロキシ DNS を受信する操作と一致します。仕える人。 (FreeBSDマニュアルはresolv.conf実際にはdocoです。返品BINDはISCで開始され、BIND DNSクライアントライブラリが他の場所(GNU Cライブラリなど)にマージされている場所にあります。 )

追加読書

答え2

より良いFreeBSDのマニュアルページから構成ファイルの解析:

 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.

答え3

このファイルは、/etc/resolv.confホスト名解決を実行する* libc呼び出しで読み取られます。これはほとんどgetaddrinfo使用されていませんgethostbyname

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

  1. たとえば/etc/hosts
  2. 失敗すると、クエリにリストされているDNSサーバーがクエリされます/etc/resolv.conf
  3. この方法も失敗すると、ホスト名を解決できません。

あなたが言及したのでドメイン名システム: ローカルで実行される DNS サーバーです。したがって、多くの最新のLinuxディストリビューションで/etc/resolv.conf指す唯一のポイントは、127.0.0.1ローカルdnsmasqが受け取る場所です。次に、インターネットDNSサーバーにクエリを渡すようにdnsmasqを設定します。 dnsmasq は、インターネットに接続するときにネットワーク管理者によって設定されます。

関連情報