问题需求参考老哥的帖子: https://v2ex.com/t/755417
先上成果图
梳理了一下(不知道对不对,有错误请踹我):NetworkManager 管理整个网络,systemd-resolved.service 本质上只提供了一个 DNS 服务器(IP:127.0.0.53),NetworkManager 所需要做的只是把 DNS request 交付给 systemd-resolved.service 的 DNS 服务器进行处理
但是对于系统 DNS 工具来说,这个 DNS 服务器(127.0.0.53)是一个黑箱,因此查询的结果只能看到一个 DNS 服务器:
原帖里面老哥采用绕过这个 DNS 服务器,直接用 @指定外部 DNS 服务器会让整个 service 无用
因此正确的处理方案应该是进去 127.0.0.53 内部查看,用 resolvectl(就第一个图)
上面的 Global 段的 DNS 服务器很好改,直接改 /etc/systemd/resolved.conf
但是这个实际上并没有用,因为 .~ 代表匹配的域名
我们可以看到 Global 和 wifi 的 wlp3s0 都有.~
意思是任何域名都会往这两个 field 的所有 DNS 服务器同时发送查询(这就是 split DNS 的 concurrency 优势,被引入的原因),因为 ISP 提供的 10.0.0.1 肯定比 cf 的 1.1.1.1 快,所以肯定会用 ISP 的,这样设置 DNS 会实效
但是实际上你可以学我之前配置的(我之前也没想明白怎么消除 wlp3s0 的),一个一个手动自己加,例如 google.com ,用 wireshark 抓包可以证🉐此时不会向 wlp3s0 的 DNS(就 10.0.0.1)发送 DNS 包查询
但是这种方法很 nt,因为不可能把所有常用的网站列上去
所以最好的解决方案应该是 把 wlp3s0 自动分配的 DNS 消除掉
思路回到最上面,resolved 的 DNS 服务只是单纯接受从 NetworkManager 处接受的 DNS 设置,因此要在 NetworkManager 这一级管理的 Network 动心思
旧版本的配置文件位于:
/etc/sysconfig/network-scripts/
参考配置信息是: man nm-settings-ifcfg-rh
新版本的配置文件位于:
/etc/NetworkManager/system-connections/
参考的配置信息为:man nm-settings
要达到老哥的需求,应该是两个方面: 1.去除 ISP 自带的 DNS 2.添加自己的 DNS
对应上面两点加两条两个指令配置
[完]
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.