如果默认服务器无法找到某个域的 IP,如何配置 Linux 计算机使用第二个 DNS 服务器?
我尝试添加两者,但如果第一个名称服务器不可用,/etc/resolv.conf
它只会尝试第二个。nameserver
如果第一个名称服务器可用但无法解析域,我想尝试第二个名称服务器。
我无法控制任一名称服务器,因此无法配置一个名称服务器以递归到另一个名称服务器。运行我自己的 DNS 服务器来递归两者是一个解决方案吗?
答案1
Linux DNS 解析器不擅长处理多个单独的 DNS 名称空间的概念。如果您向特定的 DNS 服务器发送查询,并且它返回一个权威的NXDOMAIN
,它基本上是在说“我告诉您这个名称不存在的绝对事实”,并且解析器“知道”它不需要进一步搜索。我不知道您可以在其中resolv.conf
或其他任何地方设置任何可以改变此行为的选项。
每当我不得不做这样的事情时,我发现的唯一选择就是运行我自己的 DNS 服务器来提供“拆分 DNS”设置,并对其进行配置,以便通过查询一组 DNS 服务器来解析某些名称,和其他名称通过查询不同的集合来解析。使用评论中建议的替代解决方案dnsmasq
也是可行的。
答案2
对于涉及并非始终可用的本地 DNS 服务器的用例(如由 生成libvirtd
),可以在netconfig
under中定义它NETCONFIG_DNS_STATIC_SERVERS
。
DNS 合并顺序在 下定义NETCONFIG_DNS_POLICY
。STATIC
作为第一个条目,它将在所有其他条目之前合并(* - 代表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 服务器都是辅助服务器。