几种常见的 DNS 优化方法
1)对 DNS 解析的结果进行缓存
2)对 DNS 解析的结果进行预取
3)使用 HTTPDNS 取代常规的 DNS 解析
4)基于 DNS 的全局负载均衡(GSLB)
询该域名对应的网络地址
nslookup
# nslookup k4nz.com Server: 172.31.253.23 Address: 172.31.253.23#53 Non-authoritative answer: k4nz.com canonical name = world.host.d3rm.org. Name: world.host.d3rm.org Address: 45.78.20.157
172.31.253.23 并不是直接管理 time.geekbang.org 的域名服务器,所以查询结果是非权威的(Non-authoritative answer)
dig
# dig +trace +nodnssec k4nz.com // +trace表示开启跟踪查询 +nodnssec表示禁止DNS安全扩展 ; <<>> DiG 9.11.5-P4-5.1+deb10u1-Debian <<>> +trace +nodnssec k4nz.com ;; global options: +cmd . 19909 IN NS k.root-servers.net. . 19909 IN NS a.root-servers.net. . 19909 IN NS l.root-servers.net. . 19909 IN NS i.root-servers.net. . 19909 IN NS d.root-servers.net. . 19909 IN NS e.root-servers.net. . 19909 IN NS g.root-servers.net. . 19909 IN NS h.root-servers.net. . 19909 IN NS b.root-servers.net. . 19909 IN NS f.root-servers.net. . 19909 IN NS m.root-servers.net. . 19909 IN NS j.root-servers.net. . 19909 IN NS c.root-servers.net. ;; Received 811 bytes from 172.31.253.23#53(172.31.253.23) in 1 ms com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. ;; Received 833 bytes from 192.203.230.10#53(e.root-servers.net) in 166 ms k4nz.com. 172800 IN NS f1g1ns1.dnspod.net. k4nz.com. 172800 IN NS f1g1ns2.dnspod.net. ;; Received 91 bytes from 192.43.172.30#53(i.gtld-servers.net) in 234 ms k4nz.com. 600 IN CNAME world.host.d3rm.org. k4nz.com. 86400 IN NS f1g1ns2.dnspod.net. k4nz.com. 86400 IN NS f1g1ns1.dnspod.net. ;; Received 146 bytes from 129.211.176.224#53(f1g1ns2.dnspod.net) in 14 ms
查询可以分为以下几个步骤:
1)从 172.31.253.23 查到的一些根域名服务器(.)的 NS 记录
2)从 NS 记录结果中选一个(e.root-servers.net),并查询顶级域名 com. 的 NS 记录
3)是从 com. 的 NS 记录中选择一个(i.gtld-servers.net),并查询二级域名 k4nz.com. 的 NS 服务器。
4)从 k4nz.com. 的 NS 服务器(f1g1ns2.dnspod.net)查询最终主机 k4nz.com. 的 CNAME 记录。
问题排查:DNS 解析失败(配置错误)
执行 DNS 查询命令,返回如下错误:
# nslookup k4nz.com ;; connection timed out; no servers could be reached // 从提示中可以看出,无法连接 DNS 服务器。因此我们应该检查 /etc/resolv.conf 文件 // 比如 nameserver 114.114.114.114 或者 nameserver 172.31.253.23 // 再次执行命令进行测试 # nslookup k4nz.com Server: 172.31.253.23 Address: 172.31.253.23#53 Non-authoritative answer: k4nz.com canonical name = world.host.d3rm.org. Name: world.host.d3rm.org Address: 45.78.20.157
问题排查:DNS 解析不稳定(网络异常)
解析非常慢,需要 10 秒,偶尔速度比较快,整体并不稳定,偶尔成功,偶尔失败。
解析结果不稳定,就有很多种可能的情况:
1)服务器本身有问题:响应慢、不稳定、查询时间长等等
2)网络传输异常:比如客户端到 DNS 服务器的网络延迟比较大
3)链路总某些网络设备异常,导致数据包丢弃
对于问题(1),可以跟换客户端来测试 DNS 服务器。比如使用与 DNS 服务器同地域的服务器来测试 DNS 服务器。
对于问题(2),可以 ping 测试,查看网络延迟
对于问题(3),可以”跳过“网络设备,进行 DNS 解析测试。
如果解析已经很慢,可以考虑使用补救措施,比如本地搭建 dnsmasq 服务,利用其 DNS 缓存提高解析速度。
相关连接
参考文献