在RHEL中如何通过systemd NetworkManager设置全局默认DNS服务器(而非按单个连接配置)
在RHEL中如何通过systemd NetworkManager设置全局默认DNS服务器(而非按单个连接配置)
我完全懂你的困扰——现在RHEL里默认是由systemd NetworkManager动态生成和管理/etc/resolv.conf的,用nmcli只能给单个连接配置DNS,要给整台主机、所有连接设全局DNS确实得换个思路,不能再用老办法了。
下面是具体的解决步骤,亲测有效:
- 不要直接手动修改
/etc/resolv.conf:毕竟NetworkManager会定期覆盖这个文件,改了也是白改,白费功夫。 - 创建/修改NetworkManager的全局DNS配置文件:
新建或者编辑/etc/NetworkManager/conf.d/dns.conf文件(如果conf.d目录下没有这个文件就自己建一个),在里面添加以下内容:
解释一下:[main] dns=default dns-servers=8.8.8.8,8.8.4.4dns=default是让NetworkManager负责DNS配置的处理;dns-servers后面填你想要的全局DNS服务器地址,多个地址用逗号分隔就行,比如上面的Google公共DNS,你也可以换成自己需要的。 - 重启NetworkManager服务让配置生效:
执行下面的命令:sudo systemctl restart NetworkManager - 验证配置是否生效:
查看/etc/resolv.conf文件,你会发现里面已经包含了你设置的全局DNS服务器,而且不管后续添加哪个新连接,这些全局DNS都会被优先使用。
关于你提到的systemd-resolved的问题,你的担心是对的:如果同时让NetworkManager和systemd-resolved两个服务都去管理/etc/resolv.conf,大概率会出现配置冲突、文件被反复覆盖的问题。现在RHEL默认就是用NetworkManager来接管DNS配置的,所以systemd-resolved处于禁用状态,不要随便去创建/etc/resolv.conf到/run/systemd/resolve/resolv.conf的软链接,除非你打算完全切换到systemd-resolved来管理DNS(那得先在NetworkManager配置里禁用它的DNS管理功能,不然肯定出问题)。
另外补充一句:如果个别连接需要使用专属的DNS服务器(覆盖全局配置),你还是可以用nmcli connection modify <连接名> ipv4.dns <DNS地址>来单独配置,NetworkManager会自动处理全局和单个连接的DNS优先级。
备注:内容来源于stack exchange,提问作者Nick Kiermaier




