在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将防火墙关闭即可解决问题。
.
TAG:
Linux DNS故障