我用的是ubuntu。我从联机帮助页中看到以下信息:
为了
/etc/host.conf
(man host.conf
)host.conf - 解析器配置文件
文件 /etc/host.conf 包含特定于解析器库的配置信息。
为了
/etc/resolv.conf
(man resolv.conf
)resolv.conf - 解析器配置文件
解析器是 C 库中的一组例程,提供对 Internet 域名系统 (DNS) 的访问。
解析器是否使用这两个文件,按什么顺序以及有什么区别?
答案1
在现代 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_*
如果包含, thenhosts:
中的行被使用,它将读取。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 信息可用)。