实验环境
虚拟机1:192.168.2.3
虚拟机2:192.168.2.4
其中192.168.2.3装着bind服务,仅作为递归服务器使用,dnssec功能关闭。dns请求由192.168.2.4发起,指定192.168.2.3作为DNS解析服务器,请求域名为:blog.csdn.net.。
实验过程
192.168.2.3进行tcpdump抓包,192.168.2.4发起dig请求,请求完毕后,关闭抓包
实验结果分析
根据抓包结果罗列请求过程如下所示:
192.168.2.4向192.168.2.3.53请求blog.csdn.net.的A记录
2019-01-18 21:29:19.940190 IP 192.168.2.4.35553 > 192.168.2.3.53: 16325+ [1au] A? blog.csdn.net. (42)
192.168.2.3向192.203.230.10请求blog.csdn.net.的A记录===>问题1:为什么会向192.203.230.10发起请求,怎么知道是192.203.230.10?--解答:在192.168.2.3当中根文件的配置的附加块信息中有这个根IP存在
2019-01-18 21:29:19.942284 IP 192.168.2.3.9482 > 192.203.230.10.53: 39834% [1au] A? blog.csdn.net. (42)
192.168.2.3向192.203.230.10请求.的NS记录===>问题2:为什么已经知道根的NS权威地址,还要再问一遍根的NS--解答:当前递归服务器没有.根的的相关缓存,可以认为bind服务器在尝试更新根记录,确保根记录是最新的
2019-01-18 21:29:19.942801 IP 192.168.2.3.60920 > 192.203.230.10.53: 25798 [1au] NS? . (28)
192.203.230.10回复192.168.2.3的关于.NS记录请求,并在附加块当中附上了各个NS的A记录(记录包含:192.5.5.241)
2019-01-18 21:29:20.211597 IP 192.203.230.10.53 > 192.168.2.3.60920: 25798*- 14/0/27 NS m.root-servers.net., NS b.root-servers.net., NS c.root-servers.net., NS d.root-servers.net., NS e.root-servers.net., NS f.root-servers.net., NS g.root-servers.net., NS h.root-servers.net., NS i.root-servers.net., NS j.root-servers.net., NS a.root-servers.net., NS k.root-servers.net., NS l.root-servers.net., RRSIG (1097)
192.203.230.10未直接回复192.168.2.3关于blog.csdn.net.的A记录,而是在授权区域告诉其net.的NS(a-l.gtld-servers.net),并在附加块附上了各个NS的A记录(A记录当中有a.gtld-servers.net--192.5.6.30、j.gtld-servers.net--192.48.79.30)---观察下次请求顺序,是随机的两个NS,而不关乎响应报文中的顺序
2019-01-18 21:29:20.223807 IP 192.203.230.10.53 > 192.168.2.3.9482: 39834- 0/15/27 (1170)
192.168.2.3向192.5.6.30(即a.gtld-servers.net)请求blog.csdn.net.的A记录
2019-01-18 21:29:20.224331 IP 192.168.2.3.8721 > 192.5.6.30.53: 25231% [1au] A? blog.csdn.net. (42)
192.168.2.3向192.48.79.30(即j.gtld-servers.net)请求blog.csdn.net.的A记录
2019-01-18 21:29:21.025155 IP 192.168.2.3.23330 > 192.48.79.30.53: 15087% [1au] A? blog.csdn.net. (42)
192.48.79.30(即a.gtld-servers.net)未直接回复192.168.2.3关于blog.csdn.net.的A记录,而是在授权区域告诉其csdn.net的NS(ns3.dnsv3.com.,ns4.dnsv3.com.),并在附加块附上了各个NS的A记录===>问题3:为啥附上了NS的A记录,但是递归服务器不采信,而是继续发起关于这个NS的A和AAAA记录的请求--解答:递归服务器没有关于com.和dnsv3.com的缓存记录,需要更新到缓存当中
2019-01-18 21:29:21.399086 IP 192.48.79.30.53 > 192.168.2.3.23330: 15087- 0/6/15 (796)
192.168.2.3向192.5.5.241(即根)请求ns3.dnsv3.com.的A记录
2019-01-18 21:29:21.400837 IP 192.168.2.3.63388 > 192.5.5.241.53: 32034% [1au] A? ns3.dnsv3.com. (42)
192.168.2.3向192.5.5.241(即根)请求ns3.dnsv3.com.的AAAA记录
2019-01-18 21:29:21.401136 IP 192.168.2.3.45017 > 192.5.5.241.53: 7028% [1au] AAAA? ns3.dnsv3.com. (42)
192.168.2.3向192.5.5.241(即根)请求ns4.dnsv3.com.的A记录
2019-01-18 21:29:21.401566 IP 192.168.2.3.16789 > 192.5.5.241.53: 15031% [1au] A? ns4.dnsv3.com. (42)
192.168.2.3向192.5.5.241(即根)请求ns4.dnsv3.com.的AAAA记录
2019-01-18 21:29:21.401969 IP 192.168.2.3.9718 > 192.5.5.241.53: 30393% [1au] AAAA? ns4.dnsv3.com. (42)
192.168.2.3向192.5.5.241(即根)请求.的NS记录
2019-01-18 21:29:21.402238 IP 192.168.2.3.42704 > 192.5.5.241.53: 58981 [1au] NS? . (28)
192.5.5.241(即根)未直接回复192.168.2.3关于ns3.dnsv3.com.的A记录,而是在授权区域告诉其com.的NS(a-l.gtld-servers.net),并在附加块附上了各个NS的A记录(其中包含m.gtld-servers.net--192.55.83.30)
2019-01-18 21:29:21.445415 IP 192.5.5.241.53 > 192.168.2.3.63388: 32034- 0/15/27 (1176)
192.5.5.241(即根)未直接回复192.168.2.3关于ns3.dnsv3.com.的AAAA记录,而是在授权区域告诉其com.的NS(a-l.gtld-servers.net),并在附加块附上了各个NS的A记录
2019-01-18 21:29:21.445452 IP 192.5.5.241.53 > 192.168.2.3.45017: 7028- 0/15/27 (1176)
192.168.2.3向192.55.83.30(即com.)请求ns3.dnsv3.com.的A记录
2019-01-18 21:29:21.445920 IP 192.168.2.3.3918 > 192.55.83.30.53: 47338% [1au] A? ns3.dnsv3.com. (42)
192.168.2.3向192.55.83.30(即com.)请求ns3.dnsv3.com.的AAAA记录
2019-01-18 21:29:21.446671 IP 192.168.2.3.3615 > 192.55.83.30.53: 3432% [1au] AAAA? ns3.dnsv3.com. (42)
192.5.5.241(即根)回复192.168.2.3的关于.NS记录请求,并在附加块当中附上了各个NS的A记录--->包损坏
2019-01-18 21:29:21.446786 IP 192.5.5.241.53 > 192.168.2.3.42704: 58981*- 14/0/1 NS a.root-servers.net., NS b.root-servers.net., NS c.root-servers.net., NS d.root-servers.net., NS e.root-servers.net., NS f.root-servers.net., NS g.root-servers.net., NS h.root-servers.net., NS i.root-servers.net., NS j.root-servers.net., NS k.root-servers.net., NS l.root-servers.net., NS m.root-servers.net., RRSIG (537)
192.5.5.241(即根)未直接回复192.168.2.3关于ns4.dnsv3.com.的A记录,而是在授权区域告诉其com.的NS,并在附加块附上了各个NS的A记录(其中包含192.55.83.30)
2019-01-18 21:29:21.448731 IP 192.5.5.241.53 > 192.168.2.3.16789: 15031- 0/15/27 (1176)
192.168.2.3向192.55.83.30(即com.)请求ns4.dnsv3.com.的A记录
2019-01-18 21:29:21.449449 IP 192.168.2.3.46822 > 192.55.83.30.53: 200% [1au] A? ns4.dnsv3.com. (42)
192.5.5.241(即根)未直接回复192.168.2.3关于ns3.dnsv3.com.的AAAA记录,而是在授权区域告诉其com.的NS,并在附加块附上了各个NS的A记录
2019-01-18 21:29:21.450857 IP 192.5.5.241.53 > 192.168.2.3.9718: 30393- 0/15/27 (1176)
192.168.2.3向192.55.83.30(即com.)请求ns4.dnsv3.com.的AAAA记录
2019-01-18 21:29:21.451508 IP 192.168.2.3.43312 > 192.55.83.30.53: 12858% [1au] AAAA? ns4.dnsv3.com. (42)
192.55.83.30(即com.)未直接回复192.168.2.3关于ns3.dnsv3.com.的AAAA记录,而是在授权区域告诉其dnsv3.com.的NS,并在附加块附上了各个NS的A记录(其中包含52.221.20.79)
2019-01-18 21:29:21.671965 IP 192.55.83.30.53 > 192.168.2.3.3615: 3432- 0/6/15 (783)
192.168.2.3向52.221.20.79(即dnsv3.com.)请求ns3.dnsv3.com.的AAAA记录
2019-01-18 21:29:21.672474 IP 192.168.2.3.49120 > 52.221.20.79.53: 44675% [1au] AAAA? ns3.dnsv3.com. (42)
192.55.83.30(即com.)未直接回复192.168.2.3关于ns4.dnsv3.com.的AAAA记录,而是在授权区域告诉其dnsv3.com.的NS,并在附加块附上了各个NS的A记录(其中包含52.221.20.79)
2019-01-18 21:29:21.694869 IP 192.55.83.30.53 > 192.168.2.3.43312: 12858- 0/6/15 (783)
192.168.2.3向52.221.20.79(即dnsv3.com.)请求ns4.dnsv3.com.的AAAA记录
2019-01-18 21:29:21.695161 IP 192.168.2.3.45083 > 52.221.20.79.53: 38409% [1au] AAAA? ns4.dnsv3.com. (42)
192.55.83.30(即com.)未直接回复192.168.2.3关于ns4.dnsv3.com.的A记录,而是在授权区域告诉其dnsv3.com.的NS,并在附加块附上了各个NS的A记录(其中包含52.221.20.79)
2019-01-18 21:29:21.750289 IP 192.55.83.30.53 > 192.168.2.3.46822: 200- 0/6/15 (783)
192.168.2.3向52.221.20.79(即dnsv3.com.)请求ns4.dnsv3.com.的A记录
2019-01-18 21:29:21.751132 IP 192.168.2.3.16552 > 52.221.20.79.53: 57767% [1au] A? ns4.dnsv3.com. (42)
192.55.83.30(即com.)未直接回复192.168.2.3关于ns3.dnsv3.com.的A记录,而是在授权区域告诉其dnsv3.com.的NS,并在附加块附上了各个NS的A记录(其中包含52.221.20.79)
2019-01-18 21:29:21.768487 IP 192.55.83.30.53 > 192.168.2.3.3918: 47338- 0/6/15 (783)
192.168.2.3向52.221.20.79(即dnsv3.com.)请求ns3.dnsv3.com.的A记录
2019-01-18 21:29:21.768828 IP 192.168.2.3.19572 > 52.221.20.79.53: 62921% [1au] A? ns3.dnsv3.com. (42)
52.221.20.79(即dnsv3.com.)直接回复192.168.2.3关于ns3.dnsv3.com.的AAAA记录为NOERR但是没有记录,在授权区域告诉其dnsv3.com.的SOA记录
2019-01-18 21:29:21.852867 IP 52.221.20.79.53 > 192.168.2.3.49120: 44675*- 0/1/1 (123)
52.221.20.79(即dnsv3.com.)直接回复192.168.2.3关于ns4.dnsv3.com.的A记录(包含61.151.180.48),并在授权区域附上了dnsv3.com.的NS记录
2019-01-18 21:29:21.875383 IP 52.221.20.79.53 > 192.168.2.3.16552: 57767*- 7/2/1 A 59.36.120.144, A 125.39.213.167, A 61.151.180.48, A 52.221.20.79, A 111.30.142.18, A 180.163.19.16, A 101.226.220.15 (210)
192.168.2.3向61.151.180.48(即ns4.dnsv4.com.)请求blog.csdn.net.的A记录
2019-01-18 21:29:21.875851 IP 192.168.2.3.62796 > 61.151.180.48.53: 6682% [1au] A? blog.csdn.net. (42)
52.221.20.79(即dnsv3.com.)直接回复192.168.2.3关于ns4.dnsv3.com.的AAAA记录为NOERR但是没有记录,在授权区域告诉其dnsv3.com.的SOA记录
2019-01-18 21:29:21.879798 IP 52.221.20.79.53 > 192.168.2.3.45083: 38409*- 0/1/1 (123)
52.221.20.79(即dnsv3.com.)直接回复192.168.2.3关于ns3.dnsv3.com.的A记录,并在授权区域附上了dnsv3.com.的NS记录
2019-01-18 21:29:21.896777 IP 52.221.20.79.53 > 192.168.2.3.19572: 62921*- 7/2/1 A 182.140.167.168, A 111.30.142.18, A 223.166.151.13, A 220.249.242.12, A 14.215.150.12, A 61.151.180.47, A 52.221.20.79 (210)
61.151.180.48(即ns4.dnsv4.com.)回复192.168.2.3关于blog.csdn.net.的A记录,并在授权区域附上了csdn.net的NS记录(ns3.dnsv3.com.,ns4.dnsv3.com.)
2019-01-18 21:29:21.899055 IP 61.151.180.48.53 > 192.168.2.3.62796: 6682*- 1/2/1 A 47.95.47.253 (112)
192.168.2.3回复192.168.2.4关于blog.csdn.net.的A记录,并在授权区域附上了csdn.net的NS(ns3.dnsv3.com.,ns4.dnsv3.com.),在附加块附上了NS的A记录
2019-01-18 21:29:21.899288 IP 192.168.2.3.53 > 192.168.2.4.35553: 16325 1/2/15 A 47.95.47.253 (327)
通过分析在本次请求中实际上有用的解析过程仅如下所示:
现在总结一下真正有用的解析记录过程:
192.168.2.4向192.168.2.3.53请求blog.csdn.net.的A记录
2019-01-18 21:29:19.940190 IP 192.168.2.4.35553 > 192.168.2.3.53: 16325+ [1au] A? blog.csdn.net. (42)
192.168.2.3向192.203.230.10请求blog.csdn.net.的A记录===>问题1:为什么会向192.203.230.10发起请求,怎么知道是192.203.230.10?--解答:在192.168.2.3当中根文件的配置的附加块信息中有这个根IP存在
2019-01-18 21:29:19.942284 IP 192.168.2.3.9482 > 192.203.230.10.53: 39834% [1au] A? blog.csdn.net. (42)
192.168.2.3向192.203.230.10请求.的NS记录===>问题2:为什么已经知道根的NS权威地址,还要再问一遍根的NS--解答:当前递归服务器没有.根的的相关缓存,可以认为bind服务器在尝试更新根记录,确保根记录是最新的
2019-01-18 21:29:19.942801 IP 192.168.2.3.60920 > 192.203.230.10.53: 25798 [1au] NS? . (28)
192.203.230.10回复192.168.2.3的关于.NS记录请求,并在附加块当中附上了各个NS的A记录(记录包含:192.5.5.241)
2019-01-18 21:29:20.211597 IP 192.203.230.10.53 > 192.168.2.3.60920: 25798*- 14/0/27 NS m.root-servers.net., NS b.root-servers.net., NS c.root-servers.net., NS d.root-servers.net., NS e.root-servers.net., NS f.root-servers.net., NS g.root-servers.net., NS h.root-servers.net., NS i.root-servers.net., NS j.root-servers.net., NS a.root-servers.net., NS k.root-servers.net., NS l.root-servers.net., RRSIG (1097)
192.203.230.10未直接回复192.168.2.3关于blog.csdn.net.的A记录,而是在授权区域告诉其net.的NS(a-l.gtld-servers.net),并在附加块附上了各个NS的A记录(A记录当中有a.gtld-servers.net--192.5.6.30、j.gtld-servers.net--192.48.79.30)---观察下次请求顺序,是随机的两个NS,而不关乎响应报文中的顺序
2019-01-18 21:29:20.223807 IP 192.203.230.10.53 > 192.168.2.3.9482: 39834- 0/15/27 (1170)
192.168.2.3向192.48.79.30(即net.)请求blog.csdn.net.的A记录
2019-01-18 21:29:21.025155 IP 192.168.2.3.23330 > 192.48.79.30.53: 15087% [1au] A? blog.csdn.net. (42)
192.48.79.30(即net.)未直接回复192.168.2.3关于blog.csdn.net.的A记录,而是在授权区域告诉其csdn.net的NS(ns3.dnsv3.com.,ns4.dnsv3.com.),并在附加块附上了各个NS的A记录
2019-01-18 21:29:21.399086 IP 192.48.79.30.53 > 192.168.2.3.23330: 15087- 0/6/15 (796)
192.168.2.3向192.5.5.241(即根)请求ns4.dnsv3.com.的A记录
2019-01-18 21:29:21.401566 IP 192.168.2.3.16789 > 192.5.5.241.53: 15031% [1au] A? ns4.dnsv3.com. (42)
192.5.5.241(即根)未直接回复192.168.2.3关于ns4.dnsv3.com.的A记录,而是在授权区域告诉其com.的NS,并在附加块附上了各个NS的A记录(其中包含192.55.83.30)
2019-01-18 21:29:21.448731 IP 192.5.5.241.53 > 192.168.2.3.16789: 15031- 0/15/27 (1176)
192.168.2.3向192.55.83.30(即com.)请求ns4.dnsv3.com.的A记录
2019-01-18 21:29:21.449449 IP 192.168.2.3.46822 > 192.55.83.30.53: 200% [1au] A? ns4.dnsv3.com. (42)
192.55.83.30(即com.)未直接回复192.168.2.3关于ns4.dnsv3.com.的A记录,而是在授权区域告诉其dnsv3.com.的NS,并在附加块附上了各个NS的A记录(其中包含52.221.20.79)
2019-01-18 21:29:21.750289 IP 192.55.83.30.53 > 192.168.2.3.46822: 200- 0/6/15 (783)
192.168.2.3向52.221.20.79(即dnsv3.com.)请求ns4.dnsv3.com.的A记录
2019-01-18 21:29:21.751132 IP 192.168.2.3.16552 > 52.221.20.79.53: 57767% [1au] A? ns4.dnsv3.com. (42)
52.221.20.79(即dnsv3.com.)直接回复192.168.2.3关于ns4.dnsv3.com.的A记录(包含61.151.180.48),并在授权区域附上了dnsv3.com.的NS记录
2019-01-18 21:29:21.875383 IP 52.221.20.79.53 > 192.168.2.3.16552: 57767*- 7/2/1 A 59.36.120.144, A 125.39.213.167, A 61.151.180.48, A 52.221.20.79, A 111.30.142.18, A 180.163.19.16, A 101.226.220.15 (210)
192.168.2.3向61.151.180.48(即ns4.dnsv4.com.)请求blog.csdn.net.的A记录
2019-01-18 21:29:21.875851 IP 192.168.2.3.62796 > 61.151.180.48.53: 6682% [1au] A? blog.csdn.net. (42)
61.151.180.48(即ns4.dnsv4.com.)回复192.168.2.3关于blog.csdn.net.的A记录,并在授权区域附上了csdn.net的NS记录(ns3.dnsv3.com.,ns4.dnsv3.com.)
2019-01-18 21:29:21.899055 IP 61.151.180.48.53 > 192.168.2.3.62796: 6682*- 1/2/1 A 47.95.47.253 (112)
192.168.2.3回复192.168.2.4关于blog.csdn.net.的A记录,并在授权区域附上了csdn.net的NS(ns3.dnsv3.com.,ns4.dnsv3.com.),在附加块附上了NS的A记录
2019-01-18 21:29:21.899288 IP 192.168.2.3.53 > 192.168.2.4.35553: 16325 1/2/15 A 47.95.47.253 (327)
通过请求,针对里面的疑问,做出了自己的解释,虽然不一定是正确的,但是笔者认为有一定的道理,欢迎各位批评指正
问题1:为什么会向192.203.230.10发起请求,怎么知道是192.203.230.10?
----解答:在192.168.2.3当中根文件的配置的附加块信息中有这个根IP存在,便用这个作为初始化
问题2:为什么通过根的配置文件已经知道根的NS权威地址,还要再问一遍根的NS
----解答:当前递归服务器没有.根的的相关缓存,可以认为bind服务器在尝试更新根记录,确保根记录是最新的。
问题3:为啥附上了NS的A记录(ns3.dnsv3.com.,ns4.dnsv3.com.),但是递归服务器不采信,而是继续发起关于这个NS的A和AAAA记录的请求
--解答:递归服务器没有关于com.和dnsv3.com的缓存记录,需要更新到缓存当中
实验总结
通过实验发现,当递归服务器拿到ZONE的相关NS的A记录的时候,递归服务器会随机从NS中挑选一个或者多个随机发起域名请求,这个随机无关乎响应报文中记录的顺序,较早返回的记录则优先采信,然后再进行下一步迭代查询,后面返回的记录则会更新递归服务器中的缓存。如果一条记录不存在该类型的解析结果,那么权威服务器会返回NOERR,同时带上该zone的SOA信息过来。一个域名的解析必须依赖于其所在的权威服务器,即需要知道其ZONE对应NS的A记录或者AAAA记录,这个结果无伦在回答区域还是在附加块区域都将被采信。如果对于一条完整域名当中各个zone的NS没有相关记录,则会递归服务器会再次递归查询,直到这个完整域名的缓存都存在。