本文已参与「新人创作礼」活动,一起开启掘金创作之路。
问题背景
一直以来对 DNS 协议处于一个一知半解的的水平,仅仅是理解它工作的原理,对于 DNS 数据包也只是停留在基本的分析。也是近期打算系统的学习研究下 DNS 协议,在学习过程中从数据包分析的角度记录下碰到的问题,本案例为 DNS 后缀解析相关的一个问题记录。
问题信息
问题来由是在办公电脑上做了 nslookup 解析,同时用 Wireshark 做了捕获,信息如下:
$ nslookup www.baidu.com
服务器: UnKnown
Address: xx.xx.xx.xx <----- 公司 local DNS ip
DNS request timed out.
timeout was 2 seconds.
非权威应答:
名称: www.a.shifen.com
Addresses: 180.101.49.12
180.101.49.11
Aliases: www.baidu.com
数据包跟踪文件如下,Client 和 LocalDNS 进行了一共 8 次交互( Query 和 Response 对应),包括 PTR、A 和 AAAA 解析记录。
问题分析
数据帧 No.1-2
首先客户端会向 Local DNS 服务器进行 PTR 查询请求,查询的 IP 为 Local DNS 服务器的 IP。格式采用非常特定的格式,譬如 IP 192.168.0.1,请求名字为 1.0.168.192.in-addr.arpa,即反转 IP 地址后附加 .in-addr.arpa。
PTR 记录是 A 记录的逆向记录,又称做 IP 反查记录或指针记录,负责将 IP 反向解析为域名。
之后 Local DNS 服务器响应查询结果为 No such name 。 在 nslookup 执行显示结果就为 服务器: UnKnown 。 此处是由于 Local DNS 服务器一般习惯性只使用默认的正常查找区域,也就是只使用 DNS 服务器把域名解析成 IP 地址的功能。出现上述情况,实际上是因为 DNS 服务器没有创建反向查找区域,DNS 服务器无法根据自己的 IP 地址解析成对应的域名。另外值的注意的是这个报文中还会包含一个 AUTHORITY SECTION,内容为该主域名(譬如 168.192.in-addr.arpa)的 SOA 记录。
以下以 114.114.114.114 PTR 解析为例,指定 DNS 服务器为 8.8.8.8 ,查询 114.114.114.114 ,如下:
$ nslookup -qtype=ptr 114.114.114.114 8.8.8.8
服务器: dns.google
Address: 8.8.8.8
非权威应答:
114.114.114.114.in-addr.arpa name = public1.114dns.com
$
首先客户端仍会向 DNS 服务器 8.8.8.8 进行 IP 8.8.8.8 的 PTR 查询请求,正常返回查询响应域名为 dns.google,之后再向 DNS 服务器 8.8.8.8 进行 IP 114.114.114.114 的 PTR 查询请求,正常返回查询响应域名为 public1.114dns.com。
数据帧 No.3-6
没进行抓包之前,个人以为是直接进行 www.baidu.com 的 A 记录和 AAAA 记录请求,然后得到相关响应。但从实际抓包结果来看,过程并非如此。
首先客户端会向 Local DNS 服务器进行 No.3 A 记录查询请求,查询的域名为 www.baidu.com.xx.xx.com.cn 。 格式采用特定的格式,会在 www.baidu.com 附加后缀 xx.xx.com.cn 。
此处附加的后缀 xx.xx.com.cn 到底是什么? 查了很多资料,发现应该是和公司使用的域相关,譬如所在的域 aa.bb.com.cn,通过 ipconfig/all 可看到主 DNS 后缀为 aa.bb.com.cn,同时也包括 DNS 后缀搜索列表 aa.bb.com.cn 、 bb.com.cn 以及 com.cn 。
典型名称解析过程使用主 DNS 后缀和任何特定于连接的 DNS 后缀。 如果这些后缀不起作用,则名称解析过程将尝试解析主 DNS 后缀。
在客户端上配置域后缀搜索列表时,仅使用该列表。 不使用主 DNS 后缀和任何特定于连接的 DNS 后缀,也不尝试解析主后缀。
客户端有一个 DNS 后缀搜索列表(ipconfig /all 可以查询该列表内容),当我们查询的域名不存在时,DNS 会将你查询的地址加上该 DNS 后缀再尝试进行搜索。
$ ipconfig/all
Windows IP 配置
主机名 . . . . . . . . . . . . . : A123
主 DNS 后缀 . . . . . . . . . . . : aa.bb.com.cn
节点类型 . . . . . . . . . . . . : 混合
IP 路由已启用 . . . . . . . . . . : 否
WINS 代理已启用 . . . . . . . . . : 否
DNS 后缀搜索列表 . . . . . . . . : aa.bb.com.cn
bb.com.cn
$ nslookup -all
默认服务器: (null)
设置选项:
nodebug
defname
search
recurse
nod2
novc
noignoretc
port=53
type=A+AAAA
class=IN
timeout=2
retry=1
root=A.ROOT-SERVERS.NET.
domain=aa.bb.com.cn
MSxfr
IXFRversion=1
srchlist=aa.bb.com.cn/bb.com.cn/com.cn
默认服务器: UnKnown
Address: xx.xx.xx.xx
>
因此客户端首先会向 Local DNS 服务器进行 No.3 A 记录查询请求,查询的域名为 www.baidu.com.aa.bb.com.cn, 之后 Local DNS 服务器响应查询结果为 No.4 No such name , 同时包含一个 AUTHORITY SECTION,内容为该主域名(譬如 aa.bb.com.cn)的 SOA 记录。
客户端之后会继续向 Local DNS 服务器进行 No.5 AAAA 记录查询请求,查询的域名为 www.baidu.com.aa.bb.com.cn, 之后 Local DNS 服务器响应查询结果为 No.6 No such name , 同样包含一个 AUTHORITY SECTION,内容为该主域名(譬如 aa.bb.com.cn)的 SOA 记录。
数据帧 No.7-10
上述 No.3-6 过程分析得知,DNS 查询请求会附加域后缀搜索列表,附加后缀 aa.bb.com.cn 无结果后,继续附加后缀 bb.com.cn 尝试请求,过程保持一致。
客户端向 Local DNS 服务器进行 No.7 A 记录查询请求,查询的域名为 www.baidu.com.bb.com.cn, 之后 Local DNS 服务器响应查询结果为 No.8 No such name , 同时包含一个 AUTHORITY SECTION,内容为该主域名(譬如 bb.com.cn)的 SOA 记录。
客户端继续向 Local DNS 服务器进行 No.9 AAAA 记录查询请求,查询的域名为 www.baidu.com.bb.com.cn, 之后 Local DNS 服务器响应查询结果为 No.10 No such name , 同样包含一个 AUTHORITY SECTION,内容为该主域名(譬如 bb.com.cn)的 SOA 记录。
数据帧 No.11和No.18、No.12-13
同样在附加后缀 bb.com.cn 无结果后,继续附加后缀 com.cn 尝试请求,过程保持一致。
这里稍微有点问题的是,在客户端向 Local DNS 服务器进行 No.11 A 记录查询请求,查询的域名为 www.baidu.com.com.cn, 但之后 Local DNS 服务器响应超时,超过了 2s ,因此在 nslookup 执行过程中显示了 DNS request timed out 提示,而抓包的结果一直到第 18 个数据包才由 Local DNS 服务器返回响应,查询结果为 No.18 No such name 。
$ nslookup www.baidu.com
...
DNS request timed out. <----- DNS 请求超时
timeout was 2 seconds.
...
之后客户端继续向 Local DNS 服务器进行 No.12 AAAA 记录查询请求,查询的域名为 www.baidu.com.com.cn, 之后 Local DNS 服务器响应查询结果为 No.13 No such name 。
数据帧 No.14-17
最后数据帧 No.14-17 即为真正请求 www.baidu.com 的 A 记录和 AAAA 记录请求,过程不再赘述,最后请求响应结果包含 CNAME 和 A 记录。
$ nslookup www.baidu.com
...
非权威应答:
名称: www.a.shifen.com
Addresses: 180.101.49.12
180.101.49.11
Aliases: www.baidu.com
问题总结
诚如开头所说,是在公司办公电脑上所做的测试,包含了域相关环境,因此使用了域后缀搜索列表。如果是单机所进行的 DNS 查询请求并无相关内容,除非手动设置了相关配置,包括主 DNS 后缀、任何特定于连接的 DNS 后缀或者后缀搜索列表。
问题参考
docs.microsoft.com/zh-CN/troub…