首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetworkManager & dnsmasq -忽略自动DNS设置

NetworkManager & dnsmasq -忽略自动DNS设置
EN

Server Fault用户
提问于 2018-04-04 08:15:51
回答 2查看 12.4K关注 0票数 4

我正在运行Arch,设置了NetworkManager和dnsmasq。这一切似乎都很好,除了我尝试使用新的CloudFlare 1.1.1.1 DNS,但是解析器继续使用由我的路由器广告的DNS。名称服务器似乎是添加的,包括我的路由器的IP,请参见下面的内容:

代码语言:javascript
复制
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一致显示:

代码语言:javascript
复制
IP4.DNS[1]:                             192.168.1.254
IP6.DNS[1]:                             fe80::1

但是我想使用CloudFlare DNS而不管本地网络(而不必更改每个网络的连接设置)。如何更改DNS查找的顺序,或禁用路由器的解析器?我尝试过将strict-order添加到/etc/NetworkManager/dnsmasq.d/local中,但没有结果。

EN

回答 2

Server Fault用户

回答已采纳

发布于 2018-04-10 20:24:15

我不使用dnsmasq,但我也有类似的问题。对我来说,解决办法是:

  • 将您想要的DNS服务器放在/etc/resolv.conf (参考) # IPv4名称服务器:IPv4 1.1.1.1名称服务器1.0.0.1 # IPv6名称服务器:名称服务器2606:4700:4700:1111名称服务器2606:4700:4700:4700::1001
  • 告诉NetworkManager不要用/etc/NetworkManager/NetworkManager.conf (参考) main dns=none来修改您的/etc/resolv.conf

可能会重新启动NetworkManager等。如果使用nmcli dev show,它将显示路由器报告的DNS服务器:

代码语言:javascript
复制
IP4.DNS[1]:                             192.168.50.1

但是,如果您使用nslookup (来自bind-tools in Arch),那么看起来1.1.1.1实际上用于查询:

代码语言:javascript
复制
» 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来使用该插件:

代码语言:javascript
复制
[main]
dns=dnsmasq

这将从dnsmasq开始使用NetworkManager,并将127.0.0.1放入/etc/resolv.conf (参考)。但是,我没有这样做,因为dnsmasq不是由systemctl管理的,而且您不会自动地以日志记录结束(也许还有一些方法)。

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

  • /etc/NetworkManager/NetworkManager.conf:main dns=none
  • /etc/resolv.conf:名称服务器127.0.0.1
  • /etc/resolv.dnsmasq.conf:# IPv4名称服务器:名称服务器1.0.0.1 # IPv6名称服务器:命名服务器2606:4700:4700::1111命名服务器2606:4700:4700:4700:1001
  • /etc/dnsmasq.conf:resolv-file=/etc/conv.dnsmasq.conf日志-查询

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

代码语言:javascript
复制
» cat /etc/resolv.conf
nameserver 127.0.0.1

我们也可以质疑NetworkManager:

代码语言:javascript
复制
» 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

代码语言:javascript
复制
;; 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中,那么在运行drill stackoverflow.com两次之后,在journalctl中可以看到:

代码语言:javascript
复制
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

票数 7
EN

Server Fault用户

发布于 2018-04-12 22:03:34

一个稍微好一点的方法是为NetworkManager使用一个符号链接,因为它简化了/etc/resolv.conf管理。这是我的发行版(Fedora)中的默认选项,您可以通过查看dns选项在man 5 NetworkManager.conf中签入disto。

首先创建一个包含cloudflare DNS的文件(我使用了/usr/local/etc/resolv.cloudflare.conf),将cloudflare定义为权威DNS:

代码语言:javascript
复制
# 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/conv.conf sudo ln -s /usr/local/etc/conv.Cloudflre.conf/etc/surv.conf

此时,您可以通过以下方法验证名称服务器正在执行正确的操作:

代码语言:javascript
复制
$ 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=变量有不同的默认设置,那么更新它以包括以下内容。

代码语言:javascript
复制
[main]
dns=symlink

然后,如果您创建/etc/resolve.conf / Then符号链接,则resolve.conf将不会更新,

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/905903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档