解决Linux下“跑”DNS的故障

JavaGG 发布于 2009/05/23 12:37
阅读 330
收藏 0

  在Linux上架设DNS是相当常见的事情。域名系统为一个分布式数据库,它使本地负责控制整个分布式数据库的部分段。每一段中的数据通过客户、服务器模式在整个网络上均可存取。它通过采用复制技术和缓存技术使得整个数据库可靠的同时,又拥有良好的性能。
  域名服务器包含数据库的部分段的信息,并可提供被称之为解析器的客户来访问。DNS的数据库结构形成一个倒立的树状结构,根的名字用空字符串“ ”来表示,但在文本中用“.”来书写。树的每一个节点都表示整个分布式数据库中的一个分区(域),每个域又可进一步划分成子分区(域),每个域都有一个标签(Label),标明了它与父域的关系。域也有一个域名(Domain Name),给出它在整个分布式数据库中的位置。在DNS中,域名全称是一个从该域到根的标签序列,以“.”分隔这些标签,该标签最多可包含63个字符。树中每一节点的完整域名为从该节点到根之间路径上的标签序列。Linux和其它的Unix一样,都是用BIND来实现名字服务。BIND的服务端的软件被称为named的守护进程。
  问题的出现
  这里所架设的DNS Server的IP地址为192.168.1.212(hostname是test)。开机时,named、telnetd、httpd已启动。在本机上,可由Internet Explorer浏览器浏览192.168.1.212上的网页,也可以进行telnet test。但是在Client端的电脑上(IP为192.168.1.3)却无法浏览192.168.1.212,以及telnet。Client端相关设定是: IP为192.168.1.3,DNS为192.168.1.212,gateway为192.168.1.254,netmask为255.255.255.0。这样的设置似乎没有任何的问题,但究竟为什么会出现这样的情况呢?
  一般DNS故障处理
  大多数DNS故障是因为配置文件的语法错误,或者是对计算机分配了错误的地址造成的。当进行DNS故障诊断时,可参照下面的指导方针:
  1.对全部记录检查和确认主机名称的拼写,记住绝对地址是以“.”结尾的。
  2.如果在区文件中做了任何修改,务必修改SOA记录中的序列号,这将保证服务器正确地重新上载文件。
  3.确定输入到主区的名称和IP地址匹配反向指针文件中的反向指针信息。
  4.Microsoft的DNS服务器采用了非标准的资源记录,可能会导致问题。
  5.检查防火墙相关程序。
  分析与解决
  1.我们是利用private IP(例如:192.168.1.212)来架设DNS的。这样做是允许的,而且看来在Client端的设定并无错误。假如无法使用DNS服务,则要先先检查DNS Servre的设定。设定文件在/etc/named.boot及/var/named/*),同时运行“/var/log/messages”。
  2.Client端无法浏览192.168.1.212及telnet,如果是指使用IP方式无法连接,那么首先要检查DNS server(192.168.1.212)上的WWW Server及telnet是否启动,并运行正常。一般运行“netstat -tlp”来查看port是否open,WWW服务使用的port是“80 port”,而telnet服务是“21 port”。查看并确认log有无错误信息(view /var/log/httd/* ; /var/log/messages; /var/log/secure)。若是使用DN方式无法连线,则请检查上述说明确认DNS运行无误。若实在查不出来,则只好将相关文件信息Copy出来。例如有关 /var/log/messages的信息如下:

Dec 19 10:54:18 moon named[2424]: starting BIND 9.2.0 -u named 
Dec 19 10:54:18 moon named[2424]: using 1 CPU 
Dec 19 10:54:18 moon named[2427]: loading configuration from '/etc/named.conf' 
Dec 19 10:54:18 moon 12月 19 10:54:18 named: named 启动 succeeded 
Dec 19 10:54:18 moon named[2427]: no IPv6 interfaces found 
Dec 19 10:54:18 moon named[2427]: listening on IPv4 interface lo, 127.0.0.1#53 
Dec 19 10:54:18 moon named[2427]: listening on IPv4 interface eth0, 195.68.1.212#53 
Dec 19 10:54:18 moon named[2427]: listening on IPv4 interface eth1, 17.130.240.67#53 
Dec 19 10:54:18 moon named[2427]: command channel listening on 127.0.0.1#953 
Dec 19 10:54:18 moon named[2427]: named.local:1: no TTL specified; using SOA MINTTL instead 
Dec 19 10:54:18 moon named[2427]: zone 0.0.127.IN-ADDR.ARPA/IN: loaded serial 2000092201 
Dec 19 10:54:18 moon named[2427]: zone 1.68.195.IN-ADDR.ARPA/IN: loaded serial 2001021103 
Dec 19 10:54:18 moon named[2427]: zone localhost/IN: loaded serial 2002111601 
Dec 19 10:54:18 moon named[2427]: zone tao.gov.tw/IN: loaded serial 2001021103 
Dec 19 10:54:18 moon named[2427]: running 
Dec 19 10:54:18 moon named[2427]: zone localhost/IN: sending notifies (serial 2002111601)
  有关netstat -lpt的信息如下:
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 
tcp 0 0 *:32768 *:* LISTEN 866/rpc.statd 
tcp 0 0 localhost:32769 *:* LISTEN 1090/xinetd 
tcp 0 0 *:printer *:* LISTEN 1112/lpd Waiting 
tcp 0 0 *:sunrpc *:* LISTEN 838/portmap 
tcp 0 0 *:x11 *:* LISTEN 1363/X 
tcp 0 0 *:http *:* LISTEN 1184/httpd 
tcp 0 0 *:wnn4_Tw *:* LISTEN 1230/tserver 
tcp 0 0 *:ftp *:* LISTEN 1090/xinetd 
tcp 0 0 17.130.240.67:domain *:* LISTEN 1032/named 
tcp 0 0 moon.tao.gov.tw:domain *:* LISTEN 1032/named 
tcp 0 0 localhost:domain *:* LISTEN 1032/named 
tcp 0 0 *:ssh *:* LISTEN 1057/sshd 
tcp 0 0 *:telnet *:* LISTEN 1090/xinetd 
tcp 0 0 localhost:smtp *:* LISTEN 1142/sendmail: acce 
tcp 0 0 localhost:rndc *:* LISTEN 1032/named
  有关 /var/log/secure的信息如下:
Dec 19 10:02:14 moon sshd[1060]: Server listening on 0.0.0.0 port 22. 
Dec 19 10:02:50 moon xinetd[1093]: START: sgi_fam pid=1562 from=
  有关/var/log/httpd/error_log的信息如下:
[Thu Dec 19 10:02:20 2002] 
[notice] Apache/1.3.23 (Unix) (Red-Hat/Linux) configured 
-- resuming normal operations 
[Thu Dec 19 10:02:20 2002] 
[notice] 
suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 
[Thu Dec 19 10:02:20 2002] 
[notice] 
Accept mutex: sysvsem (Default: sysvsem)
  3.接下来要从Client Server互相ping IP。一般会出现以下两种情况:
  ◆ 只要有一方ping不到,请检查双方网路的设置,尤其注意防火墙;
  ◆ 相互能够ping通,请继续下面步骤。
  4.Client Server互相ping DN。一般会出现以下两种情况:
  ◆ Client→Server不通表示Server端的DNS可能不正常(虽从log看来有启动,但不能说明所有的设定都正确),或者是Client端关于DNS的设定有错。如果Server→Client不通表示Server端的DNS肯定是不正常了(虽从log看来有启动,但不能说明所有的设定都正确) 。
  ◆ 相互能ping通,通常为Server端的Service不正常(包含设定),但很可能是自身运行了防火墙。
  4.检查防火墙相关程序
  ◆ 先用lokkit将防火墙关闭(设定为无) ;
  ◆ 检查TCP_WRAPPER设定(设定文件在/etc/hosts.allow 及 /etc/hosts.deny);
  ◆ 检查service level安全设定,如telnet应检查/etc/xinetd.conf(global)及/etc/xinetd.d/telnet中有无only_from或no_access设定。
  经过上面的步骤,发现它们相互能ping通。于是可以得出结论,使用lokkit将防火墙关闭即可解决问题。

加载中
返回顶部
顶部