我遇到了网络上 IIS 7 应用程序的问题。问题如下:
如果用户通过 IP 地址浏览该网站(http://172.16.10.32/site
),则应用程序可以正常加载,不会出现任何错误,非常值得。
如果同一用户通过主机名 ( http://dms-live/site
) 浏览该网站,则会显示“Internet Explorer 无法显示该网页”消息。深入挖掘后会发现实际错误代码为 401.2 - 未经授权。
更多信息:
这是一个内部网站,没有任何外部访问权限
Internet Explorer 由组策略设置,将站点置于 Intranet 区域
该应用程序允许“匿名身份验证”(使用 IUSR)、“ASP.NET 模拟”(设置为经过身份验证的用户)、“基本身份验证”(未指定默认域或领域)和“Windows 身份验证”(启用内核模式身份验证)
用户可以 ping dms-live,它返回正确的 IP 地址 172.16.10.32
用户可以毫无问题地浏览
http://172.16.10.32
和http://dms-live
查看默认的 IIS 7 启动画面主机名“dms-live”是 DNS 中指定的指向 172.16.10.32 的附加 A 记录
服务器的实际主机名是“accserver16”。用它代替“dms-live”会产生完全相同的结果(401.2 错误)
使用 FQDN 代替短主机名也会产生相同的结果(401.2 错误)
该网站与 dms-live、accserver16 和 172.16.10.32 以及相关的 FQDN 有绑定
我们的网络在两个林中有两个域,域 A 在林 A 中,域 B 在林 B 中。所有用户和工作站都在域 A 中,IIS 服务器在域 B 中。域 A 和域 B 之间配置了双向信任。
两个域名都有自己的 DNS 服务器
这个问题最近才出现,是在进行了一次非常具体的 DNS 更改之后。最初,域 B 的 DNS 区域由域 B DNS 服务器托管,并设置了条件转发器条目以转发来自域 A DNS 服务器的请求。为了提高弹性,进行了更改,以便域 A DNS 服务器为域 B 区域设置了辅助正向和反向区域。
辅助区域加载正常,正确复制更改并将正确的 DNS 记录返回给 ping 和 nslookup 请求。
另一个奇怪的信息是,网络上的一些 PC 可以http://dms-live/site
毫无问题地加载。似乎没有多少规律可以说明哪些 PC 可以工作,哪些不能。
这不是用户的问题(同一个用户在两台不同的电脑上不一定会得到相同的结果)、浏览器的问题(已经用 IE8 和 IE9 测试过,结果不一致)或操作系统的问题(问题似乎与使用 Windows XP 还是 Windows 7 无关)。
到目前为止尝试过的故障排除:
- 一次启用一种身份验证形式
- 禁用内核模式身份验证
- 为 DMS-LIVE 和关联的 FQDN 设置 SPN 记录
- 尝试之间清除 IE 缓存
- 重新启动电脑
- 使用 ipconfig /flushdns 刷新 DNS 缓存
- 将“DisableStrictNameChecking”注册表项设置为 1 并重新启动服务器
- 将 ACCSERVER16$ 和 IIS_IUSRS 添加到应用程序目录的 NTFS 权限
在无法加载页面的 PC 上,Fiddler 显示发出了一个请求,该请求返回了 401 错误。在成功加载页面的 PC 上,Fiddler 显示相同的 401 错误,然后是 302,然后是 200。
如果删除辅助区域并重新放入条件转发器条目,问题就会消失。
似乎出于某种原因,当使用辅助区域而不是条件转发器来解析不同林中的主机名时,某些 PC 的身份验证会失败,但并非所有 PC 都会失败 - 但我不知道为什么会出现这种情况。有人能帮忙吗?
答案1
经过大量的挖掘,我终于找到了问题的原因。
我们在注意到其他几个相关问题后找到了这个问题。当尝试浏览 accserver16 上的共享时,用户将看到一个凭据框和以下错误消息:
系统检测到可能存在危害安全的企图。请确保您可以联系对您进行身份验证的服务器。
填写适当的凭证是可行的,但这不是必要的。
此外,当尝试验证林 B 上的域控制器的信任时,显示以下错误消息:
在域 domainb.local 的 Active Directory 域控制器 \accserver04.domainb.local 到域 domaina.local 上重置的安全通道 (SC) 失败,并出现错误:当前没有可用的登录服务器来处理登录请求。
这表明无法找到其他林中的域控制器是导致问题的原因。
在 DNS 中,每个域的正向查找区域下都有一个名为“_msdcs”的委派区域。该区域应包含指向该域上的名称服务器的静态 NS 记录。
域 A 和域 B 上的配置均不正确。域 A 上列出的唯一名称服务器已被降级,而域 B 上它指向的服务器甚至已不再存在于网络上。
显然,这不会对内部 DNS 查询造成问题,只要使用条件转发,也不会影响森林之间的查询。然而,一旦用辅助区域取代条件转发,森林之间的信任就会瓦解。
修复每个域上的 _msdcs 委派区域中的名称服务器记录以指向正确的名称服务器,从而解决了该问题。
答案2
我在这里与某人讨论过同样的问题:http://forums.iis.net/p/1175219/2023646.aspx。但我们尚未完全解决此问题,我们仍在被动地努力解决。在他们的情况下,使用 A 记录而不是 CNAME 解决了此问题(临时修复),但由于您已经在使用 A 记录,因此这对您不起作用。
对您来说,如果您为域名创建主机记录会怎么样?这将使 AD 基本不受影响。此外,尝试使用 IE Intranet 区域进行试验,并尝试使用其他浏览器进行访问。
尽管您确实提到过您设置了记录,但该问题可能与 SPN 有关。
既然您提到它在某些计算机上有效但在其他计算机上无效,那么也请查看计算机 SPN 设置和信任设置。
我假设失败的页面受密码保护?如果没有,那么您可以将身份验证/匿名设置为始终作为应用程序池身份运行。这样就不会使用 IIS_IUSRS 用户,您只需使用您用于应用程序池身份的任何内容进行测试。