我们为我们的网站注册了一些用于DNS解析的名称服务器,这些名称服务器部署在多个数据中心。
我们目前的 DNS 解析策略是,根据客户端 IP 地址的不同,Name Server 会为同一个域名返回不同的 IP 地址。比如客户端 IP 地址来自北美,Name Server 就会返回一个 IP 地址,这个 IP 地址就是我们北美数据中心的 IP 地址。
但客户端 IP 地址有时并不是用户的真实 IP 地址。它可能是属于 ISP 或代理服务器的 DNS 的 IP 地址。另一方面,如果我们的一个数据中心发生故障,我们希望我们的名称服务器排除属于故障数据中心的 IP 地址。因此,我们希望可以为我们的 DNS 解析制定一个更动态的策略。有解决方案吗?
答案1
听起来你想要的是任播。这就是像 Google 这样的网站所使用的类型。你为所有网站设置一个地址(由 DNS 解析),然后让互联网路由协议 (BGP) 将用户引导到最近的(由路由协议)站点。如果某个站点出现故障,BGP 会自动将下一个最近的站点放入互联网路由表中。
典型的例子是8.8.8.8
DNS。它解析全球各地的不同位置,如果一个位置出现故障,它会转到下一个最近的位置。
答案不是 DNS,而是路由。
答案2
你需要的是确切地什么亚马逊 Route53DNS 服务优惠:
基于延迟的路由- 将最终用户路由到提供最低延迟的 AWS 区域。
地理 DNS- 根据最终用户的地理位置将最终用户路由到您指定的特定端点。
健康检查和故障转移- Amazon Route 53 可以监控您的应用程序以及 Web 服务器和其他资源的运行状况和性能。
... 和更多高级 DNS 功能。
你不必在 AWS 上托管您的网站以便能够使用 Route53,它将很乐意与部署在私有数据中心的服务协同工作。
除非你是 Facebook 或谷歌,否则定价也不应该成为问题,起价为每百万请求 0.40 美元(见定价详情)。
希望有帮助:)
答案3
我有这个想法并且已开始编写代码但却从未完成,因为这种需求首先就消失了。
DNS 服务器拥有其 LAN 上所有机器的主机名和 MAC 地址,以及访问这些机器的方法。当它收到对其所认识的机器的请求时,它会根据 MAC 地址向 IP 地址发送反向 ARP,并使用响应来构建 DNS 答案。
这和您要做的事情无关,但它说明了这一点。理论上,可以对 DNS 服务器进行编码,以执行您想要的任何新方案,将名称解析为 IP 地址。
实际问题似乎是如何获取客户的 IP 地址以决定将其发送到何处。这是一个小小的 XY 问题。您真正想要的是客户的 ISP 进行地理定位,您可以通过直接从发出请求的 IP 地址执行此操作来获得它,假设它不是 8.8.4.4 或其他 DNS 重定向服务。在我看来,DNS 重定向器的最佳解决方案是忽略该问题并进行自相关地理定位(即从 DNS 服务器尝试定位调用 IP 地址)并进行适当的重定向。请参阅此处了解如何进行地理定位:https://stackoverflow.com/questions/2574542/location-detecting-techniques-for-ip-addresses
您确实不希望在这里使用任播,而是希望使用更合理的东西。任播有一个令人讨厌的特性,那就是它可以在 TCP 流中间重新路由数据包,从而造成大规模混乱。
Ron Maupin 声称任播对于 TCP 来说是路由可靠的。以下是跟踪路由,显示了相反的情况:
3 cr1-rhe-a-be153.bb.as11404.net (174.127.183.14) 20.657 ms 20.763 ms 19.660 ms
4 cr1-che-b-be-2.as11404.net (192.175.29.161) 22.550 ms 23.562 ms 23.538 ms
5 * cr1-9greatoaks-hu-0-6-0-20-0.bb.as11404.net (192.175.28.108) 24.409 ms 38.083 ms
6 72.14.222.146 (72.14.222.146) 40.038 ms 39.106 ms 39.125 ms
7 108.170.242.225 (108.170.242.225) 37.930 ms 108.170.243.1 (108.170.243.1) 35.434 ms 108.170.242.225 (108.170.242.225) 33.694 ms
8 209.85.240.249 (209.85.240.249) 33.476 ms 108.170.232.65 (108.170.232.65) 31.683 ms 108.170.234.155 (108.170.234.155) 30.754 ms
9 google-public-dns-b.google.com (8.8.4.4) 30.491 ms 28.644 ms 25.718 ms
如果您尝试以显而易见的方式对上游 IP 地址进行地理定位,您会发现它们都在威奇托。这是不正确的,一个简单的物理演示就足够了。
到 8.8.4.4 的范围测量为 30 毫秒,其中前 18 毫秒是本地惩罚(跃点 3 是我的 ISP 的本地路由器)。我到威奇托的距离是 1297 英里。因此最短往返时间为 (1297 * 2 英里/225,000 公里/秒(玻璃中的光速)),即 18.55 毫秒。因此我应该不会在 28 毫秒内收到回复,但我在 25 毫秒内收到了回复。
数据包通过两条不同的 BGP 路由到达 Google。BGP 未选择最接近的路由。
答案4
您可以通过 DNS 任播和 RFC-7871 的某种组合来实现您的需要。