我正在运行 Arch Linux,并设置了 NetworkManager 和 dnsmasq。一切似乎都运行良好,只是我尝试使用新的 CloudFlare 1.1.1.1
DNS,但解析器一直使用我的路由器公布的 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
持续使用nmcli dev show
表明:
IP4.DNS[1]: 192.168.1.254
IP6.DNS[1]: fe80::1
但我想使用 CloudFlare DNS,而不管本地网络如何(并且不必更改每个网络的连接设置)。我如何更改 DNS 查找的顺序,或禁用路由器的解析器?我尝试添加strict-order
但/etc/NetworkManager/dnsmasq.d/local
无济于事。
答案1
我没有使用dnsmasq
,但我遇到了类似的问题。我的解决方案是:
将所需的 DNS 服务器输入到
/etc/resolv.conf
(參考)# IPv4 nameservers: nameserver 1.1.1.1 nameserver 1.0.0.1 # IPv6 nameservers: nameserver 2606:4700:4700::1111 nameserver 2606:4700:4700::1001
告诉 NetworkManager 不要修改您的,
/etc/resolv.conf
方法是在您的/etc/NetworkManager/NetworkManager.conf
(參考)[main] dns=none
之后可能需要重启 NetworkManager 等。如果这样做,nmcli dev show
它会显示路由器报告的 DNS 服务器:
IP4.DNS[1]: 192.168.50.1
但是如果你使用nslookup
(来自bind-tools
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
更新:使用 dnsmasq 配置
我尝试了使用 dnsmasq 的配置。NetworkManager 有一个dnsmasq
插件,您可以通过将其放入/etc/NetworkManager/NetworkManager.conf
以下内容来使用:
[main]
dns=dnsmasq
这将从dnsmasq
NetworkManager 启动并127.0.0.1
放入/etc/resolv.conf
(參考)然而,我不是这样做是因为 dnsmasq 不受管理,systemctl
并且您不会自动登录 journalctl(也许有某种方法可以解决这个问题)。
相反,我使用了以下配置(參考):
/etc/NetworkManager/NetworkManager.conf
:[main] dns=none
/etc/resolv.conf
:nameserver 127.0.0.1
/etc/resolv.dnsmasq.conf
:# IPv4 nameservers: nameserver 1.0.0.1 # IPv6 nameservers: nameserver 2606:4700:4700::1111 nameserver 2606:4700:4700::1001
/etc/dnsmasq.conf
:resolv-file=/etc/resolv.dnsmasq.conf log-queries
重新启动 NetworkManager 和dnsmasq
。现在,验证您的本地名称服务器没有被覆盖:
» cat /etc/resolv.conf
nameserver 127.0.0.1
我们还可以质疑NetworkManager:
» cat /run/NetworkManager/resolv.conf
# Generated by NetworkManager
nameserver 192.168.50.1
» nmcli dev show
...
IP4.DNS[1]: 192.168.50.1
但这些条目似乎只是表明路由器报告了什么,不一定是实际用于查询的内容,因为如果我们这样做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
另外,如果您按上面所示输入,运行两次后您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
第一次询问1.0.0.1
,第二次在缓存中找到结果。如果满意,则可以log-queries
从中删除。dnsmasq.conf
答案2
一个稍微好一点的方法是使用 的符号链接,因为它可以简化 NetworkManager 管理/etc/resolv.conf
。这是我的发行版 (Fedora) 中的默认设置,您可以通过查看dns
中的选项来在您的发行版中检查man 5 NetworkManager.conf
。
首先创建一个/usr/local/etc/resolv.cloudflare.conf
包含 cloudflare DNS 的文件(我使用了),将 cloudflare 定义为权威 DNS:
# IPv4 nameservers:
nameserver 1.1.1.1
nameserver 1.0.0.1
# IPv6 nameservers:
nameserver 2606:4700:4700::1111
nameserver 2606:4700:4700::1001
然后符号链接到该文件,删除现有文件。
sudo rm /etc/resolv.conf sudo ln -s /usr/local/etc/resolv.cloudflare.conf /etc/resolv.conf
此时,您可以通过以下方式验证名称服务器是否正确运行
$ dig google.com
; <<>> DiG 9.11.2-P1-RedHat-9.11.2-1.P1.fc26 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41906
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1536
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 185 IN A 172.217.9.238
;; Query time: 10 msec
;; SERVER: 1.1.1.1#53(1.1.1.1)
;; WHEN: Thu Apr 12 18:00:37 EDT 2018
;; MSG SIZE rcvd: 55
笔记:如果您的发行版的 NetworkManager 对变量有不同的默认值dns=
,请更新它以包含以下内容。
[main]
dns=symlink
然后,如果你将 /etc/resolve.conf 设为符号链接,NetworkManager 将不会更新 resolve.conf,