DNS解析深度剖析
一、DNS 基础概念
(一)域名系统层级结构
域名采用层次结构,类似树形,根域在最顶层,用点“.”表示,顶级域名如“.com”“.net”“.org”等直接隶属于根域,二级域名是在顶级域名之下的域名,baidu.com”中“baidu”就是二级域名,子域名则是在二级域名之下进一步划分,mail.baidu.com”里“mail”是子域名,这种层级结构方便对互联网上的资源进行分类和管理,让用户可以通过易于理解的域名访问各类网站与服务。
(二)DNS 服务器类型
1、根 DNS 服务器:全球共有 13 组根服务器,它们存储了顶级域名服务器的信息,是 DNS 解析的起点,当本地 DNS 服务器无法直接回答一个查询时,会代表客户端向根服务器查询,根服务器会引导查询到相应的顶级域名服务器。
2、顶级域名服务器:负责管理特定顶级域名下的二级域名信息,负责“.com”顶级域名的服务器掌握着所有“.com”域名的相关数据,包括二级域名对应的权威 DNS 服务器地址等。
3、权威 DNS 服务器:保存着特定域名(直到其子域名)的最终解析记录,当查询某个域名的 IP 地址等信息时,如果本地 DNS 服务器缓存中没有,且经过递归查询到权威 DNS 服务器,就能得到最准确的答案。
4、本地 DNS 服务器:通常由网络服务提供商(ISP)或企业内部网络管理员设置,它离用户最近,首先接收用户的域名查询请求,本地 DNS 服务器会尝试从自身缓存中查找答案,若有则直接返回给用户;若无,则代表客户端向其他 DNS 服务器进行查询,直到获取结果并返回给用户,同时可能将结果缓存起来以便后续快速响应相同查询。
DNS 服务器类型 | 功能描述 | 示例 |
根 DNS 服务器 | 引导查询到顶级域名服务器 | 全球 13 组,如“A”根服务器 |
顶级域名服务器 | 管理顶级域名下二级域名信息 | “.com”顶级域名服务器 |
权威 DNS 服务器 | 保存特定域名最终解析记录 | 某企业官网权威 DNS 服务器 |
本地 DNS 服务器 | 首先响应用户查询,可缓存结果 | 家庭路由器自带 DNS 或 ISP 提供 DNS |
二、DNS 解析过程详解
(一)完整查询流程
1、用户在浏览器中输入要访问的网站域名,www.example.com”。
2、浏览器首先查看自身缓存,若之前访问过该域名且缓存未过期,直接使用缓存中的 IP 地址向目标服务器发起连接;若缓存中无相关信息,则将域名查询请求发送给本地 DNS 服务器。
3、本地 DNS 服务器收到请求后,先在其自身缓存中查找是否有该域名的解析记录,如果有,就直接将对应的 IP 地址返回给浏览器;如果没有,本地 DNS 服务器就会代表客户端向根 DNS 服务器发起查询,询问“.com”顶级域名服务器的地址。
4、根 DNS 服务器收到查询后,不会直接给出“www.example.com”的 IP 地址,而是告知本地 DNS 服务器负责“.com”顶级域名的服务器地址。
5、本地 DNS 服务器接着向“.com”顶级域名服务器发起查询,询问“example.com”的权威 DNS 服务器地址。
6、“.com”顶级域名服务器响应后,本地 DNS 服务器再向“example.com”的权威 DNS 服务器发起查询,请求获取“www.example.com”的 IP 地址。
7、权威 DNS 服务器将“www.example.com”对应的 IP 地址返回给本地 DNS 服务器,本地 DNS 服务器再将这个 IP 地址返回给发起查询的浏览器。
8、浏览器得到 IP 地址后,就可以与目标服务器建立连接,加载网页内容呈现给用户。
(二)递归查询与迭代查询
1、递归查询:本地 DNS 服务器为客户机完全解析域名(直到获得最终的 IP 地址)的过程,如果本地 DNS 服务器无法直接回答一个查询,它会代表客户端向其他 DNS 服务器进行查询,直到得到答案,然后将结果返回给客户端,当本地 DNS 服务器向权威 DNS 服务器查询域名解析时,若权威 DNS 服务器也无法直接回答,它会代替客户端向其他相关 DNS 服务器继续查询,直到获取到完整的解析结果后才返回给客户端。
2、迭代查询:本地 DNS 服务器为客户机部分解析域名(直到获得下一个 DNS 服务器地址)的过程,如果本地 DNS 服务器无法直接回答一个查询,它会代表客户端向其他 DNS 服务器进行查询,直到得到答案,当本地 DNS 服务器向根 DNS 服务器查询时,根服务器只告知其顶级域名服务器地址,这就是一次迭代查询;然后本地 DNS 服务器再根据根服务器提供的地址去向顶级域名服务器查询,如此逐步获取最终答案。
三、DNS 安全问题及应对措施
(一)常见安全威胁
1、DNS 缓存投毒:攻击者通过向本地 DNS 服务器或用户计算机的 DNS 缓存中注入虚假的 DNS 记录,使用户在访问正常网站时被误导到恶意网站,当用户想访问银行网站时,由于缓存被投毒,可能会被导向钓鱼网站,导致个人信息泄露和财产损失。
2、DNS 劫持:包括对整个网络的 DNS 劫持和对单个用户的 DNS 劫持,攻击者篡改 DNS 服务器的设置或利用网络漏洞,将用户的 DNS 查询重定向到恶意的 IP 地址,在一些公共无线网络环境中,黑客可能劫持用户的 DNS,让用户在不知不觉中访问恶意网站。
(二)应对策略
1、采用 DNSSEC:DNSSEC(Domain Name System Security Extensions)通过数字签名来保证 DNS 数据的真实性和完整性,它对域名系统的各个层级进行加密签名,使得任何对 DNS 记录的篡改都能被及时发现,当权威 DNS 服务器发布一条域名解析记录时,会使用私钥对其进行签名,其他 DNS 服务器在验证这条记录时,会使用对应的公钥进行解密和验证,确保记录没有被篡改过。
2、定期更新 DNS 软件和配置:及时安装操作系统和 DNS 服务器软件的安全补丁,更新为最新的稳定版本,以修复已知的安全漏洞,合理配置 DNS 服务器的访问控制列表(ACL),限制不必要的外部访问,降低被攻击的风险,只允许特定 IP 段的主机对内部网络的 DNS 服务器进行查询和修改操作。
相关问题与解答
问题一:为什么有时候修改了域名的 IP 地址指向后,很长时间才能生效?
答:这是因为 DNS 系统中存在各级缓存机制,当修改了域名的 IP 地址指向后,本地 DNS 服务器、中间的各级 DNS 服务器以及用户的计算机上可能都缓存了旧的解析记录,这些缓存需要一定的时间才会过期并更新为新的记录,不同的 DNS 服务器和设备设置的缓存时间不同,有的可能缓存几个小时,有的可能缓存几天甚至更长时间,所以会导致新解析记录生效缓慢。
问题二:如何查看自己计算机当前使用的 DNS 服务器地址?
答:在 Windows 系统中,可以通过以下步骤查看:打开“控制面板”,选择“网络和共享中心”,点击当前连接的网络,再点击“详细信息”,在弹出的窗口中即可看到“IPv4 DNS 服务器”地址,在 Mac OS X 系统中,点击“系统偏好设置”,选择“网络”,选中当前使用的网络连接(如 WiFi),再点击“高级”,进入“TCP/IP”选项卡,就能看到 DNS 服务器地址,在 Linux 系统中,可以打开终端,输入命令“cat /etc/resolv.conf”,其中显示的“nameserver”后面的地址就是当前使用的 DNS 服务器地址。
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/120503.html