什么是递归DNS?

在匹配域名和机器可读IP地址的DNS查询中,可以通过DNS服务器或客户端来完成DNS层级结构的遍历。

学习目标

阅读本文后,您将能够:

  • 定义递归DNS
  • 区分递归和迭代DNS查询
  • 了解与递归DNS查询相关的优势和风险

相关内容


想要继续学习吗?

订阅 TheNET,这是 Cloudflare 每月对互联网上最流行见解的总结!

参阅 Cloudflare 的隐私政策,了解我们如何收集和处理您的个人数据。

复制文章链接

所有 Cloudflare 计划中均包含免费 DNS

什么是递归DNS?

递归 DNS 查找是一个 DNS 服务器与其他几个 DNS 服务器进行通信以搜寻 IP 地址并将其返回给客户端的地方。这与迭代 DNS 查询相反,在迭代 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查询通常比迭代查询的解析速度更快。这是由于高速缓存。递归DNS服务器将对执行的每个查询的最终答案进行高速缓存,并将该最终答案保存一定的时间(称为生存时间 )。

当递归解析器收到对其高速缓存中已经具有的IP地址的查询时,它可以快速将缓存的答案提供给客户端,而无需与任何其他DNS服务器进行通信。如果a)DNS服务器为许多客户端提供服务和/或b)请求的网站非常受欢迎,则很有可能从高速缓存中快速提供响应。

递归DNS的缺点是什么?

不幸的是,在开放的 DNS 服务器上允许递归 DNS 查询会造成安全漏洞,因为此配置可使攻击者执行 DNS 放大攻击DNS 缓存中毒

递归DNS服务器和DNS放大攻击

在 DNS 放大攻击中,攻击者通常使用一组计算机(称为僵尸网络 )使用欺骗性 IP 地址发送大量 DNS 查询。欺骗性的 IP 地址就像伪造的返回地址一样;攻击者从自己的 IP 发送请求,但要求将响应发送给受害者。为了加剧攻击,攻击者还使用了一种称为放大的技术,用一个欺骗性的请求让服务器做出非常长的响应。受害者的服务将收到大量、延长而且并不需要的 DNS 响应,这可能会破坏甚至关闭其服务器。这是一种 DDoS 攻击

这就像一群十几岁小孩打给披萨店搞恶作剧,每个人都订十几个披萨。他们给披萨店提供的送货地址不是他们自己的地址,而是一个毫不知情的邻居家。然后,受害者会收到一连串并不想要的披萨,他们的一天可能就这样被毁了。

这种攻击需要一个接受递归查询的DNS服务器来进行,因为放大的DNS数据包是对递归DNS查询的响应。

递归DNS服务器和DNS缓存中毒攻击

在DNS缓存中毒攻击中,当递归DNS服务器从另一台DNS服务器请求IP地址时,攻击者将拦截该请求并给出假响应,该响应通常是恶意网站的IP地址。递归DNS服务器不仅向原始客户端发送此IP地址,而且服务器还将响应保存在其高速缓存中。任何请求相同域名IP的用户都将被发送到恶意网站。如果这是一个受欢迎的域名和一个受欢迎的DNS解析器,则此攻击可能会影响成千上万的用户。

在迭代DNS查询中,客户端直接向每个DNS服务器询问答案。即使攻击者能够向查询发送伪造的响应,它也只会影响单个客户端,这通常不值得攻击者花费时间。

如何支持既快速又安全的DNS查询

Cloudflare 的托管 DNS 服务通常比竞争对手的 DNS 或公共 DNS 能更快地解决 DNS 查询。此外,Cloudflare DNS 支持 DNSSEC,这是一种严格的安全协议,旨在确保 DNS 服务器和查询的安全。