怪现状之二:朋友的局域网中原有一台Windows 2000 DNS服务器,自从将其升级为Windows Server 2003以后,他就不能访问一些网站了,但是升级过程中没出现任何的错误。
分析:按照经验,这很可能是由于root Cache文件丢失或损坏造成的。这种情况可以使用 DNS 管理单元手动添加根目录提示、将硬盘上的 Cache.dns 文件替换为备份 Cache.dns 文件或替换为 Windows Server 2003 CD 中的原始版本 Cache.dns 文件来解决。恢复方法如下:
第一步:使用 DNS 管理单元更新根目录提示
在非域控制器上:
1. 单击“开始”,指向“管理工具”-“DNS”。
2. 在控制台树中,右键单击“服务器名”-属性”。(“服务器名”是指服务器的名称)
3. 单击“根目录提示”选项卡,然后单击“添加”。
4. 指定要添加的根服务器的完全限定域名称 (FQDN) 和 IP 地址,然后单击“确定”。
在域控制器上:
1. 点击“开始”-“运行”。在“打开”框中,键入 cmd,然后 “确定”,打开命令提示符窗口。
2. 停止 DNS 服务。请在命令提示符处,键入 net stop dns,然后按 Enter 键。
3. 将 Cache.dns 文件从 %SystemRoot%\System32\Dns\Samples 文件夹复制到 %SystemRoot%\System32\Dns 文件夹。在命令提示符处键入下面的行,然后回车即可:
copy %systemroot%\System32\Dns\Samples\Cache.dns %systemroot%\System32\Dns
如果系统提示您改写现有文件,请键入 y,然后按 Enter 键。(这里的 %SystemRoot%指本地系统所在文件夹根目录,如C:\windows)
4. 点击“开始”,指向“管理工具”,然后单击“Active Directory 用户和计算机”。
5. 在“查看”菜单上,单击“高级功能”。展开“系统”,展开“Microsoft DNS”,右键单击“Root DNS Servers”,然后单击“删除”。在提示确定删除时,单击“是”。 退出 Active Directory 目录服务用户和计算机 MMC 管理单元。
6. 启动 DNS 服务。在命令提示符处键入 net start dns,然后按 Enter 键。
7. 点击“开始”,指向“管理工具”,然后单击“DNS”。
8. 在控制台树中,右键单击“服务器名”,然后单击“属性”。 单击“根目录提示”选项卡,并确认根服务器是否显示在“名称服务器”列表中。
9. 单击“开始”,指向“管理工具”,然后单击“Active Directory 用户和计算机”。
10. 展开“系统”,展开“Microsoft DNS”,然后确认已重新创建了“Root DNS Servers”容器,并且该容器是否包含根服务器列表。
第二步:复制Windows Server 2003 CD 中的 Cache.dns 文件覆盖损坏文件
1. 放入Win2003 CD。点击“开始”,然后单击“运行”。键入 cmd,然后单击“确定”。
2. 在命令提示符窗口中,键入下面的命令,在每一行之后按 Enter 键:
光驱盘符(如E):
cd i386
expand cache.dn_ %systemroot%\System32\Dns\Cache.dns
3.退出命令提示符。
注:如果是从备份的Cache.dns文件恢复。那么需要先用net stop dns停止DNS服务,并用ren cache.dns cache.old将当前cache.dns文件改名,然后Copy备份文件到DNS目录。最后用net start dns将DNS服务重新启动。
但是,经过了Cache文件的恢复之后,问题依旧没能得到解决。而且最奇怪的是,这种情况下仍能Ping通这些网站,至此问题陷入了僵局。最后,经过多方面的资料查询,了解到原来Windows2003中为DNS嵌入了新的扩展结构(Extension Mechanisms),默认情况下这个EDNS是启动的,它允许通过使用大于512KB的UDP包来改善性能。而很多防火墙基于安全的考虑,并不允许这么大的UDP包,会直接拒绝或丢弃它们。这就造成了网络和DNS服务一切正常的情况下无法访问一些网站的怪现状。
解决:还是那句话,既然明白了故障起因,那就好办了。首先,可以查询防火墙供应商是否为这个问题发布了修正补丁,如果有直接升级就解决了。如果没有,那么可以暂时禁用此EDNS,等待补丁的发布。要禁用EDNS,先要安装Win2003 CD的支持工具中的命令行工具“dnscmd.exe”。然后,打开命令提示符窗口输入:dnscmd /config /enableednsprobes 0,按Enter键即可停用EDNS。当防火墙得到了升级修正之后,重新启用EDNS时,输入:dnscmd /config /enableednsprobes 1,按Enter键即可。至此,这一怪现状得到了完满解决。
注:关于EDNS的更多详细信息,可以参看IETF的RFC 2671文档(http://www.ietf.org/rfc/rfc2671.txt?number=2671)和微软的官方文档(http://www.microsoft.com/resources/documentation/WindowsServ/2003/standard/proddocs/en-us/Default.asp?url=/resources/documentation/windowsserv/2003/standard/proddocs/en-us/sag_dns_imp_ednssupport.asp)。
关注此文的读者还看过: