DNS服务器已使用任播。添加更多IP会增强可伸缩性吗?


9

RFC 1034要求我们为DNS服务器分配至少两个IP地址。但是,如果我们使用任播寻址,则已经可以通过单个IP地址实现冗余。BGP任意播似乎可以很好地扩展到数百甚至数千个服务器。

如果是这样,为什么我们仍需要DNS服务器使用多个IP地址?如果我们已经进行了任播,它是否真的增强了冗余(有助于提高可用性),或者这只是神话?

如果仅使用一个IP地址,我们将面临哪些问题和错误

这样,我的意思是完全省略辅助DNS地址,或者1.2.3.4在某些设置需要至少两个时使用伪IP(例如)作为第二个地址。

Answers:


16

一个单一的任播IP地址不会为您提供与两个具有不同IP前缀的单播IP地址相同的冗余。

通常,冗余最困难的问题不是什么时候完全失败,而是什么时候行为不正当就足以通过运行状况检查,而实际上却无法正常运行。

我已经看到DNS服务器出现故障的任播DNS设置,但是数据包仍然会路由到该DNS服务器。不管广告前缀是什么,都可能根本不知道DNS服务器已关闭。

如果所讨论的DNS服务器不是权威DNS服务器,而是递归解析器,则将变得更加棘手。

这样的递归解析器将需要具有用于接收来自客户端的查询的任播地址和用于查询权威DNS服务器的单播地址。但是,如果单播地址掉了,它看起来很健康,以至于仍然可以路由查询。

Anycast是可伸缩性和减少延迟的绝佳工具。但是为了冗余,它不应该单独存在。

但是,多个冗余的任播池是一个很好的可用性解决方案。众所周知的示例是8.8.8.8和8.8.4.4。两者都是任播地址,但绝不应将它们路由到同一台物理DNS服务器(假设Google做得很好)。

如果您有10台物理DNS服务器,则可以将它们配置为2个池,每个池中有5个服务器,或5个池,每个池中有2个。您要避免一台物理DNS服务器同时位于多个池中。

那么您应该分配多少个IP?您需要具有可以相互独立配置为任意广播的IP。这通常意味着您需要为每个池分配整个/ 24的IPv4地址空间或/ 48的IPv6地址空间。这很可能会限制您可以拥有的池数。

此外,如果我们使用的是权威服务器,则包含所有NS记录的DNS答复以及A和AAAA胶应放在单个512字节数据包中。对于根服务器,这算出了13个地址。但这不包括胶水和IPv6,因此您要达到的数量会更少。

每个池应尽可能在地理上分布。如果您在欧洲有5台服务器,在Noth America中有5台服务器,并且有2个任播IP,则不会在每个大陆上创建一个池。您将欧洲的2个和北美的3个放入一个池中,其他5个放入另一个池中。

如果您有两个以上的任意播池,则可以让一台物理服务器暂时位于多个池中。但是,您绝对不应允许物理服务器同时位于所有池中。

可以将任意播和单播结合在一起,但是必须小心。如果您有两个池的IP,我不会合并。但是,如果您只使用一个单播IP,则也可以包含单播IP。问题在于,包括单播IP不会为您提供良好的延迟和负载平衡。

如果单播和任播都可以使用物理服务器,则您可能会冒着用户访问与主服务器和辅助服务器相同的服务器的风险,如果该服务器出现故障,则可能会失去访问权限。可以通过仅使用不在任播池中的服务器的单播地址或始终向用户提供两个单播地址来避免这种情况。

您添加到组合中的单播地址越多,发送到任播地址的查询就越少,就延迟和可伸缩性而言,从任播获得的收益也就越少。


您是否意味着实现可伸缩性的最佳方法是使用许多辅助单播地址(又称为设置ns1.domain,ns2.d,ns3.d ... ns300.d的旧方法)而不是使用任播?
Pacerier,2014年

@Pacerier不,我不是这个意思。我会在回答中阐明这一点。
卡巴斯德(Kasperd),2014年

+1。路由错误甚至可能导致您的单播陷入地狱(死胡同)。有另外一个单独的地址意味着您有多个“门票”;)
TomTom 2014年

2
+1我想补充一点,在第二个地址中添加假IP听起来像一个可怕的主意
2014年

1
@Pacerier确实通过使用多个单播地址来实现负载平衡。问题是延迟,客户端根本不知道哪些IP位于附近,哪些IP位于远处。它也无法扩展到最大。如果希望A和AAAA粘合记录适合512字节,则只能使用大约5台服务器。将一个单播和多个单播组合在一起对于负载均衡来说是个问题,因为单播地址上的负载可能会比单播地址上的负载更多。
卡巴斯德(Kasperd),2014年

4

最佳做法是使用至少两个来自不同前缀的地址,并在两个不同的TLD下给它们命名。如果需要,这两个地址都可以是任播。仅拥有一个IP地址将给您单点故障。如果到该地址的路由不起作用(配置错误,任播实例无法正常工作,前缀被劫持等),则整个域将无法访问。

每个任播地址都至少需要/24IPv4或/48IPv6前缀才能在BGP中路由。在许多地方,较小(较长)的前缀通常在全局路由表中不被接受。

从来没有放一个假的IP地址作为DNS服务器。这将对解析器造成严重的延迟。


更糟糕的是,该“虚假” IP地址是其他人的地址。他们将收到查询。如果他们对所有这些流量感到烦恼,则可以发送具有较高TTL的答复以使其消失一会儿。
卡巴斯德(Kasperd)

@kasperd,不属于任何人的特殊保留 IP地址呢?
Pacerier,2014年

1
@Pacerier使用RFC 1918、4193或6598地址空间将限制危害。但这仍然会导致分辨率降低甚至失败。
卡巴斯德(Kasperd),2014年

3

RFC 1034仅声明您需要两个DNS服务器。这不是强制性要求,而是一项建议,因此请按照您的意愿去做。无论如何,如果您想要HA,则可以使用任播功能为2个DNS服务器分配相同的IP,并且当一台DNS服务器发生故障时,最终用户唯一会注意到的是,随着网络重新融合,连接暂时中断。

因此,总而言之,是的,使用任播足以满足RFC 1034的要求。


嗯,如果只需要一个IP地址,为什么Google会为其DNS服务器提供两个地址(8.8.8.88.8.4.4)?他们已经有任播信息,那么为什么不简单地提供一个地址8.8.8.8呢?
Pacerier 2014年

1
猜想我会说在网络融合期间不中断连接?因为他们是全球性的参与者,并希望确保其作用范围尽可能广泛,以消除任何可能的故障点?我不能完全肯定,但我知道,我们不能全谷歌:)
Reaces
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.