dnsmasq 和 NetworkManager DNS

dnsmasq 和 NetworkManager DNS

我有一个小型计算机网络,可以在站点之间移动。

这些计算机连接到一个交换机,其中一台通过 dnsmasq 充当该网络的 DHCP 服务器和 DNS 服务器,我们称之为 MAINPC。

DNS 仅用于提供这些计算机之间的名称解析,如果您将另一台计算机添加到 LAN,它将通过 dnsmasq 添加到 DNS。

其余的 DNS 名称必须由辅助 DNS 服务器处理,这就是我的问题所在。

我不想硬编码辅助 DNS 服务器(如 8.8.8.8),因为有时您会将整个网络插入另一个具有自己的 DNS 服务器的网络内。我希望 dnsmasq 将 NetworkManager 提供的 DNS 作为辅助 DNS。

我所做的是dns=default在 中的 conf 文件中进行设置/etc/NetworkManager/conf.d/。这会导致 NetworkManager 将 DHCP 授权的 DNS 写入 /etc/resolv.conf,由 dnsmasq 读取。这解决了大多数问题。

使用 MAINPC 作为 DNS 服务器的 PC 工作正常,它们将查询定向到 MAINPC,如果可能的话,MAINPC 会从本地域应答,如果不可能,则重定向到 NetworkManager 授权的 DNS。

但 MAINPC 本身只使用 NetworkManager 授权的 DNS,无法解析网络中的其他 PC。简而言之,它没有使用自己的 DNS 服务器作为主服务器。

如何实现?基本上我只需要我的 /etc/resolv.conf 看起来像:

# Generated by NetworkManager
search internal_domain other_domain
nameserver MAINPC_IP
nameserver IP_MANDATED_BY_NETWORK_MANAGER

目前,我设法通过在文件中强制使用 MAINPC DNS 服务器来实现这一点 /etc/netplan/

# Generated by NetworkManager
search internal_domain other_domain
nameserver IP_MANDATED_BY_NETWORK_MANAGER
nameserver MAINPC_IP

答案1

我相信我已经解决了它。

NetworkManager 会将收到的 DNS 信息写入 /etc/resolv.conf 之外,并写入 /run/NetworkManager/resolv.conf

首先,我通过以下方式禁用对 /etc/resolv.conf 的写入:

$ cat /etc/NetworkManager/conf.d/disable-resolv-conf.conf
[main]
# Don't write /etc/resolv.conf, but will write /run/NetworkManager/resolv.conf
dns=none

我用包含本地主机 IP 的文件替换 /etc/resolv.conf,以使用 dnsmasq 作为 DNS 服务器。

$ cat /etc/resolv.conf 
search my-private.lan
nameserver 127.0.0.53

最后,我指示 dnsmasq 读取/run/NetworkManager/resolv.conf而不是/etc/resolv.conf

cat /etc/dnsmasq.d/networkmanager-dns.conf
# NetworkManager will write here the DNS obtained from the networks it connects to
# We will use these as secondary DNS
resolv-file=/run/NetworkManager/resolv.conf

在我的计算机上,我必须更改/run/NetworkManager目录的权限,因为默认情况下不允许其他用户读取它。

相关内容