为什么小型站点需要地理冗余DNS?


31

这是有关DNS地理冗余的规范问题

众所周知,在提供弹性Web服务时,非常需要位于单独物理位置的地理冗余DNS服务器。BCP 16文档对此进行了深入介绍,但是一些最常提及的原因包括:

  • 防止数据中心灾难。地震发生了。机架中会发生火灾,并烧毁附近的服务器和网络设备。如果数据中心的物理问题一下子淘汰了两个DNS服务器,即使它们不在同一行中,多个DNS服务器也不会给您带来什么好处。

  • 防止上游同行问题。如果共享的上游网络对等点很麻烦,则多个DNS服务器将无法防止出现问题。上游问题是完全使您脱机,还是只是将所有DNS服务器与一小部分用户隔离开,最终结果是即使服务本身位于完全不同的数据中心中,人们也无法访问您的域。

很好,但是如果我要使用相同的IP地址运行所有服务,那么冗余DNS服务器真的必要吗?如果没有人可以访问我的域提供的任何内容,我看不到拥有第二台DNS服务器会给我带来什么好处。

我知道这被认为是最佳做法,但这似乎毫无意义!


Answers:


33

注意:有争议的内容,两个答案均请参考评论。发现错误,需要对这个问答进行大修。

我暂时将拒绝从此答案中删除,直到正确解决了该规范问答的状态。(删除此答案还会删除附件中的注释,这不是IMO的方法。经过大量编辑后,可能会将其变成社区Wiki答案。)


我可以在这里引用RFC并使用技术术语,但这是一个概念,在知识领域的两端都被很多人所遗漏,我将尝试为更广泛的读者回答这一问题。

我知道这被认为是最佳做法,但这似乎毫无意义!

看起来似乎毫无意义……但实际上并非如此!

递归服务器非常擅长记住何时远程服务器不响应查询,尤其是当它们重试并且仍然从不看到答复时。许多服务器对这些通信失败实施了负面缓存,并且将不响应的名称服务器临时放置在罚款框中的时间不超过五分钟。最终,此“惩罚”期限到期,他们将恢复通信。如果错误的查询再次失败,则将它们直接放回框中,否则它将照常营业。

这是我们遇到单个名称服务器问题的地方:

  • 惩罚期在本质上始终是大于或等于网络问题的持续时间。在几乎所有情况下,它都会更长,最多额外五分钟。
  • 如果您的单个DNS服务器进入惩罚框,则与故障关联的查询将在整个持续时间内完全失效。
  • 短暂的路由中断在互联网上发生的次数比大多数人意识到的更多。TCP / IP重传和类似的应用程序防护措施可以很好地将其隐藏在用户面前,但这是不可避免的。由于支持网络堆栈的各种标准中都内置了安全措施,因此互联网在绕过这种损害方面做得很好,但是其中还包括DNS内置的安全措施,并且拥有地理冗余DNS服务器是一个很好的选择。部分。

简而言之,如果您使用单个DNS服务器(这包括在NS记录中多次使用相同的IP地址),则将发生这种情况。它还会发生比您想象的要多得多的问题,但是问题将是零星的,以至于失败的几率1)被报告给您,2)被复制和3)与该特定问题相关的可能性非常接近零。他们几乎零,如果你来到了这个Q&A不知道这个过程是如何工作的,但幸运的是,不是现在应该是这样的!

这应该打扰您吗?这不是我真正要说的地方。有些人根本不会在乎这五分钟的打扰问题,而我在这里并不是要说服您。我这里要说服您的是,实际上在所有情况下,您仅通过运行单个DNS服务器就确实牺牲了一些东西。


1
某些系统也无可避免地依赖于dns查找不会失败。这是常见的故障点,缺少冗余会导致很多麻烦。
artifex

18
被缓存的邮件是一个经典示例,说明如何在与其他基础结构同时启动DNS的情况下进行自我射击。使用冗余DNS,当您的站点关闭时,邮件仅在发件人的服务器上排队,并在恢复后传递。使用单一DNS,当您停机时发送的入站邮件通常会被域不存在或类似错误的发件人服务器永久拒绝。从外围(静止)系统发送的出站邮件可能会失败,因为发件人域当前无法解析。
MadHatter支持Monica

5
另外,域名通常不仅是网络-也是电子邮件。如果您正在为您的域使用电子邮件服务提供商,即使您的网络服务器处于关闭状态,它们也可能不会关闭,并且如果您有冗余DNS,您仍然可以接收电子邮件。
珍妮D说恢复莫妮卡2015年

5m只是单台服务器的重试时间?这是否不会与链中的许多服务器相乘,并且客户端也会缓存错误的查询?
Nils

@Nils您能稍微改一下吗?我在确定您是指递归群集中的许多服务器还是权威服务器时遇到了麻烦。5m负缓存间隔是每台服务器,因此您必须获得大量请求才能在整个递归群集上缓存单个记录负缓存-从而使故障更加零星。
Andrew B

-1

OP问:

很好,但是如果我要使用相同的IP地址运行所有服务,那么冗余DNS服务器真的必要吗?如果没有人可以访问我的域提供的任何内容,我看不到拥有第二台DNS服务器会给我带来什么好处。

好问题!

最好的答案是由伯克利博士Daniel J. Bernstein教授提供的,他不仅是世界知名的研究人员,科学家和密码学家,而且还编写了一种非常流行且广受欢迎的DNS套件,称为DJBDNS最新发布于2001年, 02-11,至今仍很流行)。

http://cr.yp.to/djbdns/third-party.html(2003-01-11

第三方DNS服务的成本和收益

请注意以下简短部分:

第三方DNS服务的参数错误

第二种策略是声称,当无法访问所有DNS服务器时,广泛使用的DNS客户端将执行某些“特别邪恶”的操作。该论点的问题在于声明是错误的。任何此类客户端显然都是越野车,将无法在市场中生存:请考虑如果客户端的路由器短暂中断或客户端的网络暂时被淹没,会发生什么情况。

这样,这个问题的原始答案就不会错了。

是的,有时会持续几秒钟的短暂临时网络中断。不,在这种中断期间无法解析名称不会被缓存任何分钟(否则,即使世界上拥有最佳的高可用性权威名称服务器设置也无济于事)。

从1998-03年RFC 到5分钟内完全实施保守准则的任何软件来缓存故障的任何软件,都只会被设计破坏,而拥有额外的地理冗余服务器也不会造成任何影响。

实际上,按照DNS超时被缓存多长时间?,在BIND中,SERVFAIL传统上在2014年之前根本缓存该条件,并且自2015年以来,默认情况下缓存1秒,这比普通用户达到解析器超时并再次按下“刷新”按钮所需的时间少。

(甚至在到达是否应缓存解析尝试的上述点之前,即使首先出现第一个SERVFAIL,也要花费多个丢弃的数据包。)

此外,BIND开发人员甚至为该功能设置了一个上限,即30秒,即使作为上限(例如,该功能将接受的最大值),也已经比5分钟(300秒)建议低了10倍。通过RFC来确保,即使是最有心的管理员(眼球用户)也无法射击自己的用户。


此外,有很多原因,你可能希望运行第三方DNS服务 - 在整个阅读djbdns/third-party.html的所有细节,并租用一个小的额外服务器只为DNS到自己管辖时,无需很难保证除了BCP 16之外,还存在其他的方法。

至少从2002年开始,我个人拥有和设置域名的“轶事”经验可以肯定地说,由于专业运营,我实际上已经在各个域名上造成严重的停机我的注册服务商和托管服务提供商的第三方服务器不可用,并且多年来一次都一次发生故障,这些服务器都无法使用,从而在我自己的IP地址(即否则,完全可以访问给定域的HTTP和SMTP托管来源。请注意,这些中断是由多家独立的,受人尊敬的和专业运营的提供商发生的,绝不是孤立的事件,并且每年都会发生,并且作为第三方服务,完全在您的控制范围之外 ; 碰巧的是,很少有人会长期谈论它。


简而言之:

对于小型站点,根本不需要地理冗余DNS。

如果您要使用相同的IP地址运行所有服务,则添加第二个DNS最有可能导致额外的故障点,并且不利于域的持续可用性。 在“智慧” 总是不得不这样做在任何可以想象的情况是一个非常流行的神话,确实; 没了

当然,如果域名的某些服务已经由第三方提供服务,则该建议将完全不同,例如Web(HTTP / HTTPS),邮件(SMTP / IMAP)或语音/文本(SIP / XMPP)提供商,在这种情况下,将您自己的IP消除为单点故障确实是一个非常明智的方法,而地理冗余确实非常有用。

同样,如果您有一个特别受欢迎的网站,拥有数百万的访问者,并且明知需要按照BCP 16的要求提供额外的灵活性和对地理冗余DNS的保护,那么……您可能没有将单个服务器/网站用于Web /邮件/语音/文字已经存在,因此此问题和答案显然不适用。祝好运!


尽管我很乐意邀请​​专业人士审查这两个答案,但我从这些词汇中获得的不仅仅是戏剧效果。因此,尽管我会接受与我或其他人相比,我深信不疑的各方提出的任何意见,但我选择让自己不再参与此评论主题。
安德鲁B

我不确定您的评论是要说什么。您回答了自己的问题,根据我的答案中直接说明的观点,该论点完全无效,直接引用DJB。您的答案不正确;这样,您就在维护神话,对社区造成损害。如果您想取消答案并接受我的,我很乐意接受对此的建设性批评/编辑。
cnst

2
好的软件将识别SERVFAIL响应(如果无法访问任何权威服务器,则由递归服务器生成)并进行适当处理,即通过对SMTP邮件进行排队。不幸的是,并非所有软件都是好的。有一位教授的教条式实施协议方法引起了重大的互操作性问题……
Alnitak

2
行业的当前状态和野外的事物比2003年以来的任何事物都更重要,更不用说2001年了。这就是为什么相关的第三方意见比用过时的社论来判断事情更有价值的原因,尽管有可能可能在时间的考验中幸存下来。Alnitak指出,我对BIND如何处理此案的记忆是错误的,而我用RFC 2308的废话来加强记忆确实是错误的。我会在本周抽空抽空。
安德鲁B

2
旁注:为了承认我的事实上的错误,我不愿让您参与进来,但看来我们又回到了交战边界。对于传播错误的信息,我深表歉意,并确认了该错误,但我不想再与您打交道了。(我也不应该在您看来已有这样的历史)
Andrew B
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.