DNS解析的探究
2016-09-22王钦国
王钦国
摘 要: 随着学校信息化的建设,越来越多的学校架设自己的网站与学生对接,为了方便使用和快速解析,配置私有DNS服务器专门用来解析私有网站必不可少。但在私有DNS和公有DNS作为主备使用时,首选DNS却不工作了。作者以五个方案探究DNS的解析,试图解决以上问题。
关键词: DNS Wireshark 递归 迭代
笔者作为学校信息化建设的成员,主要从事学校网络服务器的维护和建设,在工作中积累了许多相关经验。为了解决这个问题,笔者专门使用Wireshark抓包探究DNS是如何解析的。
在实际工作中,笔者用了三个测试域名,分别是www.testwjzjzx.cn(公网上没有注册),www.wjzjzx.cn(学校域名,公网注册,在校内私有DNS服务器192.168.28.130上注册),www.qq.com(公网注册),以下面几个方案进行探究。
方案1:一般情况下校内PC端都配置至少一个公网的DNS地址,我校的DNS地址为221.228.255.1(电信)。通过Wireshark抓包发现在仅有公网DNS地址的情况下,在校内上这三个域名的数据分别如下图:
因为www.testwjzjzx.cn是公网没有注册的,所以反馈No such name;而其他二个域名是在公网注册过的,所以公网DNS能解析到,但是不是这个DNS直接解析的,还不能下结论,因为DNS服务器默认是递归查询,可能是其他公网DNS服务器查询的结果反馈给221.228.255.1这个地址。
方案2:为了方便使用,于是配置了一台私有的DNS服务器192.168.28.130,专门用来解析私有网站。同时加快域名解析和出口故障时校内域名还能正常使用,所以对学校注册的所有公有域名在校内DNS服务器上也注册了。本意就是先校内解析,解析不成功,再公网解析。于是在学校DHCP服务器上分发DNS地址时,首选DNS是校内DNS地址192.168.28.130,备用DNS是公网DNS地址221.228.255.1。
从三个域名的解析可以看到,三个域名都是由备用域名221.228.255.1解析的,首选域名192.168.28.130根本就没有起作用。问题也就在这里出现,如果首选DNS不能解析,就应该找备用DNS。但www.testwjzjzx.cn和www.wjzjzx.cn在首选DNS的服务器上都是有对应的解析的,那么理应找首选DNS解析,而不是现在只用备用DNS解析。
方案3:在首选和备用DNS都存在的情况下,首选域名不起作用,为了检查首选DNS能不能起作用,于是在PC端只设置一个首选DNS地址192.168.28.130。
从这里可以看到,三个域名都是由方案2中不起作用的首选DNS地址192.168.28.130解析的,也就是这个DNS服务器是可以工作的,但只是在PC端只配置它的时候可以用。所以在方案2中这个DNS作为首选DNS不起作用就很矛盾。而且在这种情况下,这三个网址打开的速度是相当慢的,尤其是公网域名www.qq.com,最初的几个查询根本不起作用,最后还是由8.8.8.8解析完成。从下面的方案中我们可以得知8.8.8.8是怎么来的。
方案4:在之前的方案中,我们发现如果只用一个私有DNS地址,则是可以实现先解析校内私有域名的,只是上公网会很慢。但如果添加备用公网DNS地址,则又会导致首选的私有DNS地址失效。于是就计划把公网DNS地址配置为私有DNS的转发器地址。
从这里可以看到,三个域名都是私有DNS地址192.168.28.130解析的,而且公网地址www.qq.com也是由这个地址反馈的。但实际情况是私有DNS服务器上是没有这个地址的解析,也就是说这个私有DNS地址是不能解析这个公网地址的,是它转发给其他DNS代为解析,然后再发回本地私有DNS地址,这就是DNS的递归查询。到这里其实已经实现学校的需求,所有域名先由私有DNS解析再由公网DNS解析。
方案5:在方案4中发现不管是私有域名还是公有域名最终都是由私有DNS解析的,为了更好地发掘www.qq.com到底是谁解析的,作者在私有DNS服务器上禁用递归。
从这里可以看到,在校内注册的两个域名都是由私有DNS地址192.168.28.130解析的,即使www.wjzjzx.cn在公网上也注册过,私有DNS地址还是优先的。而对于www.qq.com这个公网地址,私有DNS多次解析都是不成功的,最终是由8.8.8.8解析的,应该是调用了根提示。从这里可以验证方案4中虽然最终体现的是由私有DNS地址192.168.28.130解析的,其实还是公有地址解析的,这就是DNS的迭代查询。
本文通过对三个域名在若干方案下DNS解析抓包分析得出结果如下:
(1)单一公网DNS不能解析私有域名,但可以解析公网域名。
(2)首选私有DNS,备用公网DNS,不能解析私有域名,但可以解析公网域名。
(3)单一私有DNS能先解析私有域名,再解析公网域名,只是访问公网会很慢。
(4)单一私有DNS,转发器配置公网DNS,能先解析私有域名,再解析公网域名,访问公网正常。
(5)单一私有DNS,禁用递归,能先解析私有域名,再解析公网域名,只是访问公网会很慢。
从结果可以看出,方案1和方案2结果是一样的,也就是说如果配置私有DNS为首选,公网DNS为备用,私有DNS根本不起作用。方案3和方案5结果是一样的,其实方案3就是DNS的递归过程,方案5就是DNS的迭代过程,方案3是PC端的私有DNS不能解析时,调用根提示让其他DNS解析再发回给自己,自己再把解析结果给PC端,方案5只是私有DNS不能解析时,调用根提示让其他DNS解析直接把结果给PC端,而根提示一般解析很慢的,所以方案3和方案5是一样的,访问公网会很慢。只有方案4是我们需要的,先是私有DNS解析,不能解析转发给转发器里的公网DNS,而这个公网DNS一般是ISP提供的最近的DNS服务器,所以解析一般都很快。