如果第一个名称服务器无法解析域名,如何使用第二个名称服务器?

如果第一个名称服务器无法解析域名,如何使用第二个名称服务器?

如果默认服务器无法找到某个域的 IP,如何配置 Linux 计算机使用第二个 DNS 服务器?

我尝试添加两者,但如果第一个名称服务器不可用,/etc/resolv.conf它只会尝试第二个。nameserver如果第一个名称服务器可用但无法解析域,我想尝试第二个名称服务器。

我无法控制任一名称服务器,因此无法配置一个名称服务器以递归到另一个名称服务器。运行我自己的 DNS 服务器来递归两者是一个解决方案吗?

答案1

Linux DNS 解析器不擅长处理多个单独的 DNS 名称空间的概念。如果您向特定的 DNS 服务器发送查询,并且它返回一个权威的NXDOMAIN,它基本上是在说“我告诉您这个名称不存在的绝对事实”,并且解析器“知道”它不需要进一步搜索。我不知道您可以在其中resolv.conf或其他任何地方设置任何可以改变此行为的选项。

每当我不得不做这样的事情时,我发现的唯一选择就是运行我自己的 DNS 服务器来提供“拆分 DNS”设置,并对其进行配置,以便通过查询一组 DNS 服务器来解析某些名称,和其他名称通过查询不同的集合来解析。使用评论中建议的替代解决方案dnsmasq也是可行的。

答案2

对于涉及并非始终可用的本地 DNS 服务器的用例(如由 生成libvirtd),可以在netconfigunder中定义它NETCONFIG_DNS_STATIC_SERVERS

DNS 合并顺序在 下定义NETCONFIG_DNS_POLICYSTATIC作为第一个条目,它将在所有其他条目之前合并(* - 代表ifcfg-*ifname*文件中定义的所有接口)或NetworkManager.

为了确保 DNS 不会因查询可能无响应的服务器而陷入困境,请设置最小超时值并轮流查询:rotate timeout:1

TL;DR 这是最后的/etc/sysconfig/network/config

NETCONFIG_DNS_POLICY="STATIC * NetworkManager"
NETCONFIG_DNS_STATIC_SERVERS="192.168.100.1"
NETCONFIG_DNS_RESOLVER_OPTIONS="rotate timeout:1"

以及 /etc/resolv.conf 中的结果条目:

options options rotate timeout:1
search lan
nameserver 192.168.100.1
nameserver 192.168.1.1

192.168.1.1 通过 DHCP 提供给 NetworkManager,192.168.100.1 是静态定义的服务器,可能并非始终可用(例如,当 libvirtd 关闭时)。

如果是 NetworkManager 提供所有 DNS 记录,则还可以为dns-priority每个配置文件设置静态定义的 DNS 条目。无法在 DHCP 的主 DNS 服务器之前设置静态定义的 DNS 服务器。涉及 DHCP 的任何配置文件中的所有其他 DNS 服务器都是辅助服务器。

相关内容