介绍
DNS,即域名系统,是系统在互联网上进行通信时连接的一个重要部分。没有了DNS,计算机和使用它们的人将只能使用称为IP地址的数字地址进行连接。
除了需要记住大量复杂数字地址的明显问题外,通过IP地址进行通信还会引发一些额外的问题。将您的网站迁移到不同的托管提供商,或将服务器迁移到不同的位置,都需要您通知每个客户新的位置。
DNS服务器,即共同形成允许我们使用名称而不是地址的系统的计算机,可以执行许多不同的功能,每个功能都可以为您访问服务器提供帮助。
在之前的指南中,我们讨论了域名系统的一些基本术语和概念。我们将假设您对该文章中涵盖的概念有一定的了解。在本指南中,我们将讨论一些不同类型的DNS服务器设置以及每种设置的优势、用例和属性。
DNS查询的路径
当客户端程序想要通过其域名访问服务器时,它必须找出如何将域名转换为实际可路由的地址,以便用于通信。为了获取或发送信息到服务器,它需要知道这些信息。
一些应用程序,包括大多数网络浏览器,会维护最近查询的内部缓存。这是应用程序将首先检查的地方,如果有这个功能的话,以查找所询问域的IP地址。如果它在这里找不到问题的答案,它会请求系统解析器来找出域名的地址是什么。
解析器通常是指在DNS查询中充当客户端参与者的任何组件。系统解析器是您的操作系统用于寻找DNS查询答案的解析库。通常,系统解析器通常是我们认为的存根解析器,因为它们除了搜索系统上的一些静态文件(如/etc/hosts
文件)并将请求转发给另一个解析器外,没有太多复杂性。
因此,查询通常从客户端应用程序到系统解析器,然后传递到它具有地址的DNS服务器。这个DNS服务器称为递归DNS服务器。递归服务器是配置为查询其他DNS服务器直到找到问题答案的DNS服务器。它将答案或错误消息返回给客户端(在这种情况下是系统解析器,系统解析器将其转发给客户端应用程序)。
递归服务器通常也会维护缓存。它将首先检查此缓存,以查看是否已经有查询的答案。如果没有,它将查看是否具有控制上级域组件的任何服务器的地址。因此,如果请求是针对www.example.com
,并且它在其缓存中找不到该主机地址,它将查看是否具有example.com
的名称服务器的地址,必要时还有com
的地址。然后,它将发送查询到它能找到的最具体域组件的名称服务器,以查询更多信息。
如果它找不到这些域组件的地址,它必须从层次结构的最顶层开始查询根名称服务器。根服务器知道所有控制.com
、.net
、.org
等区域的TLD(顶级域)名称服务器的地址。它将询问根服务器是否知道www.example.com
的地址。根服务器将把递归服务器引用到.com
TLD的名称服务器。
然后,递归服务器跟随引荐的路径到每个负责域组件的连续名称服务器,直到它能够准确找到具有完整答案的特定名称服务器。它将这个答案放入其缓存以供以后查询,然后将其返回给客户端。
从这个例子中可以看出,有许多不同类型的服务器,它们各自扮演不同的角色。让我们详细了解不同类型的DNS服务器的具体情况。
功能差异
一些DNS服务器之间的差异纯粹是功能性的。大多数涉及实施DNS的服务器都专门用于特定功能。您选择的DNS服务器类型将在很大程度上取决于您的需求以及您希望解决的问题类型。
仅授权DNS服务器
仅授权DNS服务器是一个只关心回答其负责区域查询的服务器。由于它不帮助解析外部区域的查询,因此通常非常快速,并且可以高效处理许多请求。
仅授权服务器具有以下特性:
- 对其控制的区域查询非常快速响应。 仅授权服务器将拥有有关其负责的域的所有信息,或者有关已委派给其他名称服务器的域内区域的引荐信息。
- 不会响应递归查询。 仅授权服务器的定义是不处理递归请求。这使它成为一个仅仅是DNS系统中的服务器,而不是客户端。到达仅授权服务器的任何请求通常将来自已收到对其的引荐的解析器,这意味着仅授权服务器将具有完整答案,或者将能够向其委派责任的名称服务器传递新的引荐。
- 不缓存查询结果。 由于仅授权服务器从不查询其他服务器以解析请求的信息,因此它永远没有机会缓存结果。它所知道的所有信息已经在其系统中。
缓存 DNS 服务器
缓存 DNS 服务器是一个处理来自客户端的递归请求的服务器。操作系统的存根解析器几乎会联系到每个 DNS 服务器,而这些服务器都是缓存 DNS 服务器。
缓存服务器有回答客户端递归请求的优势。尽管仅具有权威性的服务器可能更适合提供特定区域信息,但从客户端的角度来看,缓存 DNS 服务器更加实用。它使得 DNS 系统对于相对简单的客户端接口变得更加可访问。
为了避免在每次接收到递归请求时都发出多次迭代请求到其他 DNS 服务器而导致性能下降,服务器会对其结果进行缓存。这使得它在处理最近的请求时能够快速访问广泛的 DNS 信息(全球公开可访问的 DNS),从而提高了解析速度。
缓存 DNS 服务器具有以下特性:
- 访问整个公共 DNS 数据范围。 所有由全球委托树连接到公共可访问 DNS 服务器提供的区域数据都可以被缓存 DNS 服务器访问。它了解根 DNS 服务器,并且可以在接收到数据时智能地跟随引荐。
- 能够向简单客户端提供数据。 几乎每个现代操作系统都通过使用存根解析器将 DNS 解析卸载到专用递归服务器上。这些解析库只是发出递归请求,并期望得到完整的答案。缓存 DNS 服务器具有为这些客户端提供服务的能力。通过接受递归查询,这些服务器承诺要么返回答案,要么返回 DNS 错误消息。
- 维护最近请求数据的缓存。 通过在为客户端请求收集的数据中进行缓存,缓存 DNS 服务器建立了最近 DNS 数据的缓存。这可以极大地加快大多数情况下的 DNS 解析速度,具体取决于使用服务器的客户端数量、缓存大小以及 DNS 记录本身的 TTL 数据持续时间。
转发 DNS 服务器
为客户端机器开发缓存的另一种方法是通过使用转发 DNS 服务器。这种方法通过实现一个转发服务器,简单地将所有请求传递给具有递归功能的另一个 DNS 服务器(如缓存 DNS 服务器),从而在 DNS 解析链中添加了一个额外的环节。
这种系统的优势在于它可以让您在不必自行进行递归工作的情况下获得本地可访问的缓存(这可能会导致额外的网络流量,并且会占用高流量服务器的大量资源)。这还可以在将私有流量和公共流量分开时带来一些有趣的灵活性。
转发 DNS 服务器具有以下特性:
- 能够处理递归请求而无需自行执行递归。 转发 DNS 服务器最基本的特性是将请求传递给另一个代理进行解析。转发服务器可以具有最小的资源,但仍然可以通过利用其缓存提供巨大的价值。
- 在更近的网络位置提供本地缓存。 特别是如果您不想构建、维护和保护一个完整的递归 DNS 解决方案,转发服务器可以使用公共递归 DNS 服务器。它可以利用这些服务器,同时将主要缓存位置移动到非常靠近客户端机器的地方。这可以减少答复时间。
- 增加了定义本地域空间的灵活性。 通过有条件地将请求传递给不同的服务器,转发服务器可以确保内部请求由私有服务器提供,而外部请求使用公共 DNS。
组合解决方案
虽然上述解决方案是针对非常具体的目的构建的,但通常希望设置 DNS 服务器以结合每种解决方案的优势。
可以配置 DNS 服务器以作为一种递归、缓存服务器为一些本地客户端提供服务,同时只回答其他客户端的迭代、权威请求。这是一种常见的配置,因为它允许您回答您域的全局请求,同时还允许您的本地客户端利用服务器进行递归解析。
虽然某些 DNS 软件专门设计用于执行特定角色,但像 Bind 这样的应用程序非常灵活,可以用作混合解决方案。虽然在某些情况下,尝试在单个服务器中提供过多的服务可能会导致性能下降,但在许多情况下,特别是在小型基础设施的情况下,保持单一的全能解决方案是最合理的选择。
关系差异
虽然 DNS 服务器配置之间最明显的差异可能是功能性的,但关系差异也非常重要。
主服务器和辅助服务器
鉴于 DNS 在使服务和整个网络可访问方面的重要性,大多数负责区域的 DNS 服务器都具有内置的冗余性。这些服务器之间的关系有各种术语,但通常,服务器可以在其配置中是主服务器或辅助服务器。
主服务器和辅助服务器都对它们处理的区域具有权威性。主服务器对区域的控制权并不比辅助服务器更大。主服务器和辅助服务器之间唯一的区别在于它们从何处读取其区域文件。
主服务器从系统磁盘上的文件中读取其区域文件。这通常是区域管理员添加、编辑或传输原始区域文件的地方。
辅助服务器通过从区域的一个主服务器进行区域传输来接收它负责的区域。一旦它拥有这些区域,它会将它们放入缓存中。如果它需要重新启动,它首先检查其缓存,以查看其中的区域是否是最新的。如果不是,它会从主服务器请求更新的信息。
服务器不仅限于对其处理的所有区域都是主服务器或辅助服务器。主服务器或辅助服务器的状态是基于区域的基础分配的,因此服务器可以对一些区域是主服务器,对其他区域是辅助服务器。
DNS 区域通常至少有两个名称服务器。负责互联网可路由区域的任何区域 必须 至少有两个名称服务器。通常情况下,会维护许多更多的名称服务器,以便分担负载并增加冗余性。
公共服务器与私有服务器
通常,组织在外部和内部都使用 DNS。然而,应该在这两个领域中公开的信息通常大不相同。
一个组织可能会维护一个外部可用的仅授权 DNS 服务器,用于处理其处理的域和区域的公共 DNS 查询。对于其内部用户,组织可能会使用一个包含公共 DNS 提供的授权信息以及有关内部主机和服务的额外信息的单独的 DNS 服务器。它还可能为其内部客户提供额外的功能,如递归和缓存。
虽然我们在上面提到了一个单一服务器处理所有这些任务的能力,在分割工作负载方面确实有明显的优势。事实上,维护完全分开的服务器(内部与外部),它们彼此不知道对方的情况通常是可取的。从安全的角度来看,公共服务器没有私有服务器的记录尤为重要。这意味着不要在公共区域文件中使用 NS 记录列出您的私有名称服务器。
还有一些额外的考虑要牢记。虽然在传统的主-辅关系中,让公共和私有服务器共享它们共有的区域数据可能更容易,但这可能会泄露有关您的私有基础设施的信息。
除了让私有服务器不出现在区域文件中(基本上是一个公开可搜索的实体)之外,通常还应该删除公共服务器配置文件中对私有服务器的任何引用。这意味着删除传输、通知和主配置详细信息,以便公共服务器的妥协不会意味着您的内部名称服务器突然暴露。
这意味着为每个服务器维护单独的区域文件,这可能需要额外的工作。然而,这可能是绝对分离和安全所必需的。
结论
到这个阶段,您可能已经意识到在选择 DNS 配置方面有相当大的灵活性。
您的选择将在很大程度上取决于您组织的需求,以及您的主要优先级是为一些客户提供更快的 DNS 解析(缓存或转发),还是向互联网大规模提供您的域和区域(授权服务器)。组合方法很常见,最终,解析过程的两端都需要考虑到。
在我们接下来的指南中,我们将演示如何开始使用其中一些配置。我们将首先教您如何设置一个缓存或转发服务器。稍后,我们将介绍如何通过设置一对仅授权 DNS 服务器来为您的域提供服务。