Active Directory 多站点。选择最近的 DC 进入 Linux/非 Microsoft 应用程序

Active Directory 多站点。选择最近的 DC 进入 Linux/非 Microsoft 应用程序

我在多站点环境中使用基于 Active Directory 的 ldap 时遇到问题。

基本上,我有几个不同的环境(站点),每个环境都有自己专用的一对域控制器服务器。每对域控制器都会与其他站点中的一对域控制器进行通信,以保持所有信息同步。

在每个环境中,我还有几个不同的 Linux 服务器(Web 服务器、应用程序服务器等),并且为了进行身份验证和授权,它们必须联系专用于其环境的正确域控制器。

我的问题是,我找不到方法来在这些服务器的配置中指定如何联系它们“最近的”域控制器。

到目前为止,我使用的 DNS A 记录domain.local会将每个域控制器返回到域中;问题是它还会返回不在正确站点中因此无法访问的域控制器。

我想到另一种方法是为每个站点创建一个引用正确 DC 的 CNAME 记录。

DC-Site1 CNAME 到 DC1 和 DC2
DC-Site2 CNAME 到 DC3 和 DC4
DC-Site3 CNAME 到 DC5 和 DC6
....

因此,使用该记录,DC-SiteX.domain.local我能够联系站点中正确的域控制器。

此解决方案的问题在于,我必须在配置服务器中硬编码它属于哪个站点。我不喜欢它,因为我可能会将服务器移动到不同的站点,而且我必须记住更新此配置。

通常您如何处理这种情况?

你对这个问题有优雅的解决方案吗?

答案1

Unix 服务器是否了解它们所在的站点?

AD 控制器是否已正确更新SRVDNS 记录(默认情况下会更新)?

例如,如果 unix 服务器知道位于 SITE1.EXAMPLE.ORG 中,它可以询问 AD 控制器在 SITE1 上启用了哪个 LDAP 服务器,方法如下:

ldapsearch -v -H "ldap:///dc%3Dsite1%2Cdc%3Dexample%2Cdc%3Dorg" [...]

SRV基本上它是对任何具有 LDAP注册的服务器进行 ldapsearch SITE1.EXAMPLE.ORG

host -t SRV _ldap._tcp.site1.example.org.

答案2

您是正确的,使用 domain.local 名称将返回域中所有域控制器的所有地址列表,但如果您尝试 ping domain.local(我的意思是您域的实际名称),DNS 必须返回本地域控制器的 IP 地址。

我不知道您的域控制器是否也充当 DNS 服务器,但如果是,请检查 DNS 服务器设置 -> 高级选项卡 -> 启用网络掩码排序复选框是否必须选中。

关于 CNAME,您可以为一台服务器创建多个 CNAME,但不能为多台服务器创建同一个 CNAME,因此您必须创建两个同名的 A 记录,指向本地域控制器的不同 IP。但在这种情况下,您还需要确保在高级 DNS 服务器设置中启用了路由,这样 DNS 服务器就会在服务器之间平衡查询。

谨致问候,谢尔盖

答案3

这是应用程序的责任。任何需要与 Active Directory 集成的应用程序都必须符合其工作方式。这包括按站点/位置偏好对要使用的域控制器进行优先级排序、选择合适的可运行域控制器,以及在发生错误时故障转移到另一个域控制器。

换句话说,该应用程序需要像 Windows 客户端一样运行。

答案4

这是一篇有点老的帖子,但我想向任何看到这篇文章的人提供以下信息。可以控制域控制器动态注册的 A 记录和 SRV 记录以及在哪些站点注册,并配置 SRV 记录权重和优先级。请参阅以下 Microsoft 文章: https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/76bc11f0-8bc2-4d6c-a643-328f479aae1b

相关内容