IIS 7 - 401.2 错误(主机名错误,而非 IP 地址错误)

IIS 7 - 401.2 错误(主机名错误,而非 IP 地址错误)

我遇到了网络上 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.32http://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 用户,您只需使用您用于应用程序池身份的任何内容进行测试。

相关内容