介绍
DNS 或域名系统是系统相互连接以在 Internet 上通信的一个组成部分。 如果没有 DNS,计算机和使用它们的人将只需要使用称为 IP 地址的数字地址进行连接。
除了必须为简单任务记住大量复数这一明显问题外,通过 IP 地址进行通信也会导致一些额外的问题。 将您的网站移动到不同的托管服务提供商,或将您的服务器移动到不同的位置需要您通知每个客户新位置。
DNS 服务器是构成系统的计算机,允许我们使用名称而不是地址,它可以提供许多不同的功能,每个功能都有助于您通过名称访问服务器的能力。
在previous guide中,我们讨论了域名系统的一些基本术语和概念。 我们将假设您熟悉该文章中涵盖的概念。 在本指南中,我们将讨论一些不同类型的 DNS 服务器设置以及每种设置的优势、用例和属性。
DNS查询的路径
当客户端程序想要通过其域名访问服务器时,它必须找出如何将域名转换为可用于通信的实际可路由地址。 它需要知道这些信息才能获取或发送信息到服务器。
某些应用程序(包括大多数 Web 浏览器)维护最近查询的内部缓存。 这是应用程序将首先检查的地方,如果它具有此功能,以便找到相关域的 IP 地址。 如果它在这里没有找到它的问题的答案,那么它会要求系统解析器找出域名的地址是什么。
解析器 通常是在 DNS 查询中充当客户端参与者的任何组件。 系统解析器是您的操作系统用来寻找 DNS 查询答案的解析库。 一般来说,系统解析器通常是我们认为的存根解析器,因为除了在系统上搜索一些静态文件(如/etc/hosts
文件)并将请求转发到另一个解析器。
所以一般来说,一个查询从客户端应用程序到系统解析器,然后它被传递到它具有地址的 DNS 服务器。 此 DNS 服务器称为 递归 DNS 服务器 。 递归服务器是配置为查询其他 DNS 服务器直到找到问题的答案的 DNS 服务器。 它会将答案或错误消息返回给客户端(在这种情况下,系统解析器将依次将其传递给客户端应用程序)。
递归服务器通常也维护一个缓存。 它会首先检查这个缓存,看看它是否已经有了查询的答案。 如果没有,它将查看是否有任何控制上层域组件的服务器的地址。 因此,如果请求是针对 www.example.com
并且在其缓存中找不到该主机地址,它将查看它是否具有 example.com
的名称服务器的地址,如果需要,[ X176X]。 然后它将向它可以找到的最特定域组件的名称服务器发送一个查询,以便查询更多信息。
如果它没有找到任何这些域组件的地址,它必须通过查询 根名称服务器 从层次结构的最顶部开始。 根服务器知道控制 .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 数据构建缓存。 根据使用服务器的客户端数量、缓存的大小以及 TTL 数据在 DNS 记录本身上的时间长度,在大多数情况下,这可以大大加快 DNS 解析速度。
转发 DNS 服务器
为客户端计算机开发缓存的另一种方法是使用转发 DNS 服务器。 这种方法通过实现一个转发服务器,在 DNS 解析链中添加一个额外的链接,该服务器简单地将所有请求传递到另一个具有递归功能的 DNS 服务器(例如缓存 DNS 服务器)。
该系统的优势在于它可以为您提供本地可访问缓存的优势,而不必执行递归工作(这可能会导致额外的网络流量并可能占用高流量服务器上的大量资源)。 这也可以带来一些有趣的灵活性,通过转发到不同的服务器来拆分您的私人和公共流量。
转发 DNS 服务器具有以下属性:
- 无需执行递归即可处理递归请求的能力。 转发 DNS 服务器最基本的属性是将请求传递给另一个代理进行解析。 转发服务器可以拥有最少的资源,并且仍然可以通过利用其缓存来提供巨大的价值。
- 在更近的网络位置提供本地缓存。 特别是如果您不想构建、维护和保护成熟的递归 DNS 解决方案,转发服务器可以使用公共递归 DNS 服务器。 它可以利用这些服务器,同时将主缓存位置移动到非常靠近客户端计算机的位置。 这可以减少回答时间。
- 增加了定义本地域空间的灵活性。 通过有条件地将请求传递到不同的服务器,转发服务器可以确保内部请求由私有服务器提供服务,而外部请求使用公共 DNS。
组合解决方案
虽然上述解决方案的构建考虑了非常具体的目的,但通常希望设置您的 DNS 服务器以结合每个解决方案的优点。
DNS服务器可以配置为作为选择数量的本地客户端的递归缓存服务器,同时仅回答其他客户的迭代权威请求。 这是一种常见的配置,因为它允许您回答域的全局请求,同时还允许您的本地客户端利用服务器进行递归解析。
虽然某些 DNS 软件是专门为履行某一特定角色而设计的,但 Bind 等应用程序非常灵活,可以用作混合解决方案。 虽然在某些情况下试图在单个服务器中提供太多服务会导致性能下降,但在许多情况下,尤其是在小型基础设施的情况下,维护一个单一的、多合一的解决方案是最有意义的。
关系差异
虽然 DNS 服务器配置之间最明显的差异可能是功能性的,但关系差异也非常重要。
主服务器和辅助服务器
鉴于 DNS 在使服务和整个网络可访问方面的重要性,大多数对区域具有权威性的 DNS 服务器将具有内置冗余。 这些服务器之间的关系有多种术语,但通常,服务器在其配置中可以是 primary 或 secondary。
主服务器和辅助服务器都对其处理的区域具有权威性。 主要在区域上没有比次要更多的权力。 主服务器和辅助服务器之间的唯一区别因素是它们从哪里读取区域文件。
主服务器从系统磁盘上的文件中读取其区域文件。 这些通常是区域管理员添加、编辑或传输原始区域文件的地方。
辅助服务器通过来自该区域的主服务器之一的区域传输接收其授权的区域。 一旦有了这些区域,它就会将它们放在缓存中。 如果它必须重新启动,它首先检查它的缓存以查看里面的区域是否是最新的。 如果没有,它会向主服务器请求更新的信息。
对于它们处理的所有区域,服务器不会被降级为仅作为主要或次要服务器。 主要或次要状态是按区域分配的,因此服务器可以是某些区域的主要服务器和其他区域的次要服务器。
DNS 区域通常至少有两个名称服务器。 任何负责 Internet 可路由区域 的区域必须 至少有两个名称服务器。 通常,维护更多的名称服务器以分散负载并增加冗余。
公共与私人服务器
通常,组织在外部和内部都使用 DNS。 然而,应该在这两个领域中提供的信息通常是截然不同的。
组织可能会维护一个外部可用的仅权威 DNS 服务器来处理其处理的域和区域的公共 DNS 查询。 对于内部用户,组织可能会使用单独的 DNS 服务器,其中包含公共 DNS 提供的权威信息,以及有关内部主机和服务的其他信息。 它还可能为其内部客户端提供其他功能,例如递归和缓存。
虽然我们提到了让单个服务器在上面的“组合”服务器中处理所有这些任务的能力,但拆分工作负载有明显的优势。 事实上,维护彼此不了解的完全独立的服务器(内部与外部)通常是可取的。 从安全的角度来看,特别重要的是,公共服务器没有私人对应方的记录。 这意味着不要在公共区域文件中列出您的私有名称服务器和 NS 记录。
还有一些额外的注意事项需要牢记。 虽然让您的公共服务器和私有服务器共享它们在传统的主从关系中共有的区域数据可能更容易,但这可能会将有关您的私有基础架构的信息泄露到野外。
除了将您的私有服务器本身排除在区域文件之外(本质上是一个可公开搜索的实体),在公共服务器的配置文件中删除对私有服务器的任何引用通常也是一个好主意。 这意味着删除传输、通知和主要配置细节,这样公共服务器的入侵并不意味着您的内部名称服务器突然暴露。
这意味着为每个区域维护单独的区域文件,这可能是额外的工作。 但是,这可能是绝对隔离和安全所必需的。
结论
在这个阶段您可能已经意识到,在选择 DNS 配置时有很大的灵活性。
您的选择在很大程度上取决于您组织的需求,以及您的主要优先事项是为选择的客户端(缓存或转发)提供更快的 DNS 解析,还是为整个 Internet 提供您的域和区域(权威服务器)。 组合方法很常见,最终,解决过程的双方都需要考虑在内。
在我们的下一个指南中,我们将演示如何开始使用其中一些配置。 我们将从教 如何设置缓存或转发服务器 开始。 稍后,我们将介绍如何通过 设置一对仅权威的 DNS 服务器 来为您的域提供服务。