解决 Ubuntu 16.10 上频繁的 DNS 解析失败

更新日期: 2017-01-18 阅读次数: 23711 分类: DNS

最近一个月,在 Ubuntu 16.10 上使用 Chrome 浏览网页,经常出现 DNS 解析失败的情况。错误信息诸如

  • DNS_PROBE_FINISHED_NXDOMAIN
  • ERR_NAME_NOT_RESOLVED

奇怪的是,只有部分域名会出现该错误。例如,baidu.com 及其所有子域名。

通过 dig +trace 排除了授权 DNS 的问题。

将 network connections 里的 DNS 服务器修改成了 114.114.114.114, 8.8.8.8 还是无济于事。

又尝试了修改 /etc/resolv.conf ,但是会被系统自动还原成 127.0.0.1

Google 了一下类似问题,发现都是通过禁用掉 dnsmasq 来解决的。。。难道 Ubuntu 已经内置了 dnsmasq?

  • 禁用 dnsmasq 这种方案很傻逼
  • Ubuntu 为何要内置 dnsmasq?

先确认一下

ps axwu | grep dns 
dnsmasq   2560  0.0  0.0  54828  2936 ?        S    07:54   0:00 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -r /run/dnsmasq/resolv.conf -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service --trust-anchor=.,19036,8,2,49AAC11D7B6F6446702E54A1607371607A1A41855200FD2CE1CDDE32F24E8FB5
nobody    3393  0.0  0.0  54828  4212 ?        S    07:54   0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d

果然如此,打开 /etc/dnsmasq.conf 发现,里面啥也没有配置。。。那默认的 upstream servers 是啥???

想起之前因机房内 DNS 服务器负载过高,使用 dnsmasq 解决的案例,使用 dnsmasq 保证本地 DNS 服务的稳定性

参考之前写的自动脚本,把 Ubuntu 16.10 Desktop 内置的 dnsmasq 调整了一下

cat <<DNSMASQ_CONF > /etc/dnsmasq.conf
listen-address=127.0.0.1
resolv-file=/etc/dnsmasq.resolv.conf
all-servers
cache-size=1000
local-ttl=60
clear-on-reload
no-negcache
DNSMASQ_CONF

cat <<DNSMASQ_RESOLV_CONF > /etc/dnsmasq.resolv.conf
nameserver 114.114.114.114
nameserver 182.254.116.116
nameserver 119.29.29.29
DNSMASQ_RESOLV_CONF

/etc/init.d/dnsmasq start

182.254.116.116,119.29.29.29 是腾讯的 public DNS。这3个 nameserver 的组合我还是非常放心的,在腾讯的时候用过一年,没有出现过问题。

解析失败问题暂时不见了,再观察一段时间。

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式