DNS 服务器已使用任播。添加更多 IP 是否会增强可扩展性?

DNS 服务器已使用任播。添加更多 IP 是否会增强可扩展性?

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

如果是这样,为什么我们仍然需要多个 DNS 服务器 IP 地址?如果我们已经部署了任播,它是否真的可以增强冗余度(提高可用性)?还是这只是一个神话?

我们可能会遇到哪些问题和错误如果我们只使用一个 IP 地址呢?

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

答案1

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

通常,冗余最困难的问题不是某些部件完全失效,而是部件的行为发生错误,虽然仍然能够通过健康检查,但实际上无法正常运行。

我见过一个任播 DNS 设置,其中 DNS 服务器发生故障,但数据包仍会路由到该 DNS 服务器。负责通告前缀的程序可能根本不知道 DNS 服务器已发生故障。

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

此类递归解析器需要同时具有用于接收客户端查询的任播地址和用于查询权威 DNS 服务器的单播地址。但如果单播地址出现故障,它很容易看起来足够健康,仍会路由查询。

任播是实现可扩展性和减少延迟的绝佳工具。但就冗余性而言,它不应独立存在。

然而,多个冗余任播池是提高可用性的好方法。一个众所周知的例子是 8.8.8.8 和 8.8.4.4。这两个都是任播地址,但它们永远不应路由到同一个物理 DNS 服务器(假设 Google 做得很好)。

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

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

此外,如果我们谈论的是权威服务器,那么包含所有 NS 记录以及 A 和 AAAA 胶水的 DNS 回复应该可以放在一个 512 字节的数据包中。对于根服务器,这相当于 13 个地址。但这不包括胶水和 IPv6,因此您达到的数字会更低。

每个池应尽可能地分散在各个地理区域。如果您在欧洲有 5 台服务器,在北美有 5 台服务器,并且有 2 个任播 IP,则您无需创建跨各大洲的池。您可以将来自欧洲的 2 台服务器放入一个池中,将来自北美的 3 台服务器放入另一个池中,其余 5 台服务器放入另一个池中。

如果您有超过 2 个任播池,您可以让一个物理服务器暂时位于多个池中。但您绝不应该允许一个物理服务器同时位于所有池中。

可以将任播和单播结合起来,但必须小心谨慎。如果您有两个池的 IP,我不会将它们结合起来。但如果您只有一个任播 IP 可以使用,那么同时包含单播 IP 可能更有意义。问题是,包含单播 IP 不会给您带来良好的延迟和负载平衡。

如果物理服务器同时通过单播和任播提供,则可能会出现用户访问同一台服务器作为主服务器和辅助服务器的风险,如果服务器发生故障,则无法访问。可以通过仅使用不在任播池中的服务器的单播地址或始终为用户提供两个单播地址来避免这种情况。

您放入的单播地址越多,发送到任播地址的查询就越少,并且您从任播中获得的延迟和可扩展性方面的好处就越少。

答案2

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

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

绝不曾经输入虚假的IP地址作为DNS服务器。这将导致解析器严重延迟。

答案3

RFC 1034 仅规定您需要两台 DNS 服务器。这不是强制性要求,而是一项建议,因此您可以按照自己的意愿进行操作。无论如何,如果您想要 HA,可以使用任播为您的两台 DNS 服务器分配相同的 IP,当一台 DNS 服务器发生故障时,您的最终用户唯一会注意到的就是网络重新收敛时出现短暂的连接中断。

所以总而言之,使用任播就足以符合 RFC 1034 的要求。

相关内容