请耐心听我说,我是一名软件开发人员,对 Active Directory 和 Windows Server 域了解甚少。
我正在运行 .NET MVC 内联网应用程序互联网信息服务(Windows Server 2016 标准版) 使用 Windows 身份验证 (协商,NTLM,按顺序排列)。我们的域使用多个域控制器(我已阅读这个答案检查为什么需要多个 DC,并且不再有“主”和“备份”DC 的概念)。昨天,在一些域控制器迁移过程中,我们的用户无法对应用程序进行身份验证。我被告知,在出现身份验证问题时,IIS/应用程序使用的“默认”域控制器在迁移过程中停机了一段时间,并且 IIS 没有联系域中的任何其他 DC。
我们的应用程序中没有域控制器的硬编码 IP 地址或主机名。那么 IIS/应用程序如何确定它必须使用哪个 DC 进行 Windows 身份验证?
我可以在应用程序或 IIS 中的某个位置更改或配置 IP 地址吗?最重要的是,我可以配置任何其他 DC 的 IP / 主机名以用作备份,以便将来不会再次发生这种情况吗?
我之前在 Stacked Overflow 上问过这个问题,他们告诉我这与编程无关,并把我的请求重定向到了 Server Fault。所以我认为我无法解决任何代码方面的问题。虽然我不是 AD 专家/域管理员,但我仍然愿意学习新知识并积累该领域的经验。这肯定会对我未来的开发生涯有所帮助。
如果您需要更多信息,请随时询问。
先感谢您。
答案1
这是一个很好的问题,我不 100% 确定 IIS 是如何做到这一点的,但这里有一些信息可能会对你有所帮助。
通常,根据站点和服务配置选择站点中的 Active Directory DC。客户端将尝试使用 DNS 解析到 domain.com 来查询域。由于域上的所有 DC 通常用作域 DNS 上的循环 NS 记录,因此将选择一个随机 DC 并对其进行 ping。然后,该 DC 将检查站点和服务中的子网列表,并将客户端与分配给该子网的站点进行匹配。选择站点后,通常至少有两个 DC 可供选择。我不确定如何选择站点中的特定 DC,但我认为这是基于负载或循环。一旦系统从此过程中提取该 DC,它往往会坚持使用该 DC 进行将来的身份验证,直到发生错误并强制使用新的 DC。这可能是您遇到的问题。IIS 加载了特定的 DC,即使该 DC 不再可用,它仍在尝试查询它。重置进程或 Web 服务器将清除缓存的身份验证。
令我惊讶的是微软没有更强大的故障转移方法,但似乎许多其他人也看到了类似的问题:https://community.spiceworks.com/topic/407295-webserver-with-domain-authentication-doesn-t-failover-when-one-dc-is-gone
我会仔细检查您的 IIS 服务器是否设置为使用多个 DC 作为 DNS 源,以及您的站点和服务子网和站点是否已正确设置。我还将调查 IIS 设置使用的各种身份验证方法,看看是否有另一种更符合您的需求的方法。
仔细检查其他 DC 是否在线且运行正常。我遇到过这样的情况:我假设站点中的所有 DC 都正常运行,但重新启动一个 DC 导致站点失败,结果证明我错了。可能是 C: 驱动器已满,或者服务无法正常启动。一个常见问题是 DC 设置为使用自身作为主 DNS,而 AD 在 DNS 服务之前启动,导致其上的 DNS 和 AD 失败。解决方法是将 DC 指向其对等体作为主域控制器。