如何使用 DNS 返回地理位置本地的 IP 地址?

如何使用 DNS 返回地理位置本地的 IP 地址?

我们在全球设有多个办事处,但我们的数据中心主要位于两个中心位置(北美和欧洲)。各个办事处之间的延迟相对较高,因此我们尝试将服务托管在离用户最近的位置(即加拿大员工在美国而不是欧洲使用 Exchange 服务)。

这种设置在大多数情况下效果很好。使用 Active Directory、Exchange 或 DFS 等服务时,客户端依靠 AD 中现有的站点信息来查找最近的位置。

现在,我们有一个请求,要求使用一个通用的 DNS 名称来访问在北美和欧洲托管的某些 Web 服务。以前,我们使用单独的 DNS 名称(na-service.domain.local 或 eu-service.domain.local),但这对我们的最终用户来说很麻烦。

目前,我们所有的内部 DNS 都托管在装有 Microsoft DNS 的 Windows 2003 和 2008 服务器上。有没有办法将 Microsoft DNS 服务配置为仅响应具有“本地”IP 地址的请求?我知道配置多个 A 记录将导致循环响应,这并不理想。我们还可以在每个位置使用主区域并仅输入本地 IP 地址,但我们有数百个其他 DNS 条目需要手动复制到每台服务器。

如果无法使用 MS DNS 实现此目的,还有其他低成本替代方案吗?我知道 F5 Networks 有产品可以处理此问题,但费用相当高。

答案1

您可能对 Microsoft DNS 服务器中的“子网优先级”功能有些好感。它是否对您有帮助取决于您的子网的寻址方式以及您的地理“本地”服务器的寻址方式。此功能在 Windows Server 2003 和 2008 中默认启用。

我建议你仔细阅读一下这个功能。看看http://technet.microsoft.com/en-us/library/dd197495(WS.10).aspx在“子网优先级”标题下。

BIND 中的“查看”功能可能也能满足您的要求,但您需要部署并行 DNS 基础设施和大量配置。

如果您可以控制基于 Web 的应用程序,则可以做一些非常规的事情,例如嵌入一些 Javascript 来“检测”用户的位置并在客户端重定向他们。这有点不切实际,但它可能会满足您的需要。

答案2

我在工作中曾被问过几次这个问题,尽管它从未付诸实践,所以对我来说这只是纯粹的理论。

我能想到的最佳解决方案(黑客?)是拥有一个不被复制的公共 DNS 子域。然后只需将本地服务器放入该设置中。因此,您将得到如下结果:

NA DNS 服务器
service.domain.local
web01.service.domain.local -> 10.10.10.200

欧盟 DNS 服务器
service.domain.local
web01.service.domain.local -> 10.200.200.200

因此,连接到 web01.service.domain.local 的客户端将从其默认 DNS 服务器获取服务的本地 IP。您可以让它们在 EU 和 NA 内复制,但不要在 EU 和 NA 之间复制区域。

答案3

正如先前的回答所述,BIND 的视图看起来就像您想要的那样。它允许名称服务器向您定义的客户端组呈现同一名称服务器的不同配置。

可以通过单独的 IP 地址或前缀(如 10.10.1.192/26)来定义组。希望您的欧盟和美国主机可以通过这种方式区分。

很好的附带好处:您的两台服务器可以(几乎)完全相同地配置 BIND,从而可以充当彼此的故障转移。

理解 Views 的一个好方法是,它是 DNS 服务器版本的虚拟化。某种程度上是这样的。

BIND 可以从 www.isc.org 免费获取。

答案4

解决方案是否必须通过 DNS 来实现?如果不是,这听起来像是IP任播。 看这个问题欲了解更多详情,但简而言之,它是一种网络架构,允许您从多个位置通告相同的 IP 地址,客户端将路由到“最近”(从网络成本角度来看)的 IP 实例。这样,您就可以简单地拥有一个全局 VIP(虚拟 IP),供您的 DNS 记录指向。

相关内容