首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谁读/etc/ reads?

谁读/etc/ reads?
EN

Unix & Linux用户
提问于 2018-06-11 10:17:47
回答 3查看 5.9K关注 0票数 19

我的Centos 7服务器无法正确解析域名。据我所见,在现代Linux系统中,/etc/resolv.conf通常是用dhclientdnsmasqNetwork Manager生成的。

因此,我对现代Linuxes中的网络栈有一个一般性的理论问题:

谁负责阅读/etc/resolv.conf?在域名解析中涉及哪些参与者(服务或内核子系统)?

SHORT答案: Arch linux手册表示高级配置的域名解析是在 /etc/nsswitch.conf并依赖于名称服务交换glibc API。

glibc使用nss-resolve函数向DNS服务器发送DNS请求。

通常在现代CentOS系统上使用nss-resolve 倚靠 systemd-resolved服务。如果/etc/resolv.conf是由类似于dhclient-script的东西生成的,那么systemd-resolved会读取它并在兼容性模式下工作,模拟BIND D17客户端等旧系统的行为。

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-06-11 12:28:50

DNS客户端库做.

C库包含DNS客户端,这些客户端封装DNS协议中的名称到地址查找,并将它们交给代理DNS服务器来完成查询解析的所有繁重工作。有很多这样的DNS客户端。您的操作系统的主C运行时库中的一个很可能是ISC的BIND。但从丹尼尔·伯恩斯坦(DanielJ.Bernstein)的dns库到adns,还有很多其他人。

虽然它们中有几个包含自己的本机配置机制,但它们通常有一个绑定库兼容性模式,其中读取resolv.conf,这是ISC的BIND C客户机库的配置文件。

NSS是在此基础上分层的,并由nsswitch.conf配置。NSS查找可以在内部调用的事情之一是DNS客户端,nsswitch.conf由C库中的NSS代码读取,以确定是否和在何处将查找传递给DNS客户端,以及如何处理各种响应。

(由于nscd的名称Services Cache D mon,nscd),这个想法有点复杂。但这只是在C库中添加了一个额外的上层客户端,向本地服务器提供一个特殊的协议,而本地服务器则充当向代理DNS服务器提供DNS协议的DNS客户端。systemd-resolved增加了类似的并发症。)

systemd-resolvedNetworkManagerconnmandhcpcdresolvconf等调整绑定DNS客户端配置文件以切换DNS客户端以动态与不同的代理DNS服务器对话。这超出了这个答案的范围,特别是在这个WWW站点上已经有大量的答案涉及到这样一个机制所涉及的繁杂的细节。

在Unix世界中,更传统的方法是在机器本身或局域网上运行代理DNS服务器。因此,FreeBSD手册对正常配置的系统进行了说明,在没有resolv.conf的情况下,DNS客户端库的默认操作与Unix系统管理员通常拥有的操作相匹配,后者是侦听127.0.0.1的代理DNS服务器。( FreeBSD resolv.conf手册实际上也是源自ISC的BIND,当然也可以找到绑定DNS客户端库已经被合并到其他地方,比如GNU库。)

再读

  • 丹尼尔·伯恩斯坦。泼尼斯库。cr.yp.to。
  • Jonathan de Boyne Pollard (2017)。DNS名称限定是什么?。经常给出答案。
  • Jonathan de Boyne Pollard (2004年)。DNS查询解析是什么?。经常给出答案。
  • Jonathan de Boyne Pollard (2001年)。"djbdns“的大图景。经常给出答案。
  • Jonathan de Boyne Pollard (2000年)。“内容”和“代理”DNS服务器。经常给出答案。
票数 26
EN

Unix & Linux用户

发布于 2018-06-11 10:42:14

从更好的FreeBSD手册页面,resolv.conf

代码语言:javascript
复制
 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
EN

Unix & Linux用户

发布于 2018-06-12 09:08:11

执行主机名解析的*libc调用读取文件/etc/resolv.conf。这主要是getaddrinfo和不推荐的gethostbyname

如果这些函数被传递给DNS名称,那么它们按照以下顺序执行这些操作:

  1. 尝试在本地解析主机名,即通过读取/etc/hosts
  2. 如果失败,则查询/etc/resolv.conf中列出的DNS服务器。
  3. 如果此操作也失败,则无法解析主机名。

既然您提到dnsmasq:这是一个本地运行的DNS服务器。因此,在许多现代的Linux发行版上,/etc/resolv.conf只指向127.0.0.1 (这是本地dnsmasq监听的地方)。dnsmasq然后被配置为转发查询Internet DNS服务器;dnsmasq在连接到Internet时由网络管理器配置。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/449067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档