Dnsmasq

NetworkManager & dnsmasq - 忽略自動 DNS 設置

  • April 20, 2018

我正在執行帶有 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

使用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-toolsArch 中),它看起來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

這將從dnsmasqNetworkManager 開始並放入127.0.0.1/etc/resolv.confref 。但是,我沒有這樣做,因為 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-queriesdnsmasq.conf

引用自:https://serverfault.com/questions/905903