使用 DHCP 提供的 DNS 名称服务器作为网络管理器的后备

使用 DHCP 提供的 DNS 名称服务器作为网络管理器的后备

我想在我的 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.confcloudflare 名称服务器条目的开头,同时仍然保留 NetworkManager 已放置在那里的内容。

相关内容