2.3 域名解析环节实践

额外知识

你猜世界上规模最大、交互最频繁且最没存在感的分布式系统是什么?

DNS(Domain Name System,域名系统)是最重要的互联网基础设施系统,没有之一。2021 年期间互联网发生了几起影响颇大的服务宕机故障均与 DNS 系统有关:

  • 7月22日 Aakamai Edge DNS 故障,造成 PlayStation Network、HBO、UPS、Airbnb、Salesforce 等众多知名网站宕机[1]
  • 不久之后的10月4日,社交网络平台 Facebook 及旗下服务 Messenger、Instagram、WhatsApp、Mapillary 与 Oculus 发生全球性宕机[2]

这些故障影响范围为何如此之广?带着这些问题,我们开始 DNS 的篇节。

2.3.1 域名解析的工作原理

我们在浏览器输入一个域名时,DNS 负责将该域名解析为相应的 IP 地址,以便后续与目标服务器建立 TCP/IP 连接。

分析 DNS 工作原理之前,我们先了解域名的结构。如图 2-2 所示,域名是一种树状结构,最顶层的域名是根域名(注意是一个点「.」,它是 .root 的含义,不过现在常被隐藏掉),然后是顶级域名(top-level domain,简写 TLD),再是一级域名、二级域名、三级域名。

图 2-2 DNS域名结构

继续看域名是如何进行解析,DNS 解析流程如图 2-3 所示。

图 2-3 DNS 解析流程

  1. 用户向 Recursive resolver( DNS 解析器,例如电信运营商的 114.114.114.114)发出解析 thebyte.con.cn 域名请求。
  2. Recursive resolver 判断是否存在解析缓存,如存在返回缓存结果。如无则就近向 Root nameserver(根域名服务器)请求所属 TLD nameserver。
  3. 获取 com.cn. 域的 TLD nameserver 后, 向该地址请求 [thebyte].com.cn. 的 Authoritative nameserver(权威解析服务器)。
  4. 得到 Authoritative nameserver 地址后,向该服务获取域名对应的 IP 地址,域名解析过程结束。

回顾整个流程,有 2 个环节容易发生问题:

  • Recursive resolver 是客户端与 DNS 域名服务器的中间人,容易出现解析污染或者 DNS 解析器宕机,这种情况会导致域名解析出现局部不可用
  • Authoritative nameserver 出现故障,这种情况会导致全局域名解析不可用,但出现故障的概率极低。

下面我们继续看看如果 DNS 解析出现故障了该如何排查。

2.3.2 DNS 故障排查

如果碰到服务不可用、Unknown host 等错误时,可以先用几个运维命令确认是否为 DNS 解析阶段出现问题。

第一个介绍的是 nslookup 命令,该命令用于查询 DNS 的记录、域名解析是否正常等。

nslookup 命令示例:

$ nslookup thebyte.com.cn        
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
Name:	thebyte.com.cn
Address: 110.40.229.45

返回信息说明:

  • 第一行的 Server 为当前使用的 Recursive resolver。
  • Non-authoritative answer 因为 Recursive resolver 只是转发 Authoritative nameserver 的记录,所以为非权威应答。
  • Address 为解析结果,上面的解析可以看到是一个 A 记录 110.40.229.45。

nslookup 返回的结果比较简单,如果想获取更多的信息,可以尝试使用 dig 命令。

dig命令示例:

$ dig thebyte.com.cn

; <<>> DiG 9.10.6 <<>> thebyte.com.cn
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63697
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;thebyte.com.cn.			IN	A

;; ANSWER SECTION:
thebyte.com.cn.		599	IN	A	110.40.229.45

;; Query time: 14 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri May 12 15:22:33 CST 2023
;; MSG SIZE  rcvd: 59

返回信息说明:

  • 第一段 opcode 为 QUERY,表示执行查询操作,status 为 NOERROR,表示解析成功。
  • 第二段 QUESTION SECTION 部分显示了发起的 DNS 请求参数,A 表示我们默认查询 A 类型记录。
  • 第三段 ANSWER SECTION 部分为 DNS 查询结果,可以看到 thebyte.com.cn. 的解析结果为 110.40.229.45。
  • 最后一段为查询所用的 Recursive resolver、耗时等信息。

Facebook 2021 年 10 月宕机故障中,使用 dig 排查各个公共 Recursive resolver,全部出现 SERVFAIL 错误,这说明是权威解析服务器出现了问题。

➜  ~ dig @1.1.1.1 facebook.com
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322
;facebook.com.            IN    A
➜  ~ dig @1.1.1.1 whatsapp.com
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 31322
;whatsapp.com.            IN    A
..

下一节,我们以 Facebook 为例,体会 Authoritative nameserver 出现故障时会是什么影响。


  1. 参见 https://www.akamai.com/blog/news/akamai-summarizes-service-disruption-resolved ↩︎

  2. 参见 https://en.wikipedia.org/wiki/2021_Facebook_outage ↩︎

总字数:1130
Last Updated:
Contributors: isno