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

Pac*_*ier 9 networking domain-name-system routing ipv6 anycast

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

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

如果我们只使用一个 IP 地址,我们预计会面临哪些问题和错误

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

kas*_*erd 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 记录和 A 和 AAAA 胶水的 DNS 回复应该适合单个 512 字节的数据包。对于根服务器,这算出 13 个地址。但这不包括胶水和 IPv6,因此您达到的数量会更低。

每个池应尽可能在地理上分布。如果您在欧洲有 5 台服务器,在北美有 5 台服务器和 2 个任播 IP,则您不会创建一个跨越每个大陆的池。你把欧洲的 2 个放在一个池中,其中 3 个来自北美,另外 5 个放在另一个池中。

如果您有 2 个以上的任播池,您可以让一台物理服务器临时位于多个池中。但是你永远不应该允许一个物理服务器同时在所有池中。

组合任播和单播是可能的,但必须小心。如果您有两个池的 IP,我不会合并。但是,如果您只有一个任播 IP 可以使用,则还可以包含单播 IP。问题是包含单播 IP 不会给您提供良好的延迟和负载平衡。

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

您加入的单播地址越多,发送到任播地址的查询就越少,您从任播中获得的延迟和可扩展性优势就越少。

  • +1 我想补充一点,添加一个虚假的 ip 作为第二个地址听起来是一个可怕的想法 (2认同)