记一次 DNS 错误的解决
看到这个标题,老司机们可能会说:这有必要写篇文章?改下 /etc/resolv.conf
不就好了。还真就不行,下面来看看具体情况。
症状
网页上报错:“您的微擎系统链接不可用,可能是因为您的微擎系统版本过低,请升级到微擎最新版本。或者检查网络后重试”,Could not resolve: openapiw7.cc
.
Debug 过程
1$ ping z.cn
2Temporary failure in name resolution
这说明在终端也无法进行 DNS 查询。
是否是 resolv.conf 配置出错?
查看 /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit
nameserver 127.0.0.53
注意看上面的注释,说是此文件被 systemd-resolved
接管。这时候你直接修改 nameserver
确实有用,但是治标不治本,因为过一段时间此文件又会被重置。
是否是 resolved.conf 配置出错?
按照网上能搜到的办法,修改 /etc/systemd/resolved.conf
:
[Resolve]
DNS=119.29.29.29
并重启服务:
1$ sudo systemctl restart systemd-resolved
查看服务状态:
1$ sudo systemctl status systemd-resolved
2...
3Active: active (running)
1$ systemd-resolve --status
2Global
3 DNS Servers: 119.29.29.29
4 ...
可以看到 systemd-resolved
正常运行。
但是问题依然未解决。
是否是上游 DNS 的问题?
1$ nslookup z.cn 1.1.1.1
2$ nslookup z.cn 119.29.29.29
3$ nslookup z.cn 127.0.0.53
也可以用 dig 命令
1$ dig @8.8.8.8 www.google.com
结果前两个均正常,最后一个输出:
1connection timed out; no servers could be reached
这说明上游 DNS 无问题,是本机的解析服务的问题。
是否是 systemd-resolved 服务出错?
我们得看日志。但是 systemd-resolved
默认的输出级别不够,得改到 DEBUG 级别。根据此处的说法,sudo systemctl edit systemd-resolved
增加:
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
然后重启服务,通过下方命令查看日志:
journalctl -fu systemd-resolved
结果发现没有查询记录。我们执行一下 ping/dig/nslookup
命令,结果还是没有查询记录。
检查 53 端口状态
执行
1$ telnet 127.0.0.53 53
2Trying 127.0.0.53...
3telnet: Unable to connect to remote host: Connection refused
连接拒绝。可以对照
1$ telnet 8.8.8.8 53
2Trying 8.8.8.8...
3Connected to 8.8.8.8.
4Escape character is '^]'.
5^CConnection closed by foreign host
表名
执行
1$ sudo lsof -i:53
发现无监听。这说明 systemd-resolved 服务虽然开着,但并未监听。
解决方案
1sudo vi /etc/systemd/resolved.conf
修改配置:
1DNSStubListener=yes
重启服务后,可以看到 53 端口有监听了:
1COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
2systemd-r 3953 systemd-resolve 12u IPv4 36660 0t0 UDP localhost:domain
3systemd-r 3953 systemd-resolve 13u IPv4 36661 0t0 TCP localhost:domain (LISTEN)
DNS 查询恢复正常:
1ubuntu@uclassol:~$ ping z.cn
2PING z.cn (54.222.60.252) 56(84) bytes of data.
364 bytes from 54.222.60.252 (54.222.60.252): icmp_seq=1 ttl=237 time=25.5 ms
4^C
5--- z.cn ping statistics ---
62 packets transmitted, 1 received, 50% packet loss, time 1001ms
7rtt min/avg/max/mdev = 25.586/25.586/25.586/0.000 ms
8ubuntu@uclassol:~$ nslookup z.cn 127.0.0.53
9Server: 127.0.0.53
10Address: 127.0.0.53#53
11
12Non-authoritative answer:
13Name: z.cn
14Address: 54.222.60.252