NetworkManager & dnsmasq - 忽略自动 DNS 设置

Tac*_*lff 4 resolv.conf networkmanager arch-linux dnsmasq

我正在运行带有 NetworkManager 和 dnsmasq 设置的 Arch Linux。一切似乎都很好,除了我尝试使用新的 CloudFlare 1.1.1.1DNS,但解析器一直使用我的路由器通告的 DNS。似乎添加了名称服务器,包括我的路由器的 IP,见下文:

Apr 04 20:02:56 tdewolff dnsmasq[22337]: setting upstream servers from DBus
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 2606:4700:4700::1001#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 2606:4700:4700::1111#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 1.0.0.1#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 1.1.1.1#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver 192.168.1.254#53(via wlp4s0)
Apr 04 20:02:56 tdewolff dnsmasq[22337]: using nameserver fe80::1%wlp4s0#53
Apr 04 20:02:56 tdewolff dnsmasq[22337]: cleared cache
Run Code Online (Sandbox Code Playgroud)

使用nmcli dev show一致显示:

IP4.DNS[1]:                             192.168.1.254
IP6.DNS[1]:                             fe80::1
Run Code Online (Sandbox Code Playgroud)

但我想使用 CloudFlare DNS,而不考虑本地网络(并且不必更改每个网络的连接设置)。如何更改 DNS 查找的顺序,或禁用路由器的解析器?我尝试添加strict-order/etc/NetworkManager/dnsmasq.d/local但无济于事。

tsj*_*tsj 7

我没有使用dnsmasq,但我遇到了类似的问题。我的解决方案是:

之后可能会重新启动 NetworkManager 等。如果你这样做,nmcli dev show它会显示路由器报告的 DNS 服务器:

IP4.DNS[1]:                             192.168.50.1
Run Code Online (Sandbox Code Playgroud)

但是如果你使用nslookup(from bind-toolsin Arch),它看起来1.1.1.1实际上是用于查询的:

» nslookup google.com
Server:     1.1.1.1
Address:    1.1.1.1#53

Non-authoritative answer:
Name:   google.com
Address: 172.217.9.238
Name:   google.com
Address: 2607:f8b0:4006:801::200e
Run Code Online (Sandbox Code Playgroud)

更新:使用 dnsmasq 进行配置

我用 dnsmasq 尝试了一个配置。NetworkManager 有一个dnsmasq插件,您可以通过放入/etc/NetworkManager/NetworkManager.conf以下内容来使用它:

[main]
dns=dnsmasq
Run Code Online (Sandbox Code Playgroud)

这将启动dnsmasq与NetworkManager和投入127.0.0.1/etc/resolv.confREF)。但是,我没有这样做,因为 dnsmasq 不受管理,systemctl并且您不会自动登录 journalctl(也许有一些方法可以解决这个问题)。

相反,我使用了以下配置(ref):

重新启动 NetworkManager 和dnsmasq. 现在,验证您的本地名称服务器没有被覆盖:

» cat /etc/resolv.conf
nameserver 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

我们也可以质疑 NetworkManager:

» cat /run/NetworkManager/resolv.conf 
# Generated by NetworkManager
nameserver 192.168.50.1

» nmcli dev show
...
IP4.DNS[1]:                             192.168.50.1
Run Code Online (Sandbox Code Playgroud)

但是这些条目似乎只是表示路由器报告的内容,不一定是实际用于查询的内容,因为如果我们这样做drill google.com,我们会看到127.0.0.1实际上使用了:

;; Query time: 0 msec
;; SERVER: 127.0.0.1
;; WHEN: Fri Apr 20 11:32:59 2018
;; MSG SIZE  rcvd: 44
Run Code Online (Sandbox Code Playgroud)

另外,如果你把log-queries/etc/dnsmasq.conf如上图所示,你看到journalctl后运行drill stackoverflow.com两次:

dnsmasq[27679]: query[A] stackoverflow.com from 127.0.0.1
dnsmasq[27679]: forwarded stackoverflow.com to 1.0.0.1
dnsmasq[27679]: reply stackoverflow.com is 151.101.1.69
dnsmasq[27679]: reply stackoverflow.com is 151.101.65.69
dnsmasq[27679]: reply stackoverflow.com is 151.101.129.69
dnsmasq[27679]: reply stackoverflow.com is 151.101.193.69
dnsmasq[27679]: query[A] stackoverflow.com from 127.0.0.1
dnsmasq[27679]: cached stackoverflow.com is 151.101.193.69
dnsmasq[27679]: cached stackoverflow.com is 151.101.129.69
dnsmasq[27679]: cached stackoverflow.com is 151.101.65.69
dnsmasq[27679]: cached stackoverflow.com is 151.101.1.69
Run Code Online (Sandbox Code Playgroud)

第一次询问1.0.0.1,第二次在缓存中找到结果。您可以删除log-queriesdnsmasq.conf是否满足。