对于6月份我国相继发生的两起大规模断网事件,大家应该记忆犹新。事后分析,这两起断网事件都是源于黑客对ISP的DNS服务器攻击导致域名解析风暴所致。由此可见,DNS服务器对于网络运营的重要性。同样的,DNS也是当前企业局域网中非常关键的服务器。如果DNS服务器出错,将对企业局域网造成重大影响,甚至瘫痪。基于Wndows Server 2008平台的DNS服务器无疑是最佳方案,但如果出错该从哪些方面进行排错呢?本文笔者将和大家共享5个非常重要的排错技巧。
1、从检查服务器的TCP/IP配置开始
在DNS错误中,与TCP/IP相关的比较多,因此我们的排错首先应该从检查服务器的TCP/IP配置开始。进入服务器的TCP/IP配置窗口,检查并验证其设置是否有误,如果有误恢复其正确设置即可。笔者的经验,建议大家在配置完DNS后不仅要对DNS配置进行备份,同时也要服务器的TCP/IP设置进行备份,这样恢复起来就非常方便了。在服务器的命令提示符下执行命令“netsh interface dump>C:\settings.txt”,就会将其TCP/IP设置备份到C盘下的settings.txt文件中。如果要进行恢复可执行命令“netsh exec C:\settings.txt”即可。如果恢复或者重新配置TCP/IP后DNS错误依然存在,我们可继续进行下面的排错。(图1)
2、不要忽视服务器的缓存
和DNS客户端类似,DNS服务器也有自己的解析缓存,而这经常被管理所忽略。DNS服务器上的这个缓存主要用于响应自己经常执行的(可能是客户端要求的,也可能是服务器自己需要的)解析查询记录需求。如果我们怀疑DNS服务器故障是因为老的记录导致的,那么可在命令提示符下执行命令“dnscmd servername /zoneprint .”来查看DNS服务器的缓存。该命令中的“servername”是DNS服务器的名称或者IP地址,“.”表示我们要查看的是服务器的缓存,这缓存的列表中会包含被该服务器使用的根名称服务器。
通过查看服务器缓存,管理员可以据此做出判断。如果有必要,我们可强制让服务器清空自己的缓存。为此,可在DNS控制台中用鼠标右键单击服务器项,然后选择“清除缓存”命令即可。另外,我们可在命令行下执行命令“dnscmd servername /clearcache”也可以清除服务器缓存。其中,servername是要清除缓存的DNS服务器的名称或者IP地址。(图2)
3、检查DNS服务器的配置
在DNS服务器发生故障时,检查DNS服务器的配置应该是最主要的排错步骤。因为大部分情况下,DNS问题都和DNS服务器的配置有关。我们在实战中除了尝试在大量选项卡对话框中寻找蛛丝马迹外,还可以求助于dnscmd命令。如果要查看DNS服务器的配置信息,只需在命令行下执行“dnscmd servername /info”命令即可。其中servername是要检查的DNS服务器的名称或IP地址,例如“df”或“192.168.1.25”,该命令的输出结果如图所示。在此,需要管理员熟悉“dnscmd /info”命令输出内容中每个字段的含义。通常情况下,作为管理员没有必要对每个字段都非常了解,不过要了解其中比较关键的几个字段。此外,我们可通过使用“dnscmd /config”命令配置DNS服务器。对于一些主要的配置范例大家应该掌握。例如,我们需要设置fBindSecondaries选项允许maximum compression以及efficiency,那么就可以运行“dnscmd servername /config /BindSecondaries 0”命令即可。同样servername是要配置的DNS服务器的名称或者IP地址。需要说明的是,该命令会覆盖默认的用于支持其他DNS服务器选项。(图3)
另一个对于DNS服务器进行排错非常有用的命令是“dnscmd /statistics”,该命令可以显示许多我们非常感兴趣的信息。这些信息对我们进行DNS排错很有帮助。(1).DNS服务器时间统计,包括服务器的启动时间,启动后的秒数,以及最后一次清理的日期和时间。(2).查询和响应的详细信息,包括收到的查询总数,发出的相应总数,发送和接收的UDP查询数量,发送和接收的UDP响应的数量,以及发送和接收的TCP查询数量,还有发送和接收的TCP响应的数量。(3).被记录的查询的详情,包括每个类型的发送记录的准确数量。(4).失败的详情以及位置,包括递归失败、重试限制到达,以及收到不完整的回应。(5).动态更新的数量信息,每个更新类型的状态,安全更新的打断次数和状态,被转发的更新的数量,已经记录被更新的类型。
(6).被DNS使用的内存数量信息,包括总的内存使用、标准分配,以及从标准到堆的分配。(图4)