任播 DNS——如何处理 TCP DNS 请求?

任播 DNS——如何处理 TCP DNS 请求?

假设我使用 bird 在内部网络上设置了一对任播 DNS 服务器,它们只是通过 OSPF 与我的核心路由器通信。我发现在互联网上并实现了这一目标。

如果我设置一个比另一个具有更高成本路径,那么太好了,我刚刚做了一个可爱的方法来进行故障转移,而不导致我的客户端在从他们的 resolv.conf 中的一个主机切换到他们的 resolv.conf 中的另一个解析器时出现任何超时。

但这对我来说还不够好。我想在我的 DNS 服务器之间分配负载。因此我将两者的成本设置为相同,这样路由器现在应该执行 ECMP,并将 50% 的请求发送给一个,将 50% 的请求发送给另一个。

但事实证明,我的企业很大一部分 DNS 都使用 TCP——假设我们有大量的 SRV 记录,而且我们使用 DNSSEC,因为我们很棒。

现在,我该如何设置我的智能任播设置来应对这样的事实:TCP 请求需要 3 或 4 个数据包才能完成请求,而现在这 3 个数据包中的一个总是会发送到错误的路由器并重置 TCP 连接。

答案1

好吧,在这样的方案中,你可以阻止无效会话的 RST 响应,不是吗?:) 或者(更好的是),不要将其传递到服务中:

— 无效状态?

— 不行,试试其他

PS:是的,我真的很喜欢演示”TCP 任播 - 不要相信 FUD - nanog“通过我在评论中给你的链接。;)

答案2

只需使用每个流的 OSPF ECMP 而不是每个数据包,就可以了,就像 NANOG 演示所说的那样。

TCP 的任播仅对长寿命 TCP 会话而言是一个潜在问题,而且我所知道的几乎每个 DNS 实现都仅使用非常短暂的 TCP 会话。

相关内容