IIS 7 – 401.2通过主机名错误,但不通过IP地址

我遇到了我们的networking上的IIS 7应用程序的问题。 问题如下:

如果用户通过IP地址( http://172.16.10.32/site )浏览该站点,则该应用程序加载正常,没有错误,并且完美。

如果同一用户通过主机名( http://dms-live/site )浏览到该站点,则显示“Internet Explorer无法显示该网页”消息。 挖掘更深的结果在实际的错误代码401.2 – 未经授权。

一些更多的信息:

  • 这是一个没有任何外部访问的内部网站

  • Internet Explorer由组策略设置将站点放置在Intranet区域中

  • 该应用程序允许“匿名身份validation”(使用IUSR),“ASP.NET模拟”(设置为authentication用户),“基本身份validation”(不指定默认域或领域)和“Windows身份validation”(启用内核模式身份validation)

  • 用户可以ping dms-live,返回正确的IP地址172.16.10.32

  • 用户可以浏览到http://172.16.10.32http://dms-live而不会出现问题,并可以看到默认的IIS 7启animation面

  • 主机名“dms-live”是在DNS中指定的额外的Alogging,指向172.16.10.32

  • 服务器的实际主机名是“accserver16”。 使用这个来代替“dms-live”给出了完全相同的结果(401.2错误)

  • 使用FQDN而不是简短的主机名也给出相同的结果(401.2错误)

  • 该网站已绑定到dms-live,accserver16和172.16.10.32,以及相关的FQDN

  • 我们的networking在两个森林中有两个域,即森林A中的域A和森林B中的域B.所有用户和工作站都在域A中,IIS服务器在域B中。域A和域之间configuration了双向信任B.

  • 这两个域都有自己的DNS服务器

这个问题最近才出现,在一个非常具体的DNS更改之后。 域B的DNS区域最初由域B DNS服务器托pipe,并设置了条件转发器条目来转发来自域A DNS服务器的请求。 为了提高永续性,已更改此域,以便域A DNS服务器具有为域B区域设置的辅助正向和反向区域。

辅助区域加载正常,正确地复制更改并返回正确的DNSlogging以ping和nslookup请求。

还有一点奇怪的信息 – networking上的一些电脑能够毫无问题地加载http://dms-live/site 。 个人电脑的工作模式似乎没有多大的作用。

这不是由用户决定的(两台不同PC上的同一用户不一定会得到相同的结果),浏览器(这已经用IE8和IE9testing,结果不一致)或操作系统(问题似乎与Windows XP或Windows 7正在使用)。

到目前为止,

  • 一次启用一种forms的身份validation
  • 禁用内核模式身份validation
  • 为DMS-LIVE和关联的FQDN设置SPNlogging
  • 在尝试之间清除IEcaching
  • 重新启动电脑
  • 用ipconfig / flushdns刷新DNScaching
  • 将“DisableStrictNameChecking”registry项设置为1并重新启动服务器
  • 将ACCSERVER16 $和IIS_IUSRS添加到应用程序目录的NTFS权限

在无法加载页面的PC上,Fiddler显示发出了一个返回401错误的请求。 在成功加载页面的PC上,Fiddler显示了相同的401错误,然后是302,接着是200。

如果删除次要区域并且条件转发器条目恢复,则问题将消失。

看起来好像出于某种原因,当使用辅助区域而不是有条件的转发器来parsing不同森林中的主机名时,对于某些电脑(但不是全部),身份validation失败 – 但为什么这种情况我不知道。 谁能帮忙?

经过大量的挖掘,我终于find了问题的原因。

我们注意到其他一些相关的问题后,我们对其进行了追踪。 当尝试浏览到accserver16上的共享时,用户将会看到凭证框,并显示以下错误消息:

系统检测到可能的危及安全的企图。 请确保您可以联系通过身份validation的服务器。

填写适当的凭据工作,但这不应该是必要的。

另外,当试图从林Bvalidation域控制器上的信任时,显示以下错误消息:

域domainb.local的Active Directory域控制器\ accserver04.domainb.local上的安全通道(SC)重置为域domaina.local失败,并显示错误消息:当前没有可用于login请求的login服务器。

这指出无法find其他林中的域控制器作为问题的原因。

在DNS中,在每个域的正向查找区域下,是一个名为“_msdcs”的委托区域。 这应该包含指向该域名服务器的静态NSlogging。

在域A和域B上,这个configuration不正确。 在域A上列出的唯一的名称服务器已经被降级了,在域B上,它指向了一个不再存在于networking上的服务器。

显然,这不会导致内部DNS查询问题,并且只要使用条件转发,就不会影响林之间的查询。 然而,一旦有条件的转发被二级区域取代,森林之间的信任就会分崩离析。

修复名称服务器logging在每个域的_msdcs委派区指向正确的名称服务器解决了问题。

我在这里与同一个问题的人一起工作: http : //forums.iis.net/p/1175219/2023646.aspx 。 尽pipe我们还没有完全解决,我们仍被动地继续研究。 在他们的情况下,使用Alogging而不是CNAME解决了它(临时修复),但是由于您已经在使用Alogging,所以对您不起作用。

对于你来说,如果你为域名创build一个主机logging呢? 这将使AD大部分脱离等式。 另外,尝试使用IE Intranet区域,并尝试访问另一个浏览器。

这个问题可能与SPN有关,尽pipe你确实提到过你设置了logging。

而且由于您提到它可以从一些计算机上运行,​​而不是其他计算机,那么还要查看计算机的SPN设置以及信任设置。

我认为失败的页面是密码保护? 如果不是,那么您可以将身份validation/匿名设置为始终以应用程序池身份运行。 然后IIS_IUSRS用户将不会被使用,你只需要testing你正在使用的应用程序池身份。