Linux DNS服务器故障解决

现在UNIX类操纵系统(UNIX、Linux、BSD)的域名服务器绝大多数都是用BIND来架设的。由于DNS服务器负责域名的解析工作,其重要性不言而喻。如果在Linux网络中无法进行域名解析,很可能是没有在本地指定有效的域名服务器,通常这种情况比较常见。大多数DNS故障是因为配置文件的语法错误,或者是对计算机分配了错误的地址造成的。

    Linux中的DNS配置文件

    Linux下主要DNS配置文件有以下几个。

    /etc/hosts:主机的一个列表文件,包含(本地网络中)已知主机的一个列表。如果系统的 IP 不是动态生成的,就可以使用它。
    /etc/host.conf:转换程序控制文件,告诉网络域名服务器如何查找主机名(通常是/etc/hosts,然后就是名称服务器。可通过netconf对其进行更改)。对于简单的主机名解析(点分表示法),在请求DNS或NIS网络名称服务器之前,/etc/hosts.conf 通常会告诉解析程序先查看这里。
    /etc/resolv.conf:转换程序配置文件,在配置程序请求BIND域名查询服务查询主机名称时必须告诉程序使用哪个域名服务器和IP地址来完成这个任务。
    Linux上的域名服务由named守护进程控制,该进程从主文件/etc/named.conf中获取信息,包括一组将主机名称映射为IP地址的各种文件。下面是named配置文件族的详细内容。
    /etc/named.conf:主文件,设置一般的name参数,指向该服务器使用的域数据库的信息源。
    /var/named/named.ca:根域名配置服务器指向文件,指向根域名配置服务器,用于告诉缓存服务器初始化。
    /var/named/localhost.zone:Localhost区正向域名解析文件,用于将本地IP地址(127.0.0.1)转换为回送方的Localhost名字。
    /var/named/name.local:Localhost区反向域名解析文件,用于将Localhost名字转换为本地回送IP地址(127.0.0.1)。
    /var/named/name2ip.conf:用户配置区的正向解析文件,将主机名映射为IP地址的区文件。
    /var/named/ip2name.conf:用户配置区的反向解析文件,将IP地址映射为主机名称的区文件。

    Linux DNS故障诊断

    当进行DNS故障诊断时,可参照下面的步骤。

    (1)对全部记录检查和确认主机名称的拼写,记住绝对地址是以“.”结尾的。
    (2)如果在区文件中做了任何修改,务必修改SOA记录中的序列号,这将保证服务器正确地重新上载文件。
    (3)确定输入到主区的名称和IP地址匹配反向指针文件中的反向指针信息。
    (4)检查防火墙相关程序。
    (5)使用命令检查(ping、dig、nslookup、named-checkzone、named-checkconf)。
    (6)使用Dlint软件检查DNS故障。

    工具的应用

    1.语法和规则检查

    Dlint是一个专门检查DNS配置文件开放源代码的软件,运行它要求系统安装Perl语言和Dig命令(BIND中一个软件包)。

    Dlint软件的下载和安装则需要执行以下命令。

   

#wegt 
#gunzip Dlint1.4.0.tar.gz
#tar vxf Dlint1.4.0.tar
#cd Dlint1.4.0
#make install

    系统会将Dlint安装在/usr/bin/目录下。

    Dlint首先检查配置文件的拼写错误。有A(Address)记录的主机名称必须有PTR(反向解析记录的简称)记录。如果有A记录的主机名称没有PTR,则配置文件不能通过。Dlint可以在用户配置文件中为A记录查找丢失的PTR记录。Dlint会记录in-addr.arpa区带的每一条PTR记录是否有对应的A记录存在。Dlint会以递归的方式检查子区带,查找它们的配置问题。Dlint软件可以分析任何DNS区带。

    2.DNS服务器工作状态检查

    在维护DNS服务器时,网管员希望知道到底是哪些用户在使用DNS服务器,同时也希望能对DNS状态查询做一个统计。通常可以想到用Tcpdump -I eth0 port 53来查看DNS查询包。Tcpdump是一个命令行方式的嗅探器,它可以根据需要显示出经过一个网络接口的所有数据包,供网络管理员对网络进行检测。但由于采用的是命令行方式,对这些数据包的分析可能会比较困难。这里我们可以使用DNStop查询DNS服务器状态。

    DNStop依赖Tcpdump和pcap库(libpcap)对网络上传输的数据包进行截获和过滤,所以您需要检查系统是否安装相应软件,可以使用以下命令进行检查。

    #rpm -qa|grep Tcpdump; rpm -qa|grep libpcap

    DNStop的下载和安装需要执行以下命令。

    #wegt http://www.stearns.org/DNStop/DNStop-20040309-1.i386.rpm

    #rpm -ivh DNStop-20040309-1.i386.rpm

    如果想查看通过eth0的DNS网络流量可以使用以下命令。

   

 
#DNStop -s eth0
0 new queries, 6 total queries Mon Jul 6 09:54:35 2004
Sources count %
192.168.0.117 4 66.7
192.168.0.143 1 16.7
192.168.0.42 1 16.7

    在运行DNStop的过程中,可以依次输入如下命令:s、d、t、1、2、3、ctrl+r、ctrl+x,以交互方式来显示不同的信息。
    1 —(TLD)记录查询的顶级域名。
    2 —(SLD)记录查询的二级域名。
    3 —(SLD)记录查询的三级域名。
    s —(Source)记录发送DNS查询的客户端IP地址表。
    d —(Destinations)记录DNS查询的目的服务器的IP地址表。
    t —(Query Type)记录查询详细类型。
    Ctrl+r — 重新记录。
    Ctrl+x — 退出。
    更详细的信息可以查看man DNStop。
    3.其他DNS集成工具
    (1)nslookup
    nslookup即名称服务器查找(Name Server Lookup),用来查找DNS服务器上的DNS记录。这个命令可以指定查询的类型,可以查到DNS记录的生存时间,还可以指定使用哪个DNS服务器进行解释。运行nslookup需要安装bind-utils。nslookup有两种运行模式:交互式和非交互式运行模式。
    错误实例:

   

 
#nslookup
*** Can't find server name for address 192.168.2.1: Timed out
*** Default servers are not available
Default Server: UnKnown
Address: 192.168.2.1

    错误原因:如果出现错误,该命令将不能启动。一般的错误都是数据库文件或配置文件笔误所至。比如少个“.”或者文件内容不正确等。另外一个主要的原因是执行nslookup的系统所使用的server(如192.168.2.1)不能查询其反解(1.2.168.192.in-addr.arpa)。
    解决方法:增加服务器IP所在的 reverse zone (如2.168.192.in-addr.arpa),确定其中有server 本身的反解项目。

2)dig
    dig工具向DNS服务器发送named查询,dig可以查询单一和多个域名服务器。dig的功能比 nslookup 强大很多而且使用简单,不像nslookup需要设置set选项。下面是dig的一些比较常用的命令。

   

 
dig @server sina.com.cn.  # dig 最基本的用法
dig @server zx.xmgd.com. AXFR 
# 用dig查看zone数据传输
dig @server zx.xmgd.com. IXFR=N 
# 用 dig 查看 zone 数据的增量传输
dig -x 210.52.83.228 @server
# 用dig查看反向解析
dig xmgd.com. +nssearch  # 查找一个域的授权DNS服务器
dig xmgd.com +trace 
# 从根服务器开始追踪一个域名的解析过程

    (3)named-checkzone
    named-checkzone通过检查句法的正确性来检查区域(zone)文件的正确性。named-checkzone如果没有检查到错误会简单返回一个“OK”字符。下面举一个例子。
    #named-checkzone -q /var/named/localhost.zone
    DNS_zone_load: could not find NS and/or SOA records or bad dated quad
    显示可能是没有定义SOA记录或A纪录设定了一个错误IP地址。查看/var/named/localhost.zone文件后发现一行:
    1D IN A    127.0.0.l
    显然是一个拼写错误,“1”错误拼写为“l”,如果找到错误文件,就可以很快排除故障。
    (4)named-checkconf
    named-checkconf通过检查named.conf句法的正确性来检查named文件的正确性。对于配置正确的named.conf文件,named-checkconf不会显示任何信息。下面是一个检查例子。

   

 
# named-checkconf /etc/named.conf
/etc/named.conf:23: unknown option 'fi1e'

    上面的信息说明在23行有一个错误语句,即把“file”错误拼写为“fi1e”。找到错误原因,用vi修改配置文件,就可以很快排除故障。
    另外强烈建议不要使用RedHat Linux提供的一个图形化的配置工具redhat-config-bind(它可能带来许多严重的问题,因此RHEL 4取消了这个工具),但是Linux网络管理员还是应当使用命令行配置DNS服务器管理工作。Linux命令行和redhat-config-bind 相比具有许多优点。
    命令更加灵活,使用命令通常比使用redhat-config-bind具有更多选项。
    命令运行更快,不必等待Linux处理图形。
    redhat-config-bind工具不能显示所有错误信息。而命令提供的错误信息可以在命令行下看到。
    redhat-config-bind工具是一个单独软件,也是另一个出错源。
    第一次配置DNS对于Linux新手来说是一个挑战,通常都会出错。DNS是一个很复杂的系统,有很多可能会使系统不能正常运行。伴随DNS建立出现的许多问题都会引起相同的结果,但起因却不同。大多数问题是由于配置文件中的语法错误而导致的。DNS是由一组文件构成的,所以需要不同工具来检查对应文件。

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值