从 16.04 升级到 Ubuntu 18.04 后,我的 dnsmasq 配置损坏了。
- systemd-resolved 已启用并正在运行
- dnsmasq 已启用并正在运行
任何对外界的 DNS 查询都会挂起大约 30 秒才能成功。对我的本地主机 (anything.mylocal) 的查询将立即成功。
如果我停止 dnsmasq(即service dnsmasq stop
),那么所有对外界的 DNS 查询将立即起作用(但 .mylocal 当然不会)。
在:/etc/dnsmasq.conf
listen-address=127.0.0.1
address=/.mylocal/127.0.0.1
在:/etc/NetworkManager/NetworkManager.conf
[main]
...
# dns=dnsmasq
...
取消注释 dns= 行将阻止任何 dns 查询。
在:/etc/systemd/resolved.conf
[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=no
在:/etc/resolv.conf
该文件链接至:../run/resolvconf/resolv.conf,其中包含:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 127.0.0.53
在:/etc/nsswitch.conf
passwd: compat systemd
group: compat systemd
shadow: compat
hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
与输出有一个明显的区别systemd-resolve --status
:
- 在 dnsmasq 运行时,Global 中的第一行内容如下:
DNS Servers: 127.0.0.1
- 停止 dnsmasq 后,此行不存在,没有全局 DNS 服务器,第一个有用的服务器在 Link 2 部分中定义,它指定了我的默认网关(192.168.1.1)
任何帮助是极大的赞赏 :)
答案1
睡了一夜之后 ;-) 这就是我想到的。我只是手动添加了一些公共上游服务器(1.1.1.1 是 CloudFlare 的,8.8.8.8 是 Google 的)
在:/etc/dnsmasq.conf:
listen-address=127.0.0.1
address=/.mylocal/127.0.0.1
server=1.1.1.1
server=8.8.8.8
所有剩余文件都和我的问题一样。systemd-resolved 和 dnsmasq 都已启用并正在运行。
这使得 DNS 查询可以正常工作。
我仍然不认为这是正确答案,因为我更喜欢使用网络提供的 DNS,但至少它有效......