电脑是 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 地址这不方便也不优雅,你希望这个过程能通过某种配置或者脚本达到自动化。自动化当然是可行的,只不过没必要刻意追求,想研究尝试当然是不错的选择,但放弃折腾直接在接口配置里写死一条地址也没啥不好,反正配置一次就够了,能用就行。机器软件是工具,是给咱用的,没必要反过来把它们供起来啥都顺着它们。 |