DNS服务器类型比较:如何选择正确的DNS配置

时间:2022-04-18 04:58:58

提供:ZStack云计算

系列教程

本教程为7篇系列中的第2篇:DNS管理简介

前言

DNS(域名系统)是互联网上系统之间连接的一个集成部分,如果没有DNS,则网络用户只能通过IP地址来建立连接。

IP地址的问题首先是在于不容易记忆,其次如果你为网站变更了托管服务商导致主机IP变化,则你不得不通知所有的客户去访问新的IP地址。

DNS服务器让我们可以通过域名来访问服务,这样做有很多好处。

之前一篇文章中,我们讨论了DNS的一些基本概念。本文将介绍不同种类的DNS服务器配置,各种配置的优点、使用场景和特性。

一次DNS请求的路径

一个客户端基于一个域名发起了一个请求。它需要将该域名翻译为实际的IP地址,然后才能从该IP地址所在的主机收发信息。

大部分应用(包括大部分浏览器)都保留有最近请求的缓存数据,这是请求首先会查询的地方。如果该请求在本地缓存没有找到需要的IP,则它会去找系统解析模块(resolver)进行查找。

一个resolver相当于是客户端的DNS查询组件,是操作系统内部包含的一个解析库。此类resolver一般我们叫做stub resolver,因为它的功能比较弱,只能做一些简单的查询,比如在本地静态文件中(/etc/hosts)查找,以及将请求转发给另一个resolver。

总之,一个请求先在应用缓存中查询,然后到系统解析模块,然后如果还没找到的话,则被转发到一个系统知道其IP的DNS服务器。这台DNS服务器被称为递归式(recursive)DNS服务器,它专门从另外的DNS服务器上查找IP,一旦找到了,则将结果返回给系统解析模块,继而由系统解析模块返回给客户端应用。如果没找到,也会返回一个错误信息。

递归式服务器也包含一个缓存,它会先在自己的缓存中查询。如果查询不到,则会将请求转发给其已知的、对应该请求的上级域名DNS服务器的IP地址。比如,如果请求域名为www.example.com,则该递归式服务器会寻找example.com,乃至于com的DNS服务器,并将请求发送给最贴近的结果。

如果上述两个部分都没有找到,则该递归服务器会发送请求到一个根域名服务器(root name server)。根域名服务器上存有所有*域名(top level domain,TLD)服务器的信息,包括.com.net.org等区。递归服务器将www.example.com的请求发给根域名服务器,根域名服务器会把自己的.com区下的各个服务器地址介绍给递归服务器。

然后,递归服务器根据这份介绍列表,依次到各个.com域名服务器上查找,直到找到example.com和最终要找的www.example.com。找到结果后,递归服务器将结果缓存到本地,然后发送给客户端。

如上所述,整个路径涉及到很多不同种类的服务器,分别担负不同的责任。下面将会对其一一介绍。

功能区别

不同的DNS服务器之间,有些区别纯粹是功能性的。大部分涉及DNS的服务器都专注于特定的功能,类型的选择取决于你的需求和希望解决的问题。

Authoritative-Only(权威型)

权威型DNS服务器只关注自己负责的区域相关请求,不理会其他区域相关的请求。所以,此类服务器一般非常快,可以高效的处理很多请求。

权威型服务器有如下特点:

  • 对于自己所负责的区域请求可以很快响应,因为它保存了该区下所有域名的信息。如果是该区下已经迁出至其他域名服务器的内容,则保存其服务器的介绍信息。
  • 不响应递归请求。这相当于是权威型服务器的定义。也就是说,在DNS系统中,权威型服务器从来只做服务器而不做客户端。大部分针对权威型服务器的请求来自resolver,对其的回复要么是最终答案,要么是其所知道的另一台知道该答案的服务器的介绍信息。
  • 不对请求结果进行缓存。缓存是没必要的,因为权威型服务器从不对别的服务器发起请求。它需要返回的信息全部都是已经保存在本地的信息。

缓存型(Caching)

缓存型DNS服务器主要用于处理来自客户端的递归请求。基本上,操作系统内的stub resolver发起询问的服务器对象都是缓存型DNS服务器。

缓存型服务器擅长处理递归请求,相对于权威型而言更适合客户端的需求,因为权威型只知道自己负责的区域,而缓存型可以找到各个区域的域名。尤其对于比较落伍的客户端接口而言,缓存型服务器让它们得以与全球的DNS系统相连接。

将请求的结果缓存到本地的目的是提升性能,这样就不必对同一类请求重复的向其他服务器进行查询。于是,缓存型服务器本身也能够直接提供相当数量的DNS信息,对于此类信息能够快速的返回结果。

缓存型DNS服务器的特点如下:

  • 能够访问到所有公网上的DNS数据。公网上的DNS数据,指的是全球委托树(global delegation tree)下挂载的可公开访问的DNS服务器所提供的所有区数据。缓存型DNS可以直接向根域名服务器发起请求,并智能的获取引荐信息。
  • 给弱智客户端手把手的传递信息。现代操作系统基本上都自带stub resolver,可以在本地进行一些DNS解析工作。Stub resolver做的事情基本上就是发起一个递归请求,然后期待收获一个准确的答案,而缓存型DNS服务器就是给它们提供这答案的。接收递归请求后,缓存型服务器要么返回准确的答案,要么返回一个DNS错误信息。
  • 保存最近请求过的数据缓存。这个在本地积累的缓存使得缓存型DNS服务器可以自己给客户返回一些答案,从而提升解析的速度,而具体提升的情况则取决于客户端的多少、缓存的大小、以及TTL数据在DNS记录上留存的时间。

转发型(Forwarding)

为客户端建立缓存的另一种方案是转发型DNS服务器。此类服务器在DNS解析链中添加了一个额外的链接,将所有的请求发送给另一个具备递归解析能力DNS服务器(比如一个缓存型服务器)。

该系统的优点在于可以在本地缓存一些数据,从而减少了一些递归查询的工作(从而免去了一些网络上的来往,省下了一些时间和资源)。另一方面,该系统还提供了一些灵活性,比如你可以将内网和公网的访问分别转发到不同的服务器上。

转发型DNS服务器有如下特点:

  • 可以接收递归请求,又不用自己去处理它们。转发型服务器的基本特点就是将请求转发给另一个服务器做解析,所以它可以在配置比较低的情况下充分利用自己的缓存。
  • 就近建立本地缓存。尤其是,如果你觉得一套完整的DNS解析方案的设置和维护加固什么的太麻烦,则转发型服务器就比较合适了。将请求转发到公共DNS服务器上,同时在本地又有缓存,可以缩短等待时间。
  • 提升本地域的灵活性。转发型服务器可以将不同的请求转发到不同的服务器,从而将内网请求和公网请求区分开,比如将内网请求发给内网服务器,外网请求发给公共服务器。

综合方案

上述方案中的每一种都有特定目的,我们可以结合它们的优点搭配着使用。

一台DNS服务器可以对某一些本地客户端配置为递归缓存型,而为其他一些客户端配置为权威型。比如,为外部进来访问你的域名的客户端配置为权威型,为本地客户端配置为缓存型。

有些DNS软件在设计上就专门倾向于其中一种,不过也有Bind这样的应用可以灵活配置。有的情况下,在一台机子上配置多种功用可能导致性能问题,不过对于小型集群而言(这应该是大部分情况),维护单独一台多功能服务器应该是最好用的。

相对的类型区别

While the most apparent differences between DNS server configurations are probably functional, the relational differences are also extremely important.

上述的功能区别是比较明显的,不过以下这些相对区别也值得注意。

主-从

基于DNS在网络环境中的重要性,大部分对区域解析负责的DNS服务器都备有冗余。对于主备服务器之间的关系有不同的用词描述,不过一般我们都是用主(master)-从(slave)这样的说法。

主服务器和从服务器对于其所负责的区域而言都是权威性质的,即,主服务器不比从服务器具有更多权限。两者之间的差别主要在于其读取区文件的位置。

主服务器从系统硬盘上读取区文件,这里一般是管理员对原始区文件进行添加、编辑、转移等操作的地方。

从服务器从主服务器那里通过转移(transfer)的方式获取区文件。获取完毕后,该文件被缓存。如果服务器重启,则它会先检查本地缓存是否需要更新,需要更新的情况下则从主服务器获取更新信息。

一台服务器不一定只是主或者从,可能对有些区是主,对另一些区是从。

每一个DNS区一般都有至少两个域名服务器。任何一个在互联网上负责路由的区必须有至少两个域名服务器。一般而言这个数量会更多一些,一方面分散负载,一方面提高冗余度。

公网-内网

通常,企业同时在外网和内网使用DNS,而这两个环境下的信息通常是非常不同的。

企业可能维护一个对外部可用的权威型服务器,以解析对自己域下的请求。对于内部用户,企业可能会使用另一台分开的DNS服务器,上面既有跟对外网用户一样的内网域名解析信息,又能够为内网用户上外网访问提供递归查询和缓存功能。

上面我们提到了将不同功能集中在一台服务器的好处,不过将不同功能分散到不同服务器也是有好处的。实际上,维护两台互不关联的DNS服务器通常是更好的选择,尤其是从安全角度看来,这意味着公网跟内网数据完全没有交叉,内网的私有域名服务器不会被列入到公共区文件中。

此外还有一点要注意:如果你的公共DNS服务器和私有DNS服务器是通过主从的方式共享它们都需要的那部分区文件,这虽然配置起来简单,却可能导致你的内网架构泄露到外面去。

一方面要保护内网服务器不被收录到公共区文件(尤其是那些可以被公开搜索的),另一方面最好将有关内网服务器的一切引用从公网服务器的配置文件中移除。这包括转移(transfer)、提醒(notify)、以及主服务器配置的细节。这样一来,即使公网服务器不幸被攻击者拿下,你的内网信息也不至于泄露。

这就意味着我们要为两台服务器分别维护区文件,这是添了一些麻烦。不过为了绝对的隔离和安全性,这是非常有必要的。

总结

至此,你对于DNS配置的选择应该有了一定的了解。

具体选择哪种类型,取决于你所在企业的需求,以及你服务的对象是需要快速响应的少部分客户(缓存型、转发型),还是广大需要访问你所负责的区域的群众(权威型)。搭配使用是常用的手法,而解析过程的两方面都需要考虑到。

在本系列的下一篇教程中,我们将介绍一些配置的操作步骤。我们先介绍缓存型和转发型服务器的配置,然后再介绍权威型服务器的配置

本文来源自DigitalOcean Community。英文原文:A Comparison of DNS Server Types: How To Choose the Right DNS Configuration by Justin Ellingwood

翻译:lazycai