Sukka's Blog

童话只美在真实却从不续写

  1. 1. TL;DR
  2. 2. 疑问
  3. 3. 结论
  4. 4. 如何查询 Glue Record

TL;DR

如果权威 DNS 的 NS 是自身,就需要向 Glue Record 查询解析记录,向 Glue Record 请求得到的自身的解析记录可以和 Glue Record 不同,然后下一步的解析请求会发往这个记录。

虽然查询托管在 CloudXNS 的域名的解析记录时可以使用 CloudXNS 的海外节点,但是请求 CloudXNS 的权威 DNS 域名本身需要 Glue Record(不包含海外节点),所以解析速度会受到影响。

托管在权威 DNS 上的域名不是权威 DNS 本身,所以在请求托管域名的解析记录时不需要查询权威 DNS 的 Glue Record,只有接下来的迭代查询时需要。

疑问

最近在研究各家权威 DNS 服务,看到 CloudXNS 的介绍说他们有海外节点,所以我查询了一下 CloudXNS 的权威 DNS 域名的 Glue Record,发现他们 8 条 Glue Record 中并没有海外节点,CloudXNS 也没有 Anycast。但是从海外地区发起 dig lv3ns1.ffdns.net 可以发现 CloudXNS 海外节点的解析记录。

所以问题就是,当权威 DNS 中给出的权威 DNS 的域名解析的 A 记录包含 Glue Record 以外的 IP 时,托管在该权威 DNS 上解析的域名会使用权威 DNS 的哪些 IP 进行解析?
具体一些,假设 example.com 交给 CloudXNS 解析,但是 lv3ns1.ffdns.net 的 Glue Record 和 lv3ns1.ffdns.net 的解析记录的 IP 并不相同,在解析的时候会使用哪些 IP 进行解析?

结论

V2EX 上提问,很快就得到了回答。

接下来还是拿 CloudXNS 举例,把整个流程走一遍。
假设 example.com 托管给 CloudXNS 作为权威 DNS,递归 DNS 为了获得 example.com 的解析结果,必须获得 example.com 的 NS 记录的解析结果,在本例中 NS 记录是 lv3ns[1-4].ffdns.net;以 lv3ns1.ffdns.net 为例继续,这时候需要知道 lv3ns1.ffdns.net 的解析记录。虽然 ffdns.net 的 NS 解析记录就是 lv3ns[1-4].ffdns.net,但是在向 net 查询 ffdns.net 的 NS 记录的时候,net 的解析服务器([a-f].gtld-servers.net)已经返回了 ffdns.net 的 Glue Record,所以接下来递归 DNS 会向 Glue Record 查询 lv3ns1.ffdns.net 的解析结果,然后 example.com 的解析请求就会发往那个解析结果中的 IP。

CloudXNS 的权威 DNS 域名的 NS 就是自身;当权威 DNS 域名 NS 不是自身的(这样的权威 DNS 很多,比如 Rage4、NS1 和阿里云)时,答案就更容易理解了。
以 Rage4 为例,Rage4 的权威 DNS 域名是 ns[1-2].r4ns.com,但是 r4ns.com 的 NS 记录是 ns[1-2].softlayer.com 而不是本身,所以 ns1.r4ns.net 的解析记录必须向 ns[1-2].softlayer.com 请求,而不是采用 Glue Record;在这个例子中,r4ns.net 没有 Glue Record。

如何查询 Glue Record

DNS 工作的原理、逐级迭代查询啥的都是基础,本文没必要赘述,直接细化到 CloudXNS 的例子中。

假设 example.com 域名托管在 CloudXNS 下,Name Server 以 lv3ns1.ffdns.net 为例,如果需要得到 example.com 的解析结果,需要向 lv3ns1.ffdns.net 请求该结果,所以还需要查询 lv3ns1.ffdns.net 的解析结果,所以这个时候需要向更上一级的 net 查询 ffdns.net 的 NS 解析记录,net 会返回 lv3ns1.ffdns.net 的 NS 解析记录,和对应 NS 的 Glue Record。使用 dig 指令试试看(使用 m.gtld-servers.net 为例):

$ dig lv3ns1.ffdns.net @m.gtld-servers.net.

;; QUESTION SECTION:
;lv3ns1.ffdns.net. IN A

;; AUTHORITY SECTION:
ffdns.net. 172800 IN NS lv3ns1.ffdns.net.
ffdns.net. 172800 IN NS lv3ns2.ffdns.net.
ffdns.net. 172800 IN NS lv3ns3.ffdns.net.
ffdns.net. 172800 IN NS lv3ns4.ffdns.net.
ffdns.net. 172800 IN NS lv3ns5.ffdns.net.
ffdns.net. 172800 IN NS lv3ns6.ffdns.net.
ffdns.net. 172800 IN NS lv3ns7.ffdns.net.
ffdns.net. 172800 IN NS lv3ns8.ffdns.net.
ffdns.net. 172800 IN NS lv3ns9.ffdns.net.

;; ADDITIONAL SECTION:
lv3ns1.ffdns.net. 172800 IN A 122.227.237.19
lv3ns2.ffdns.net. 172800 IN A 61.133.127.157
lv3ns3.ffdns.net. 172800 IN A 61.133.127.130
lv3ns4.ffdns.net. 172800 IN A 59.63.188.191
lv3ns5.ffdns.net. 172800 IN A 112.117.208.11
lv3ns6.ffdns.net. 172800 IN A 111.6.96.206
lv3ns7.ffdns.net. 172800 IN A 121.12.98.15
lv3ns8.ffdns.net. 172800 IN A 183.203.7.12
lv3ns9.ffdns.net. 172800 IN A 111.6.96.206

这个 ADDITTIONAL SECTION 中的记录就是 Glue Record,是由域名注册商提交给域名后缀服务器的。

本文作者 : Sukka
本文采用 CC BY-NC-SA 4.0 许可协议。转载和引用时请注意遵守协议!
本文链接 : https://blog.skk.moe/post/authoritative-dns-record-glue/

本文最后更新于 天前,文中所描述的信息可能已发生改变