![在哪里可以找到从 DHCP(通过 NetworkManager)获得的名称服务器?](https://linux22.com/image/109490/%E5%9C%A8%E5%93%AA%E9%87%8C%E5%8F%AF%E4%BB%A5%E6%89%BE%E5%88%B0%E4%BB%8E%20DHCP%EF%BC%88%E9%80%9A%E8%BF%87%20NetworkManager%EF%BC%89%E8%8E%B7%E5%BE%97%E7%9A%84%E5%90%8D%E7%A7%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
为了学习,我正在编写自己的缓存 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 也不是公开/稳定的。