我想在我的 PC 上使用 cloudflare 名称服务器作为默认服务器,为了实现这一点,按照 arch wiki,我创建了/etc/NetworkManager/conf.d/dns-servers.conf
包含以下内容的文件:
[global-dns-domain-*]
servers=2606:4700:4700::1111,1.1.1.1
这可行,但现在我在访问某些公共网络登录页面时遇到问题,因为它们使用自动提供的 DNS 名称服务器重定向到登录页面。
有什么方法可以设置网络管理器,以便在全局范围内使用我提供的名称服务器作为首选,并使用本地 DHCP 名称服务器作为后备?
已经有一个类似的问题,但所有答案都是假设 DNS 不是由网络管理器直接处理,而是由 dhcpcd 或类似软件处理。有没有办法只用网络管理器来做到这一点?
答案1
经过一番研究,我找到了一种方法。
首先,我删除了/etc/NetworkManager/conf.d/dns-servers.conf
(如果您一开始就没有创建它,请跳过此操作)。然后,我创建了/etc/NetworkManager/dispatcher.d/pre-up.d/30-add-custom-dns.sh
包含以下内容的文件:
#!/bin/sh
if [ "$2" = "pre-up" ]; then
sed -i '1inameserver 1.1.1.1' /etc/resolv.conf
sed -i '1inameserver 2606:4700:4700::1111' /etc/resolv.conf
fi
你必须确保它是可执行的并且它属于root,我运行
sudo chown root:root /etc/NetworkManager/dispatcher.d/pre-up.d/30-add-custom-dns.sh
和
sudo chmod +x /etc/NetworkManager/dispatcher.d/pre-up.d/30-add-custom-dns.sh
为了确定。最后,我启用并启动了这个 systemd 服务:NetworkManager-dispatcher.service
。
该脚本将在连接初始化后运行,并将附加在/etc/resolv.conf
cloudflare 名称服务器条目的开头,同时仍然保留 NetworkManager 已放置在那里的内容。