电脑是 ubuntu 接了有线,有线的 DNS(192.168.1.1)是自建的 adguardhome 。无线 wifi 也会自动连上(无线和有线不是一套网络环境),默认路由走的有线,查看 systemd-reslove 的配置,自动获得了两个 DNS
cat /run/systemd/resolve/resolv.conf
为
nameserver 192.168.1.1 (有线) nameserver 10.2.1.1 (无线)
但是默认总是走无线的 DNS 比如我测试:
$ dig hm.baidu.com ; <<>> DiG 9.16.6-Ubuntu <<>> hm.baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48252 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;hm.baidu.com. IN A ;; ANSWER SECTION: hm.baidu.com. 2371 IN CNAME hm.e.shifen.com. hm.e.shifen.com. 0 IN A 220.181.33.11 ;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: 二 2 月 23 12:56:59 CST 2021 ;; MSG SIZE rcvd: 83
$ dig hm.baidu.com @192.168.1.1 ; <<>> DiG 9.16.6-Ubuntu <<>> hm.baidu.com @192.168.1.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36927 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;hm.baidu.com. IN A ;; ANSWER SECTION: hm.baidu.com. 10 IN A 0.0.0.0 ;; Query time: 0 msec ;; SERVER: 192.168.1.1#53(192.168.1.1) ;; WHEN: 二 2 月 23 12:57:54 CST 2021 ;; MSG SIZE rcvd: 46
正常浏览器上网,也无法过滤 AD 现在总要手动把无线关了 但是还经常要用无线 打开 /关闭 太麻烦了 请教下大家能否改一下 systemd-reslove 的配置,默认走哪个网卡的路由就用哪个网卡获得的 DNS
1 ungrown 2021-02-23 14:37:12 +08:00 手动指定 DNS 不就行了,Linux 也好 Windows 也罢,各个网络连接(网络适配器)不都是可以手动自定义 DNS 地址的吗 |
![]() | 2 fiveelementgid 2021-02-23 14:39:56 +08:00 via Android 这个是 fedora 33 引进的新功能, release note 我花了一晚上看完了,用垃圾英语写了个简单的改法,你可以参考康康 https://github.com/wuyuansushen/systemd-resolved |
![]() | 3 fiveelementgid 2021-02-23 14:45:40 +08:00 via Android 详细看了一下你的描述,这个问题无解 而且 Ubuntu 的 service 还没有 Fedora 的功能强大 因为现行的 system-resolved 方案好像只能应用于全局,开无线的话相当于提供多了一个网络接口,依旧是优先走无线网络自己获取的 dns 。 有给一个回退方案:直接回滚不使用 system-resolved 服务,然后屏蔽 dhcp 分配的 dns,不过无法享受 concurrency 查询 dns 所带来的网速提升 |
![]() | 5 lizenghui OP @fiveelementgid 谢了 我按这个研究下。 |
![]() | 6 fiveelementgid 2021-02-23 14:59:49 +08:00 参考这个 https://fedoraproject.org/wiki/Changes/systemd-resolved#Detailed_Description 有一个回退方案,你看看 Ubuntu 能不能用,split DNS 确实可以提高访问速度,但是无法满足你这个需求,你可以回滚到以前的解决方案 |
![]() | 7 lizenghui OP @fiveelementgid 搞不清 systemd-resolve 跟 networkmanager 怎么配合的。。。 实在不行就只能停了 systemd-resolve 用写触发脚本去改 DNS 。。。 |
![]() | 8 fiveelementgid 2021-02-23 16:31:44 +08:00 via Android @lizenghui 关于配合,你用 man systemd-resolved.service 可以看看 我给你简单描述一下 就是 NetworkManager 没有动,只是在 /etc/resolv.conf 里面配置了,让 NetworkManager 的 dns 指向 127.0.0.53 ,然后交给 DNS server 处理 |
![]() | 9 lizenghui OP @fiveelementgid 嗯 读了一下。 /etc/resolv.conf 是从 /run/systemd/resolve/resolv.conf 软链过去的 那难道是 systemd-resolve 会拉取 networkmanager 每个网卡自动获取到的 dns 信息 统一做为上游 DNS ? |
![]() | 10 fiveelementgid 2021-02-23 19:17:22 +08:00 @lizenghui 看我的新帖子,给你完整的解决方案了 |
11 ungrown 2021-02-24 09:36:52 +08:00 @lizenghui #9 差不多就是这个意思 systemd-resolve 相当于一个(自以为)“智能”的 DNS 管理中心。其实 systemd 一路发展下来一直有这种趋势,系统里面不管什么东西,都喜欢去插一手显得自己是大内总管一样,并不只是网络或者 DNS 这一块儿。倒也确实带来了一些方便,将零零碎碎的配置信息综合到了一起,并提供了一个跨版本统一的配置接口,但这也相当于逼迫用户们不得不学习了解它,一旦遇到特殊情况想自定义个配置往往会被绕晕。 其实归根到底你就是需要给某个网络接口设置一个自定义的 dns,只不过你觉得需要去手动输入一个写死的 dns 地址这不方便也不优雅,你希望这个过程能通过某种配置或者脚本达到自动化。自动化当然是可行的,只不过没必要刻意追求,想研究尝试当然是不错的选择,但放弃折腾直接在接口配置里写死一条地址也没啥不好,反正配置一次就够了,能用就行。机器软件是工具,是给咱用的,没必要反过来把它们供起来啥都顺着它们。 |