假设我已经使用 bird 在我的内部网络上设置了一对任播 DNS 服务器,它们只是在与我的核心路由器通信 OSPF。我在互联网上找到了这个并实现了它。
如果我将一个路径设置为比另一个成本更高的路径,亲爱的,我刚刚做了一个可爱的方法来进行故障转移,而不会导致我的客户在从他们的 resolv.conf 中的一个主机切换到另一个解析器时出现任何超时他们的resolv.conf。
但这对我来说还不够好。我想在我的 DNS 服务器之间分配我的负载。所以我将两者的成本设置为相同,因此路由器现在应该执行 ECMP 并将 50% 的请求发送到一个,将 50% 的请求发送到另一个。
但事实证明,我的企业将 TCP 用于我们 DNS 的很大一部分——假设我们有大量的 SRV 记录,并且我们使用 DNSSEC 因为我们很棒。
现在,我如何设置我聪明的任播设置来应对这样一个事实,即 TCP 请求需要 3 或 4 个数据包才能完成请求,现在这 3 个数据包中的一个总是会去到错误的路由器并获得 tcp 连接重置。
那么,在这样的方案中,您可以只阻止无效会话的 RST 响应,不是吗?:) 或(更好的是),不要将其传递给服务:
——无效状态?
— 不行,换一个试试!
PS 是的,我真的很喜欢通过我在评论中给你的链接介绍“ TCP Anycast - 不要相信 FUD - nanog ”。;)
只需使用按流 OSPF ECMP 而不是按数据包就可以了,就像 NANOG 演示文稿所说的那样。
TCP 的 Anycast 只是长期 TCP 会话的一个潜在问题,而且我所知道的几乎每个 DNS 实现都只使用非常短暂的 TCP 会话。