首页 > 故障排查 > 正文

DNS(域名解析)故障排查技巧
2012-06-03 14:23:19   来源:   评论:0 点击:

使用互联网,一定离不开域名解析服务(DNS)。若什么是域名及DNS,都不懂,就不用往下看了。通俗一点讲,DNS是访问一个网址第一步就要做的...

使用互联网,一定离不开域名解析服务(DNS)。若什么是域名及DNS,都不懂,就不用往下看了。通俗一点讲,DNS是访问一个网址第一步就要做的事情,即浏览器(如IE、FIREFOX、MAXTHON、CHROME等都是)将网址中的主机名(如http://www.5iops.com/中的“www.5iops.com”部分)提交开本地DNS服务器,由DNS返回一个对应的IP地址,以便在互联网络上定位那台主机。有相当一部分网址不能访问的原因,就是因为DNS不能正常解析。这里就简单谈谈DNS故障的排查技巧。

一、DNS不能解析的常见原因有:
域名本身已经过期或被停止;
域名的DNS服务器记录不正确;
域名的DNS服务器记录本身没有作解析;
域名的DNS服务器上named服务没有启动;
域名的DNS服务器上未解析;
域名的多个DNS服务器上的解析不一致;
域名的DNS服务器网络设置禁止了53端口TCP/UDP协议;
本地DNS cache未更新,与DNS服务器上的记录不同步

二、判断DNS故障的常用工具有:nslookup(windows/linux/unix支持),whois(unix/linux支持),dig(unix/linux支持),ping(windows/linux/unix支持)等。

三、排查DNS故障具体方法及解决办法:
1、判断与解决域名本身已经过期或被停止。通过whois或CNNIC/APNIC网站查询。
如linux shell下运行:whois blogspot.com 会返回:
Registrant:
DNS Admin
Google Inc.
1600 Amphitheatre Parkway
Mountain View CA 94043
US
dns-admin@google.com +1.6502530000 Fax: +1.6506188571

Domain Name: blogspot.com

Registrar Name: Markmonitor.com
Registrar Whois: whois.markmonitor.com
Registrar Homepage: http://www.markmonitor.com

Administrative Contact:
DNS Admin
Google Inc.
1600 Amphitheatre Parkway
Mountain View CA 94043
US
dns-admin@google.com +1.6502530000 Fax: +1.6506188571
Technical Contact, Zone Contact:
DNS Admin
Google Inc.
1600 Amphitheatre Parkway
Mountain View CA 94043
US
dns-admin@google.com +1.6502530000 Fax: +1.6506188571

Created on..............: 2000-07-31.
Expires on..............: 2010-07-31.
Record last updated on..: 2008-06-11.

Domain servers in listed order:
ns3.google.com
ns1.google.com
ns4.google.com
ns2.google.com
会详尽地告诉你这个域名的注册人是谁,注册机构是哪个,管理员及其联系方式,什么时候启用,什么时候会过期,解析这个域名的域名服务器(Domain Servers或NS)是什么,域名的状态如何等等。通过CNNIC/APNIC等网页查询能拿到同样类似的信息。
如果域名过期或状态不是OK,那么就需要透过注册机构进行续费或解决这类故障。

2、判断与解决域名的DNS服务器记录不正确。
使用nslookup(交互式) 或 dig(非交互式) 工具可以判断域名的DNS服务器记录正确与否。比如:
dig @ns1.google.com www.5iops.com

nslookup
> server ns1.google.com
Default server: ns1.google.com
Address: 216.239.32.10#53
> lwwbe.blogspot.com
Server: ns1.google.com
Address: 216.239.32.10#53
www.5iops.com canonical name = blogspot.l.google.com.

如果只有Question,没有Answer,或者Answer不对,一般就是有问题。解决办法,联系网络管理员修正DNS服务器或解析记录。
当然,关于dig与nslookup的用法及参数或命令,请自己查询相关手册文档。

3、判断与解决域名的DNS服务器记录本身没有作解析;
依据DNS体系架构,域名的DNS服务器记录是一组主机名且它们必须要在Internic注册之后,才能用于域名注册。注册之后,通过whois能够查到,而且在互联网根服务器上会为注册的DNS服务器作解析。
如上面的5iops.com为例,它的dns服务器为:
Domain servers in listed order:
ns3.google.com
ns1.google.com
ns4.google.com
ns2.google.com

这些都可以通过whois以及dig @a.gtld-servers.net查到。
为确保可靠,所有注册过的DNS服务器,同时也应在它本身的域名服务器上作A纪录的解析。否则,有的客户端可能不能正常工作。即ns1.google.COM本身在其自身的DNS服务器上也作了解析。若注册了自己的DNS服务器,但没有为DNS服务器做解析,有可能会出现解析不稳定的情况。

4、判断与解决域名的DNS服务器上named服务没有启动;
可通过dig或nslookup,如果返回no servers could be reached.那么基本可以断定named服务没有启动或者到nmed服务器的网络不通。比如:
dig @kkk.com kkk.com

; <<>> DiG 9.2.3 <<>> @kkk.com kkk.com
;; global options: printcmd
;; connection timed out; no servers could be reached
再登录上named服务器,使用netstat -na|grep LISTEN看看53端口是否仍然存在或ps -ef|grep named查看named进程是否存在。有可能是named服务异常退出了。
解决办法:启动named服务即可。可以查看log,看看是什么原因异常退出,修正后再启动。

5、判断与解决域名的DNS服务器上未解析
登陆到域名的DNS服务器上,执行:
dig @localhost www.5iops.com

如果没有结果,可以看/etc/named.conf中有没有该域名的记录,以及记录中的zone文件是否存在,如果都存在,可以执行程序代码:
rndc reload 5iops.com 
然后执行:
tail /var/log/messages 
看log中有没有报错,有没有zone文件格式的问题。
找到问题所在之后,解决即可。

6、判断与解决域名的多个DNS服务器上的解析不一致
依次查询该域名的每个DNS服务器,看结果是否一致。在所有的服务器中,如果有的服务器没有返回结果,不会影响到域名的正常解析,因为此时解析客户端会尝试其他的服务器,只有当所有的服务器都没有结果才会报错。但是如果A服务器上和B服务器上的解析不一致,则会出现域名解析时对时不对的故障。
Dig @ns1.google.com www.5iops.com
Dig @ns2.google.com www.5iops.com

如果不一致,通常是服务器之间的同步问题。不过,现在大型的互联网内容服务端,一般一个域名会对应有多个IP,很多情况下是不一样的:)这个问题的解决当然是需要同步或者修改为一致啦。

7、判断与解决域名的DNS服务器网络设置是否正确
可以从其他机器分别以tcp和udp协议连接,如:
dig +tcp @ns1.google.com 5iops.com

dig +notcp @ns1.google.com 5iops.com 
如果不能连接,而且服务器上named服务已经启动,多半是软件或硬件防火墙的原因。在服务器上检查/etc/sysconfig/ipchains或 iptable中是否允许domain(53端口)的tcp及udp连接。或暂时停止ipchains/iptable服务,看外部是否能够连接。如果软件防火墙配置正确或根本未启动,则检查硬件防火墙有没有打开53端口。
一般地讲,现在多数DNS服务器为安全起见,都会关闭53端口的TCP连接。

8、判断与解决本地DNS cache未更新
可以查出域名的DNS服务器,检查这些服务器上解析是否正确,如果服务器上正确,而本地解析不正确,则说明使用的本地DNS服务器没有刷新,需要等到它刷新之后。通常需要4到12个小时左右。如果需要快速解决,可以重启本地DNS服务器的NAMED服务。
本客户机也可能有DNS缓存,一般使用下面方法进行清DNS缓存:
windows:
ipconfig /flushdns

linux:
service nscd stop
service nscd start

相关热词搜索:dns dig 故障

上一篇:启动RSYNC服务时出现error while loading shared libraries: libiconv.so.2错
下一篇:ERROR_INTERNET_CONNECTION_RESET错误分析一例

分享到: 收藏
评论排行