在前面的章节,这里,基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中,DNS请求和响应的数据包是怎么流动的,会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。
当前网络空间中比较常见DNS请求的流程如下:
图1
- 当一个域名需要解析的时候,会首先查看本机的DNS缓存,寻找对应的记录。
- 本机缓存没有记录的时候,会向本地DNS服务器发送请求。在企业级网络架构中,本地服务器往往在企业的内网中。在家庭宽带用户网络中,本地DNS服务器往往是在接入侧网络中。
- 本地DNS服务器没有记录的时候,会向本地DNS服务器中配置的首选DNS服务器发送请求。在企业级架构中,首选服务器往往是公开的DNS服务器或者一些DNS供应商提供的DNS服务器。在家庭用户网络中,首选服务器往往是不同省份运营商运营的DNS服务器。
- 当首选DNS服务器没有记录的时候,首选DNS服务器便会向根DNS服务器,顶级的DNS服务器,和权威的DNS服务器发起迭代的查询。也就是轮询这些DNS服务器,直到权威DNS给出最终结果为止。
DNS本机查找
DNS在经过解析之后,会在本地缓存域名和IP的映射关系,当该请求在短期内再次发生的时候,可以直接使用本机DNS缓存记录从而省去一次外部请求的过程。在windows机器上可以通过如下命令查看本地的缓存:
ipconfig /displaydns
图2
上图可以看到本机DNS记录中存储着 v20.events.data.microsoft.com域名的CNAME和A记录的对应关系,生存时间为437秒。本机缓存最大的问题是DNS记录会快速的过期,因此DNS缓存记录解决的是短期内同样域名再次请求解析问题。
本地DNS请求
家庭宽带用户和企业级用户的本地DNS在没有显示指定的情况下,会像IP地址一样,由运营商或者企业的DHCP服务器进行自动的分配。Windows查看本机DNS服务器配置情况的命令为ipconfig /all
,如下:
图3
因此在本机不存在对应缓存记录的情况下,会像192.168.1.1本地DNS服务器发送DNS请求数据包。上图中子网掩码为255.255.255.0,因此DNS服务器和该主机并不在同一个子网内部,因此DNS数据包会先到达192.168.2.1的默认网关,由默认网关完成对于数据包的转发。
首选DNS请求
本地DNS存储的记录有限,从全网的角度来看,DNS和IP的对应关系也是在时时刻刻的变化。尤其是对于企业级的用户来说,本地的DNS服务器往往只负责公司内部域名的解析,对于外部公共域名的解析往往会由本地的DNS服务器转发到配置好的首选外部DNS服务器进行解析。对于宽带用户,同样的本地DNS服务器会转发到当地运营商指定的首选DNS服务器进行解析。
对于没有预算购买DNS服务的企业来说,往往会选择公开的DNS解析服务器,常见的知名DNS公开服务器为:
- 国内:114.114.114.114, 114.114.115.115
- 国外:8.8.8.8,8.8.4.4
更多的关于DNS服务器的列表,详见这里。
当然对于个人用户,也可以不使用默认本地的DNS服务器,直接配置首选的DNS服务器,那么上图中的就不存在本地默认服务器这一环了。
首选DNS服务器和本地DNS服务器的区别在于处理能力,本地的DNS服务器往往负责一片区域或者一个企业内部的DNS解析,但是首选DNS往往负责一个省甚至全国的,乃至全球的DNS解析。因此首选DNS的服务器往往是任播的IP地址,任播IP地址意味着一个公网IP地址会对应多个服务器主机。路由器会根据地理位置就近选择对应的物理主机。关于任播IP地址,详见这里。
迭代查询
迭代查询很简单,以csdn.net为例,对图1中迭代查询解释如下:
- 如果首选的DNS服务器没有csdn.net对应的IP地址的话,则会向根域名服务器询问能够解析.net顶级域名的IP地址。像com,org,top,edu,gov都是顶级域名,目前顶级域名超过1500个,详见这里。
- 首选服务器向上一步返回的IP地址,也就是向顶级域名net对应服务器请求返回析csdn.net一级域名对应的DNS服务器,这时候顶级域名服务器net就会返回负责管理csdn.net这个一级域名的权威DNS服务器的IP地址
- 首选服务器向上一步返回的IP地址,也就是向权威DNS服务器请求解析csdn.net的地址。建立过网站的的小伙伴应该知道,在绑定csdn.net域名对应的IP地址的时候,会选择一个权威的DNS服务器进行DNS解析,这个操作的含义就是将域名和IP地址的关系存储在该权威域名服务器中,这也是为什么权威服务器会有该IP地址的原因。当然对于拥有比较多子域名的企业来说,也可能会建立二级域名DNS服务器来管理自身的域名。
存在的问题
根域名安全
整个IT基础设施这一套的标准发源于美国,因此在DNS这种基础早期建设也是被美国所掌握,像根域名服务器绝大多数都存在美国。因此网络上流传着如果美国切断DNS的供应,会让国家或者公司从互联网消失,也就是无法被访问到。
具体的原因就是根域名掌握着顶级域名DNS服务器的地址,对于DNS迭代查询来说,第一步就是请求根域名服务器给出顶级域名DNS服务器的IP地址,如果根域名不对顶级域名地址进行解析,那么后续的请求也是无法继续的。伊拉克战争期间,就是根域名切断了顶级国家域名的IP访问,导致无法解析对应的国家域名的IP,这是DNS存在的安全问题之一,但是如此大规模的切断顶级域名的供应是属于极端情况。
DNS劫持
除此之外由于DNS目前多为明文传输,DNS请求需要经过本地DNS以及首选DNS,数据包的转发还存在着诸多的路由节点,因此存在着被劫持的可能性,如下:
第一:可以看到一个DNS请求可能会经过本地DNS,首选DNS,根DNS,顶级DNS,权威DNS等多种类型的DNS服务器,理论上这些DNS服务器都有可能会对原始的请求进行过滤,也就是对请求的内容返回不同的DNS解析结果,这也就是通常所说的DNS劫持问题。关于DNS劫持,详见这里。历史上,多个国家都发生过DNS劫持的案例,详见wiki。
第二:除了DNS服务器劫持之外,由于目前多数的DNS请求还是以明文的方式进行传输,也就是导致了DNS存在着中间人攻击劫持的可能性。事实上中间人攻击最多的是HTTP协议,但是目前网络中多数HTTP协议都已经基于TLS进行传输,因此HTTP的中间人攻击情形大为缓解。但是对于仍然以明文传输的DNS协议来说,被中间的Router侦听,篡改的可能性比较大。
更多的关于DNS网络协议内容见在我的专栏《网络攻防协议实战分析》进行详细介绍,详见这里。
本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。