host.conf 和 resolv.conf 之间有什么关系

host.conf 和 resolv.conf 之间有什么关系

我用的是ubuntu。我从联机帮助页中看到以下信息:

  • 为了/etc/host.confman host.conf

    host.conf - 解析器配置文件

    文件 /etc/host.conf 包含特定于解析器库的配置信息。

  • 为了/etc/resolv.confman resolv.conf

    resolv.conf - 解析器配置文件

    解析器是 C 库中的一组例程,提供对 Internet 域名系统 (DNS) 的访问。

解析器是否使用这两个文件,按什么顺序以及有什么区别?

答案1

在现代 Linux 系统中,解析器库这些手册页引用的内容已集成到glibc库中。/etc/host.conf由主库中集成的部分读取:glibc请注意,手册页显示当前实现仅识别trim,multireorder关键字,尽管HistoricalNOTES部分中的段落表明曾经有更多。

实际的查找由各种插件库执行,由/etc/nsswitch.conf文件确定。每个查找方法(如filesnisdns或 )与库文件(如、、或 )compat一一对应。libnss_files.so.2libnss_nis.so.2libnss_dns.so.2libnss_compat.so.2

插件libnss_files.so.2libnss_dns.so.2和是随主库包一起提供的,libnss_compat.so.2但也有来自不同来源的其他插件,例如来自单独的包、来自包,并设计为与.如果您将系统与 LDAP 或 Active Directory 集成,这些集成解决方案还将提供自己的库。libnss_hesiod.so.2glibclibnss_nis.so.2libnss-nislibnss_mdns*.so.2libnss-mdnslibnss_resolve.so.2systemd-resolvedlibnss_*

如果包含, thenhosts:中的行被使用,它将读取。nsswitch.confdnslibnss_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/*.confresolvectl

为了还覆盖/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 信息可用)。

相关内容