在开始讨论如何排除DNS问题之前,我们想知道你是否清楚怎样判断某个问题是由DNS而不是由别的命名服务造成的。在Windows主机上,判断问题的原因是否真的出在DNS上可是件困难的事。Windows支持的命名服务真是名目繁多:如DNS、Wins、HOSTS、LMHOSTS等数不胜数。然而常用的Windows 2000 nslookup 却全然不理会其他这些命名服务。你可能会只顾在Windows 2000计算机上运行nslookup和查询名称服务器,而有问题的服务却可能在使用另一种不同的命名服务。首先,你需要考虑是哪一类程序出了问题,如果是TCP/IP客户端,如telnet或ftp,那么问题可能出在DNS和HOSTS文件上。如果是一个支持NetBIOS命名的实用程序,如net(与在net use中一样)中,那么值得怀疑的还要包括Wins和LMHOSTS文件。其他也使用DNS名称或NetBIOS名称作为参数的客户端(如ping)也会使用这些命名服务中的任意一种。接下来,再考虑Windows使用这些命名服务的顺序。在查找问题时,应按照此顺序检查各种服务。这些提示对你查出问题的症结会有帮助,至少可帮你排除一个怀疑对象。
如果要检查一个服务器的缓存区,请单击DNS控制台左窗格中该服务器名称左边的加号。你将看到一个名为Cached Lookups的文件夹。单击其左边的加号或双击文件夹图标或标签以展开下一级。这样可显示出你的名称服务器已为其缓存了数据的那些顶级域。继续展开,直至看到你要查看的缓存数据所在的那一域名。如我们的名称服务器已为microsoft.com缓存了三条NS记录和一条A记录。如果依次双击net和hp,我们还会看到这些名称服务器的缓存地址。如果想看缓存数据上的 TTL,请双击右窗格中的一条记录。若 DNS 控制台处于高级查看模式(选择查看 高级),则出现的窗口将显示出该记录的 TTL。在检查 TTL 之前,一定要用操作 刷新或用 F5 键刷新 DNS 控制台,否则你看到的 TTL 可能会大于当前 TTL。如果右键单击该记录,你可能会注意到有一个删除记录选项。
DNS的一些常见的错误
1. 忘记增加序列号
在你未使用 DNS 控制台而是用手动方式更改区域数据文件时,就会出现一些问题。DNS 控制台在它每次更改区域数据时都会记着在 SOA 记录中增加序列号,所以你不必为此操心。不过,这也意味着你可能不会养成更新序列号的习惯,所以在进行一次性手动修改时,你可能会忘记增加序列号。此问题的主要症状是,从属名称服务器不会获得你在主服务器上对该区域做的任何更改。从属服务器认为区域数据并未更改,因为它看到的序列号仍是原来的序列号。该怎样检查当时是否记着增加序列号呢?不幸的是,这就不是那么容易了。如果你不记得原序列号是什么,而现在的序列号不能表明它是什么时候更新的,则没有直接的方法判断它是否已更改。在启动主服务器时,不管你是否更改了序列号,它都将加载更新后的区域数据文件。最好的办法只能是使用 nslookup 来比较主服务器和从属服务器返回的数据。如果它们返回不同的数据,则表明你可能忘了增加序列号。如果你能想起最近作的一次更改,则可以查看此数据。如果记不起最近一次作的更改,则可以从一个主服务器和一个从属服务器复制该区域,将结果排序并使用文件比较工具将它们加以比较。还有一个好消息,即,尽管确定该区域此前是否已复制比较难,但现在要确保该区域被复制却非常简单。只须在 DNS 控制台中双击 SOA 记录并手动编辑序列号字段,增加主服务器上此区域的副本中的序列号即可。从属服务器将在刷新时间间隔内获得此新的数据,如果它们用了 NOTIFY,则会更快。
2. 以手动方式更改DNS服务器
要记住 Microsoft DNS 服务器会定期更新其区域数据文件。每次用 DNS 控制台对一个区域的数据进行更改时,就有一个写操作挂起:在 DNS 服务器退出之前,它必须重写该区域的数据文件,否则它就会丢失你所作的更改。可以将此比作内存中一个已更新的页:操作系统在退出之前必须将它写到磁盘上。如果你在一个写操作挂起期间对一个区域数据文件作了手动更改,则在名称服务器退出后你会莫名其妙地丢失所作的更改。比如你在服务器正在运行且有一个写操作挂起时向一个名为microsoft.com的新子域添加了委派。作完更改后,你必须将服务器停下并再次启动,以让它再次读取该区域数据。但是在服务器退出时,它将重写 microsoft.com 区域数据文件,你的委派于是就会丢掉。如果仔细观察(平时就需要这样)事件查看器,会在服务器停止事件之前看到这样一条消息:The DNS server wrote version 37 of zone microsoft.com to file microsoft.com.dns.(DNS 服务器写入区域 microsoft.com 的版本 37 到文件 microsoft.com.dns。)如果你用操作 | 更新服务器数据文件来强制服务器重写其区域数据文件,则服务器就会与区域数据文件同步,而不必在退出时重写。所以,如果要对区域数据文件作手动更改,那么要么首先停止服务器(但这意味着在你作更改期间服务器将不响应任何查询),要么使用 DNS 控制台将服务器与区域数据文件同步,然后再进行更改。
3. 从属服务器无法加载区域数据
如果一个从属服务器无法从其主控服务器获取某个区域的当前序列号,那么最初它是不会给你发警告消息的。然而,如果该问题一直存在而且从属服务器在有效期时间内无法确定其数据是否是最新的,那么该区域就会过期。在一个 Microsoft DNS 服务器上,你将在事件查看器中看到与下文类似的一条消息:在获得成功区域复制或从这个区域作为其源的主服务器获得成功区域复制之前microsoft.com 区域就超时了,该区域已经被关闭。区域过期后,当你向名称服务器查询该区域中的数据时,就会收到 SERVFAIL 错误消息:
C: nslookup robocop wormhole.microsoft.com.
Server: wormhole.microsoft.com
Addresses: 207.46.230.219, 192.253.253.1
wormhole.microsoft.com can’t find robocop.microsoft.com: Server failed
出现此问题的原因主要有三个:由于网络故障与主控服务器的连接断开,为主控服务器配置的 IP 地址不正确,主控服务器上的区域数据文件中有语法错误。首先,应使用 DNS 控制台检查该从属服务器在尝试从中加载数据的那一(些)主控服务器的地址。右键单击左窗格中该区域的域名,选择属性,然后查看常规选项卡,确认它是否真是主名称服务器的 IP 地址。如果是,请检查到此 IP 地址的连接:C: ping 207.46.230.219
Pinging 207.46.230.219 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
如果无法连接到主控服务器,请确定该服务器的主机是否真的在运行(例如,已通电),或检查网络问题。你可能还需要检查主控服务器对该区域中数据的查询是否返回权威性响应。如果主控服务器的响应对于该区域不是权威性的,则从属服务器就不从该主控服务器中复制此区域。可使用 nslookup 检查主控服务器的对于区域的 SOA 记录的权威性响应,命令格式如下:
C: nslookup -norec -type=SOA microsoft.com. 207.46.230.219
此命令向位于地址 152.104.1.6 的名称服务器发送一个非递归查询,以查询 microsoft.com 的 SOA 记录。我们必须发送非递归查询,这样位于 152.104.1.6 的名称服务器就不会将该查询转发给另一个服务器。如果将此主控服务器配置正确,则对此查询的响应就应是权威性的。(记住,除非 nslookup 返回了“非权威性”响应,否则响应就是权威性的。)非权威性的响应可能表明主控服务器在加载该区域时发生问题,通常是由于区域数据文件中存在语法错误。请与该主控服务器的管理员联系,让他检查其事件查看器或系统日志的输出中是否有表明出现语法错误的消息。我们从来还没有见到过 Windows 2000 名称服务器因为区域数据文件中有语法错误而对于此区域失去非权威性的情况,但旧的 BIND 名称服务器确实会表现出这种现象。所以,如果你的名称服务器是某一区域的从属服务器,而此区域的主要主名称服务器是 BIND 名称服务器,该服务器现在对该区域不具有权威性,那么问题可能就是一个语法错误。如果对查询的响应是权威性的但从属服务器仍无法成功复制该区域,那么你可以使用nslookup的ls命令来手动复制该区域。如果看到类似于下面的错误消息,则很可能是主控服务器限制区域复制:
C: nslookup - 152.104.1.6
Default Server: terminator.microsoft.com
Address: 152.104.1.6
ls microsoft.com
[terminator.microsoft.com]
*** Can‘t list domain microsoft.com: Query refused
请与该主控服务器的管理员联系,问是否在对区域复制进行限制。请他检查你正在尝试复制的区域的属性窗口的区域复制选项卡上的选项(如果他在运行 Microsoft DNS 服务器)。如果该远程服务器在运行着 BIND,则请问他是否在使用 xfrnets 或 allow-transfer 功能来对区域复制进行限制。在问题已被排除而且你的服务器能成功复制该区域后,你会在事件查看器中看到下面的消息:A more recent version, version 212 of zone microsoft.com was
found at DNS server at 207.46.230.219. Zone transfer is in progress.
The DNS server wrote version 212 of zone microsoft.com to
file microsoft.com.dns.(在 207.46.230.219 的 DNS 服务器上找到区域microsoft.com 的更新的版本212。正在进行区域复制。DNS 服务器写入区域 microsoft.com 的版本 212 到文件 microsoft.com.dns。)
DNS故障还有几种情况,我们将在下期继续讨论。
http://www.netadmin.com.cn/experience/20040609/2888.asp
4. 网络连接断开
虽然与原始的 ARPANET时代相比,如今的 Internet