强制执行网络管理器管理的 dnsmasq 中的 DNS 搜索顺序?

强制执行网络管理器管理的 dnsmasq 中的 DNS 搜索顺序?

我有一些 DN 在 DNS 服务器 xxxx 中没有条目,只能由服务器 yyyy 解析,并且一些 DN 在 yyyy 中是错误的,但在 xxxx 中是正确的。在传统的 Linux 中,我只需输入 2 行/etc/resolv.conf

x.x.x.x
y.y.y.y 

这样,程序将首先向 xxxx 发送请求,如果没有该条目,它将返回到 yyyy,因此一切都会好起来。

现代 Linux 发行版通常使用 dnsmasq。我仍然可以通过网络管理器提供多个 DNS 服务器。 nmcli dev list iface eth0显示以下内容:

IP4.DNS[1]:                             x.x.x.x
IP4.DNS[2]:                             y.y.y.y

但是,DNS 查找不遵循我给出的顺序。由于 yyyy 是本地服务器,因此它总是响应得更快,dnsmasq 总是使用来自 yyyy 的响应,而从不使用来自 xxxx 的响应。有什么方法可以强制 dnsmasq 中的查找顺序吗?

我知道我可以strict-order在 dnsmasq.conf 中执行类似操作。但是,在 ubuntu 14.04 中没有这样的文件,并且 resolv.conf 会自动生成。

[更新]

我添加了“strict-order” /etc/NetworkManager/dnsmasq.d/dnsorder.conf。重新启动网络和网络管理器,目前没有任何效果。networkmnager 运行的 dnsmasq 命令如下:

/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/run/sendsigs.omit.d/network-manager.dnsmasq.pid --listen-address=127.0.1.1 --conf-file=/var/run/NetworkManager/dnsmasq.conf --cache-size=0 --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq –conf-dir=/etc/NetworkManager/dnsmasq.d

/var/run/NetworkManager/dnsmasq.conf为空。未resolv.conf在 中找到/etc/NetworkManager

答案1

在我看来,这是错误的想法。虽然 libc 在某种程度上仅限于连续尝试使用 DNS 服务器,但全局 DNS 服务器列表应该包含所有相同的条目,并且 dnsmasq 的行为完全正确。

如果您想要将某些 DNS 子树配置为由不同的 DNS 服务器处理,作为根树的例外,您应该这样做。

据我所知,您可以配置 NetworkManager 提供的 dnsmasq 实例,/etc/NetworkManager/dnsmasq.d/其中其他问题的答案已经涵盖。

此外,dnsmasq 并不是现代发行版的唯一选择。您仍然可以/etc/resolv.conf在所有具有 NetworkManager 的发行版(包括您的 Ubuntu)中使用旧的 libc 配置文件。或者您可以在某些发行版上使用 Unbound。在现代发行版上有各种各样的方法可以实现本地 DNS 配置。

相关内容