我受客户委托,针对具有以下要求的场景设计一个可行的 Active Directory(简化后,实际上要糟糕得多):
- 有一个用于客户端系统的子网。
- 有一个用于服务器系统的子网。
- 两个网络没有连通。
- 每个服务器应该有两块网卡,一块在服务器网络上,另一块在客户端网络上。
- 客户端和服务器之间的流量应该仅在客户端的网络上流动。
- 服务器之间的流量应该仅在服务器的网络上流动。
- 这也适用于域控制器。
不用说,这与 Active Directory 使用 DNS 定位域控制器的方式不太相符;任何可能的方法都可能导致以下情况之一:
- DC 在域 DNS 中注册其“客户端”IP 地址;客户端将使用该地址与他们通信,服务器和 AD 复制流量也将如此。
- DC 在域 DNS 中注册其“服务器端”IP 地址;服务器将使用该地址与它们通信,并且复制流量将在该网络上流动,但客户端将无法访问它们。
- DC 将注册两个都域 DNS 中的 IP 地址;任何人都无法猜测任何系统将如何访问这些地址。
当然,这些要求完全是疯狂的,不可能同时满足所有要求,除非使用疯狂的解决方案,例如在两个网络上拆分 DNS 服务并手动填充其 SRV 记录(argh)或让服务器使用 DNS 定位 DC,客户端使用 WINS 定位 DC(double-argh)。
我想到的解决方案是在“服务器”网络上安装两个 DC,在“客户端”网络上安装两个 DC,定义两个 AD 站点,并仅使用 DC 复制流量跨越两个网络之间的边界。这将仍然需要一些 DNS 调整,因为每个服务器都会仍然有两张网卡(除了两个服务器端 DC 和纯后端服务器),但它至少有一些工作的机会。
除了尽快逃离之外,还有什么建议吗?
答案1
首先我要说的是,我同意其他许多人的意见——要么说服客户,要么逃跑。
但是,考虑到您列出的要求(还有许多未列出的要求),我至少可以想到(并部分测试)实现这一目标的基础。
有几个具体方面需要考虑。
- Active Directory 域服务复制
- 客户端/成员服务器的 DC 定位器进程
- 非 AD DS 服务的名称解析和流量
第一点和第二点有很多共同之处 —— 总的来说,我们在这方面都听从微软的安排,并且必须在微软的 AD DS 流程范围内工作。
第三,我们还有一点发挥空间。我们可以选择用于访问服务的标签(文件、数据库实例等)。
以下是我的建议:
构建您的域控制器 (DC)
- 可能至少有两个。
- 每个 DC 将有两个 NIC,每个 IP 网络/AD DS 站点一个 - 暂时称为 clt 和 srv。
- 仅有的现在在 srv 网络中的每个 DC 中配置一个 NIC。
正确配置 AD 站点和服务
- srv 站点和子网
- clt 站点和子网
- 取消选中从站点 -> 站点间传输 -> 右键单击“IP”中的“桥接所有站点链接”
- 如果 DEFAULTIPSITELINK 存在(或者您已重命名),则删除它,这样就不会配置站点链接。请注意,这对我来说是未知的——KCC 可能会将错误转储到目录服务事件日志中,指出两个站点(srv 和 clt)在不同时间间隔内未连接。但是,两个 DC 之间的复制仍将继续,因为它们可以使用同一站点中的 IP 相互联系。
在 AD DS 集成 DNS 中配置附加区域
- 如果您的 AD DS 域是acme.本地,创建第二个启用动态更新的主 AD 集成区域,名为本地。
在 DC 上配置第二个 NIC
- 这些 NIC 将是 clt 网络/站点中的 NIC。
- 设置他们的 IP
- 这是神奇的部分-- 适配器属性 -> IPv4 属性 -> 高级 -> DNS 选项卡 -> 将此连接的 DNS 后缀设置为本地-> 勾选注册此连接... -> 勾选使用此连接的 DNS 后缀... -> 一路确定。
- ipconfig /registerdns
- 这将在 clt.acme.local 区域中注册 clt NIC IP——为我们提供一种方法来控制稍后使用哪个 IP/网络。
配置成员服务器 NIC
- clt 站点中的成员服务器 NIC 也必须具有其 DNS 后缀和复选框,如上所示。
- 这些设置可以与静态和 DHCP 一起使用,没关系。
在站点中配置 DNS [stub] 解析器行为
- DC -> 配置 DC srv NIC 以使用其自身和其他 DC srv NIC IP。将 DC clt NIC DNS 留空(但需要静态 IP)。(DC DNS 服务器仍将听在所有 IP 上默认启用)。
- 成员服务器 -> 配置成员服务器 srv NIC 以使用 DC srv 站点 IP。将成员服务器 clt NIC DNS 留空(可以使用静态 IP)。
- 客户端/工作站 -> 配置 DNS(通过 DHCP 或静态)以使用 DC 的 clt NIC IP。
适当配置映射/资源
- 当服务器互相通信时,请务必使用 .acme.local-> 将解析为 srv 网络 IP。
- 当客户端与服务器通信时,请务必使用 .clt.acme.local -> 将解析为 clt 网络 IP。
我在说什么?
- 由于 DC 可以相互解析并相互连接,因此 AD DS 复制仍将发生。acme.local 和 _msdcs.acme.local 区域将仅包含 DC srv NIC IP 的 AD DS 复制将仅在 srv 网络上发生。
- 成员服务器和工作站的 DC 定位器进程将正常运行——尽管在站点未知的情况下,各种 AD DS 进程的各个部分可能会出现延迟,但如果返回多个 DC IP,它们将不断尝试、失败并继续运行,直到其中一个能正常工作。对 DFS-N 的影响也尚未完全评估——但仍将正常运行。
- 如果您按照前面所述使用 .acme.local 和 .clt.acme.local 标签,非 AD DS 服务将正常运行。
我还没有完全测试过这一点,因为它相当荒谬。 然而,这个(哇,很长的)答案的重点是开始评估它是否可能 - 而不是是否应该这样做。
@评论
@Massimo 1/2 不要混淆 acme.local 区域中的多个 AD DS 站点,因此不要混淆 acme.local 区域中这些站点中的 DC 填充的 SRV 记录与 clt.acme.local 区域中所需的 SRV 记录。客户端的主 DNS 后缀(以及它们加入的 Windows 域)仍将是 acme.local。客户端/工作站只有一个 NIC,主 DNS 后缀可能来自 DHCP,设置为 acme.local。
clt.acme.local 区域不需要 SRV 记录,因为它不会用于 DC 定位器进程。它仅供客户端/工作站使用 clt 网络中的成员服务器 IP 连接到成员服务器的非 AD DS 服务。AD DS 相关进程(DC 定位器)不会使用 clt.acme.local 区域,而是使用 acme.local 区域中的 AD DS 站点(和子网)。
@马西莫 3
clt 和 srv AD DS 站点都会有 SRV 记录 - 只是它们会存在于 acme.local 区域中 - 请参阅上面的注释。clt.acme.local 区域不需要 DC 相关的 SRV 记录。
客户端将能够很好地找到 DC。客户端 DNS 服务器指向 DC 的 clt IP。
当客户端上的 DC 定位器进程启动时
- 如果客户端知道其站点,则 DNS 问题将是 _ldap._tcp.[site]._sites.dc._msdcs.acme.local SRV。这将返回已注册 SRV 记录的站点特定 DC。
- 如果客户不是知道其站点,DNS 问题将是 _ldap._tcp.dc._msdcs.acme.local SRV。这将返回所有 DC。客户端将尝试绑定到 DC 的 LDAP,直到找到一个响应的 LDAP。当客户端找到一个时,它会执行站点查找以确定客户端的站点,并将该站点缓存在注册表中,以便将来的 DC 定位器实例更快地发生。
@马西莫4
呃,好主意。我认为有两种方法可以解决这个问题。
- 影响较小的(与下面的 2 相比)是在 hosts 文件中创建一个条目在客户端/工作站上对于 dc1.acme.local 和 dc2.acme.local 指向 DC 的 clt NIC IP。
或者
- 在每个 DC 上的 netlogon.dns 文件中手动创建必要的 SRV 记录。这可能会对服务器网络产生一些影响。如果配置了此功能,成员服务器有时可能会与 clt 网络上的 DC 进行通信。
总而言之,这一切都不尽如人意,但这不一定是最终目标。也许客户只是在测试你的技术能力。把它放在他们的会议桌上,告诉他们“这样就可以了,但我要向您收取 4 倍于我正常费用的配置和支持费用。您可以通过执行 [正确的解决方案] 将其降低到 1.5 倍于我正常费用 - 0.5 倍的 PITA 费用。”
如前所述,我的建议是说服别人或逃跑。但这确实是一个有趣的小练习。:)
答案2
最后我选择了两个站点的解决方案:
- 两个 DC 用于“服务器”网络,两个 DC 用于“客户端”网络。
- 两个 AD 站点,一个用于“服务器”网络,一个用于“客户端”网络。
- “服务器”网络中的 DC 只会有一个 NIC(客户端根本不会与它们对话),所以这很容易。
- “客户端”区域中的 DC 将有两个,但只会在 DNS 中注册其客户端的 DC。
- 服务器将与他们的 DC 对话,客户端将与他们的 DC 对话。
当然,这意味着在两个网络之间启用复制流量;“客户端”网络中的 DC 将仍然在“服务器”网络上有一个 NIC,但由于它不会在 DNS 中注册,该网络中的 DC 将使用其客户端 IP 地址联系它们;因此该 NIC 实际上完全无用,并且需要打开一些防火墙端口。唯一的其他选择是破坏 DC 的hosts
文件,但我们希望可以避免这种情况。
好吧,我认为这是可以做的最好的事情,可以满足尽可能多的(疯狂的)要求。
谢谢大家的建议:-)
答案3
首先,当我们为客户提供服务时,我们应该问他们的需求是什么。让客户明白他们的复杂程度是不必要的。
- 客户数量是多少?
- 这都是内部流量吗?
- 域的功能级别是什么?
- 是否正在使用 TLS 协议?
使用吻方法 - 将创建两个 VLAN“SVR”和“CLT”,启用 SSL/TLS 并称之为一天......