为了学习,我正在编写自己的缓存 DNS 服务器(类似于 dnsmasq,但用 Python 代替)。 NetworkManager 从 DHCP 获取上游名称服务器并将它们放置在/etc/resolv.conf
.我的系统还会查找/etc/resolv.conf
要查询的名称服务器。
我需要放置我自己的 DNS 服务器 ( 127.0.0.1
),/etc/resolv.conf
以便我的系统会查询它,但 NetworkManager 会覆盖该文件。如果我禁止/配置 NetworkManager 不覆盖/etc/resolv.conf
,我的 DNS 服务器将无法找到缓存名称服务器,因为 NetworkManager 不会将它们写入那里。
似乎符号/etc/resolv.conf
链接到/var/run/NetworkManager/resolv.conf
,所以我想我可以让我的 DNS 服务器在那里找到上游服务器?我只是chattr -i /etc/resolv.conf
为了防止 NetworkManager 覆盖它。这是我应该这样做的方式,还是有更好的方法?
答案1
chattr 会起作用。它告诉 NM 不去管 resolv.conf。或者,请参阅rc-manager
中man NetworkManager.conf
。
NM 总是会写入 var/run 中的内部 resolv.conf,所以你可以抓取它。或者您使用nmcli -f all device show
,或使用调度程序脚本 ( man NetworkManager
)。
最后,您可以编写自己的 DNS 插件。但这需要您从源代码重建 NM,并且插件 API 也不是公开/稳定的。