![使用 Microsoft DNS 根据请求子网做出响应](https://linux22.com/image/799918/%E4%BD%BF%E7%94%A8%20Microsoft%20DNS%20%E6%A0%B9%E6%8D%AE%E8%AF%B7%E6%B1%82%E5%AD%90%E7%BD%91%E5%81%9A%E5%87%BA%E5%93%8D%E5%BA%94.png)
在我们的企业 Windows Active Directory 环境中,我们有 50 多个子网分散在广阔的地理区域。我们在每个站点都有一个系统,通过提供中央驱动程序存储、中央软件存储、SEP 定义文件等来支持该站点。数据使用我们创建的黑客机制在不同的机器之间复制。我们不能使用 DFS,因为组织不会在大多数地方资助 Windows 服务器许可证。因此,大多数“服务器”实际上是 Windows 7 机器。
我们想要做的是创建一个 DNS 记录(我们称之为 SUPPORT),其中包含每个站点服务器的 IP 地址,并让 DNS 服务器根据请求来源的子网做出响应。此部分大部分默认工作。从 Windows Vista 开始,终端机器将使用子网优先级,这意味着它将从 IP 列表中挑选与其位于同一子网中的任何 IP。这很棒。
然而,我们面临两个问题:
- Microsoft 默认假设 C 类子网。我不知道这种情况是否仅在服务器按子网优先级顺序提供记录时发生,或者在客户端查询记录后进行优先级排序时是否也会发生这种情况。我认为这只会在服务器端发生,因为服务器无法确定请求 IP 位于哪种子网中,而客户端显然应该知道。但我不确定。客户端会像 DNS 服务器一样假设 C 类子网吗?如果是这样,如何在计算机或 DNS 服务器上定义非 C 类子网?
- 我们有一些物理站点,它们在同一个站点有多个子网。但是这些站点的所有子网彼此之间都是千兆位的,因此每个站点只有一台服务器。换句话说,在某些情况下,我们有一个支持多个子网的单台服务器。当请求来自某个子网时,我们如何配置机器或 DNS 服务器以使用某个 IP 进行响应?
最后两个问题是:
- 客户端会像 DNS 服务器一样假设 C 类子网吗?如果会,那么如何在机器或 DNS 服务器上定义非 C 类子网?
- 当请求来自某个子网时,我们如何配置 DNS 服务器以某个 IP 进行响应?
提前致谢!
答案1
您的要求超出了 Windows 中实现的 DNS 重新排序/子网优先级所能实现的范围。客户端无法仅通过 DNS 信息推断哪个主机“最近”。
尽管如此,您还是应该认真考虑使用 Dfs。对 Dfs 共享的访问是站点感知的,您可以根据需要定义站点(包括可变位掩码和将多个子网分组到一个站点)。请注意,Dfs 并不意味着您的所有 Dfs 共享都必须指向 Windows 服务器。目的地能是提供 SMB 共享的所有内容,包括 Windows Professional 和 Samba 安装或 NAS 设备。Windows Server 要求仅适用于持有 DFS 命名空间/根共享的服务器 - 您不一定(至少在技术上)需要在每个站点上都有一个。
此外,由于您使用的是 Windows 7,您可以考虑使用分支缓存赞成您的“黑客拼凑机制”复制。您描述的场景听起来很像 BranchCache 的用途。但是,如果您的环境中主机运行 Windows Vista 和更早版本的 Windows,这可能不是一个选择。
如果你决心通过 DNS 解决此问题,你可以考虑使用支持DNS 视图(BIND 会这样做)并且只返回“最近”的服务器作为特定客户端的响应。但是,如果您使用中间解析器,这将需要做很多不必要的工作,而且不可靠,因此在大多数情况下,Dfs 方法应该受到青睐。