在匹配域名和机器可读IP地址的DNS查询中,可以通过DNS服务器或客户端来完成DNS层级结构的遍历。
阅读本文后,您将能够:
相关内容
订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!
复制文章链接
递归 DNS 查找是一个 DNS 服务器与其他几个 DNS 服务器进行通信以搜寻 IP 地址并将其返回给客户端的地方。这与迭代 DNS 查询相反,在迭代 DNS 查询中,客户端直接与查找中涉及的每个 DNS 服务器进行通信。尽管这是一个非常技术性的定义,但仔细研究一下 DNS 系统以及递归和迭代之间的区别应该有助于解决问题。
每当用户在浏览器窗口中键入域名(例如“ cloudflare.com”)时,都会触发DNS查找。然后,一系列称为DNS服务器的远程计算机找到该域的IP地址,并将其返回给用户的计算机,以便他们可以访问正确的网站。
几种不同类型的 DNS 服务器必须协同工作才能完成 DNS 查找。DNS 解析器、DNS 根服务器、DNS TLD 顶级域名服务器和 DNS 权威名称服务器都必须提供信息以完成查找。在缓存情况下,这些服务器之一可能已在先前的查找过程中保存了查询的答案,可以将其从内存中传递出来。
有关DNS查找工作原理的更多信息,请参阅什么是 DNS 服务器?
递归和迭代是计算机科学术语,描述了解决问题的两种不同方法。在递归中,程序会重复调用自身直到满足条件,而迭代过程则是将重复执行一组指令,直到满足条件为止。如果不通过代码很难解释这种细微的差异,但是关键要点在于,递归是一种反复调用自身的解决方案。
例如,想象一下吉姆在家丢了钥匙,正在寻找一种系统的方式来找到它们。递归的解决方案是让吉姆一直寻找他的钥匙,直到找到它们为止。吉姆开始寻找,如果找不到他的钥匙,他将返回原来的指示继续寻找直到找到它们。一个迭代的解决方案是让吉姆搜索一个房间五分钟,然后返回他的指令并搜索下一个房间五分钟,然后继续此循环,直到他找到自己的钥匙或遍历整个房间列表为止。
理解递归和迭代DNS查找之间的区别并不需要深入了解递归和迭代的内涵:在递归查找中,DNS服务器执行递归并继续查询其他DNS服务器,直到它找到IP地址并回馈到客户端(通常是用户的操作系统)。在迭代DNS查询中,每个DNS查询都直接向客户端反馈另一个需要查询的DNS服务器地址,然后客户端继续查询DNS服务器,直到其中一个回复了给定域的正确IP地址为止。
换句话说,客户端在递归DNS查询中进行某种形式的委任。它告诉DNS解析器,“嘿,我需要这个域的IP地址,请查清它,在没有查到它不用回复我。”而在迭代查询中,客户端告诉DNS解析器:“嘿,我需要这个域的IP地址。请在查找过程中告诉我下一个DNS服务器的地址,以便我自己查找。”
递归DNS查询通常比迭代查询的解析速度更快。这是由于高速缓存。递归DNS服务器将对执行的每个查询的最终答案进行高速缓存,并将该最终答案保存一定的时间(称为生存时间 )。
当递归解析器收到对其高速缓存中已经具有的IP地址的查询时,它可以快速将缓存的答案提供给客户端,而无需与任何其他DNS服务器进行通信。如果a)DNS服务器为许多客户端提供服务和/或b)请求的网站非常受欢迎,则很有可能从高速缓存中快速提供响应。
不幸的是,在开放的 DNS 服务器上允许递归 DNS 查询会造成安全漏洞,因为此配置可使攻击者执行 DNS 放大攻击和 DNS 缓存中毒。
在 DNS 放大攻击中,攻击者通常使用一组计算机(称为僵尸网络 )使用欺骗性 IP 地址发送大量 DNS 查询。欺骗性的 IP 地址就像伪造的返回地址一样;攻击者从自己的 IP 发送请求,但要求将响应发送给受害者。为了加剧攻击,攻击者还使用了一种称为放大的技术,用一个欺骗性的请求让服务器做出非常长的响应。受害者的服务将收到大量、延长而且并不需要的 DNS 响应,这可能会破坏甚至关闭其服务器。这是一种 DDoS 攻击。
这就像一群十几岁小孩打给披萨店搞恶作剧,每个人都订十几个披萨。他们给披萨店提供的送货地址不是他们自己的地址,而是一个毫不知情的邻居家。然后,受害者会收到一连串并不想要的披萨,他们的一天可能就这样被毁了。
这种攻击需要一个接受递归查询的DNS服务器来进行,因为放大的DNS数据包是对递归DNS查询的响应。
在DNS缓存中毒攻击中,当递归DNS服务器从另一台DNS服务器请求IP地址时,攻击者将拦截该请求并给出假响应,该响应通常是恶意网站的IP地址。递归DNS服务器不仅向原始客户端发送此IP地址,而且服务器还将响应保存在其高速缓存中。任何请求相同域名IP的用户都将被发送到恶意网站。如果这是一个受欢迎的域名和一个受欢迎的DNS解析器,则此攻击可能会影响成千上万的用户。
在迭代DNS查询中,客户端直接向每个DNS服务器询问答案。即使攻击者能够向查询发送伪造的响应,它也只会影响单个客户端,这通常不值得攻击者花费时间。
Cloudflare 的托管 DNS 服务通常比竞争对手的 DNS 或公共 DNS 能更快地解决 DNS 查询。此外,Cloudflare DNS 支持 DNSSEC,这是一种严格的安全协议,旨在确保 DNS 服务器和查询的安全。