DNS 查询全解(上)

大多数用户可能对于 DNS 的印象仅仅是有 A、CNAME、MX、TXT 这些记录,以及大概的作用。不过对于修改 NS 需要 48-72 小时,有些地方解析生效了有些地方还没有这些问题还存在疑问。本文将会从根开始说明一次解析的全过程,看完之后这些问题都会消失。

递归服务器和权威服务器

dns

可能大家经常听到递归和权威 DNS,但是不明白他们的区别。上图是访客的查询过程。

递归服务器就是电信运营商或者第三方的运营商自己架设的一台用来缓存解析结果的 DNS 以防止权威 DNS 过载,同时减轻运营商对外的流量压力。权威 DNS 就是域名的 NS 记录对应的服务器,解析结果是相对可靠的,而不是递归这种第三方的结果。(因为 UDP 存在劫持可能,所以并不是绝对可靠。除非是 DNSSEC,这个在中国大陆无法使用因此不细说。)

解析记录

来学习一下解析记录的类型和对应作用:

  • A:返回一个或者多个 IPv4 地址供用户使用;
  • CNAME:返回一个域名,表示你还需要去查这个域名的 A 记录,如果返回的域名还是得到 CNAME 结果,那就继续跟踪查,直到返回 A 记录;
  • MX:可以返回 IP 或者域名,表示邮件需要传递到的目标服务器;
  • TXT:文本记录,里面可以放 DKIM 密钥(邮件签名)、编写 SPF 记录(防垃圾邮件)等
  • AAAA:返回一个或多个 IPv6 地址;
  • NS:nameserver的缩写,表示这个域名的权威 DNS 服务器。

生命周期(TTL)

以上记录的返回值都有一个叫 TTL 的东西,中文名是生命周期。也就是说递归服务器到权威服务器拿到这条解析记录之后,从拿时算起可以缓存多久失效。例如 TTL 是 300 秒,你从电信 DNS 请求了一次解析,然后马上修改了解析记录,那么在 300 秒之后你才能从电信 DNS 获取到新的解析结果。而那些 300 秒内没有访问过的小伙伴,在修改之后打开就立即生效啦。因此有的小伙伴会觉得 Hostker&主机壳 的 DNS 秒生效。

※ 浏览器也会缓存解析结果,特别是变态的 Chrome 简直是想缓存整个宇宙!因此在遇到节点故障(如被攻击)需要切换节点的时候可能会要求用户重启浏览器,目的就是刷新解析结果。

nslookup 和 dig 用法

工欲善其事,必先利其器。我们需要学会 nslookup (Windows)和 dig 命令(Mac)的用法才可以继续下一篇的内容。

Windows 用户

nslookup 的格式非常简单,例如我们往 119.29.29.29 (DNSPOD 的递归)查询 hostker.com 的 A 记录并且要求具体细节,完整命令就是 nslookup -d -qt=a hostker.com 119.29.29.29。

Mac 和安装有 bind utils 的 Linux 用户

dig 命令比起 nslookup 就好用多啦,上面的例子只需 dig @119.29.29.29 hostker.com a 就可以得到结果。如果你想观察解析全过程,可以用 dig +trace hostker.com 查看。

在返回的记录中可能存在 NSEC3、RRSIG 字样的记录,都是属于 DNSSEC 的,中国大陆的递归 DNS 并不支持,因此无视他们即可。

移步《DNS 查询全解(下)》继续阅读。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.