NetworkManager & dnsmasq - 忽略自動 DNS 設置
我正在執行帶有 NetworkManager 和 dnsmasq 設置的 Arch Linux。一切似乎都很好,除了我嘗試使用新的 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
但無濟於事。
我沒有使用
dnsmasq
,但我遇到了類似的問題。我的解決方案是:
- 將您想要的 DNS 伺服器放入
/etc/resolv.conf
( ref )# 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
ref )。但是,我沒有這樣做,因為 dnsmasq 不是由管理的,systemctl
並且您不會自動以登錄 journalctl 結束(也許有一些方法可以解決這個問題)。相反,我使用了以下配置(ref):
/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