我正在使用 ubuntu。我从手册页中看到以下信息:
对于
/etc/host.conf
(man host.conf
)host.conf - 解析器配置文件
文件 /etc/host.conf 包含特定于解析器库的配置信息。
对于
/etc/resolv.conf
(man resolv.conf
)resolv.conf - 解析器配置文件
解析器是 C 库中的一组例程,提供对 Internet 域名系统 (DNS) 的访问。
解析器是否使用这两个文件,顺序是什么,有什么区别?
在现代 Linux 系统中,这些手册页引用的解析器库
glibc
已集成到该库中。由集成在主库中的/etc/host.conf
部分读取glibc
:请注意,手册页说当前实现仅识别trim
,multi
和reorder
关键字,尽管该Historical
部分中的NOTES
段落表明曾经有更多。实际查找由
/etc/nsswitch.conf
文件确定的各种插件库执行。每种查找方法,如files
、或,都与库文件(如nis
、或)一一对应。dns
compat
libnss_files.so.2
libnss_nis.so.2
libnss_dns.so.2
libnss_compat.so.2
插件
libnss_files.so.2
、libnss_dns.so.2
和随主库包一起提供libnss_compat.so.2
,但也有来自不同来源的其他插件,例如来自单独的包、来自包和设计用于与. 如果您将系统与 LDAP 或 Active Directory 集成,这些集成解决方案还将提供自己的库。libnss_hesiod.so.2
glibc
libnss_nis.so.2
libnss-nis
libnss_mdns*.so.2
libnss-mdns
libnss_resolve.so.2
systemd-resolved
libnss_*
如果包含, then中的
hosts:
行被使用,它将显示为.nsswitch.conf
dns
libnss_dns.so
/etc/resolv.conf
但如果
dns
被替换为resolve
,则libnss_resolve.so.2
使用 then 代替。这将忽略经典/etc/resolv.conf
,而是与守护程序对话,该systemd-resolved
守护程序由/etc/systemd/resolved.conf
文件、位于/etc/systemd/resolved.conf.d/*.conf
、[/usr]/lib/systemd/resolved.conf.d/*.conf
或/run/systemd/resolved.conf.d/*.conf
的插入文件或resolvectl
命令行工具配置。为了也涵盖
/etc/resolv.conf
直接读取而不是使用glibc
的解析器库的程序(例如某些版本的nslookup
命令),systemd-resolved
将(除非此功能已关闭)在 127.0.0.53 维护 DNS 请求的侦听器并提供一个虚拟/etc/resolv.conf
指向它。换句话说:没有咨询
/etc/nsswitch.conf
,你只能确定/etc/host.conf
会被使用。之后会发生什么将取决于/etc/nsswitch.conf
所说的内容。大多数程序将使用
glibc
库的主机名解析函数,因此/etc/resolv.conf
仅当行hosts:
包含/etc/nsswitch.conf
关键字时才会使用dns
。如果该
hosts:
行/etc/nsswitch.conf
包含关键字resolve
,则应将/etc/resolv.conf
其视为旧版 并使用该resolvectl
命令检查实际的 DNS 服务器配置。在这种情况下,/etc/resolv.conf
只是为了引导那些使用自己的DNS解析功能的少数程序使用本地的服务,systemd-resolved
然后将它们的请求转发到实际的DNS服务器(或提供基于MDNS或LLMNR的答案,如果请求是关于本地网络服务和 MDNS/LLMNR 信息可用)。