在哪里可以找到从 DHCP(通过 NetworkManager)获得的名称服务器?

在哪里可以找到从 DHCP(通过 NetworkManager)获得的名称服务器?

为了学习,我正在编写自己的缓存 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-managerman NetworkManager.conf

NM 总是会写入 var/run 中的内部 resolv.conf,所以你可以抓取它。或者您使用nmcli -f all device show,或使用调度程序脚本 ( man NetworkManager)。

最后,您可以编写自己的 DNS 插件。但这需要您从源代码重建 NM,并且插件 API 也不是公开/稳定的。

相关内容