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