在Linux和Unix上用Dig工具排除域名解析DNS故障
上一篇 /
下一篇 2008-11-04 09:32:11
/ 个人分类:Linux应用管理
在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其解析到IP地址的工作,而直接输入网站IP却可以正常访问,这就是因为DNS解析出现故障造成的。
DNS不能解析的常见原因有:
域名本身已经过期或被停止;
域名的DNS服务器记录不正确;
域名的DNS服务器记录本身没有作解析;
域名的DNS服务器上named服务没有启动;
域名的DNS服务器上未解析;
域名的多个DNS服务器上的解析不一致;
域名的DNS服务器网络设置禁止了53端口TCP/UDP协议;
本地DNS cache未更新,与DNS服务器上的记录不同步
DNS的解析过程:
1) 首先查找本地DNS的cache,如果cache里有,且未超过服务器或域名本身定义的生存时间,则返回cache中的记录;
2) 如果cache中没有,或已过期,首先查询互联网根服务器(如a.gtld-servers.net),找出该域名的DNS服务器是哪几个,如果查不到,返回错误;
3) 随机地从域名的DNS服务器中挑出一个,查出其IP地址,如果查不到,返回错误;
4) 连接到该IP地址的53端口(UDP或TCP协议),查询域名,如果连接不上,或服务器未返回结果,则返回错误。
如何判断域名的DNS服务器记录不正确
在Linux/Unix上,可以使用dig工具
dig @a.gtld-servers.net upsdn.net |
返回
; %26lt;%26lt;%26gt;%26gt; DiG 9.3.2-P1 %26lt;%26lt;%26gt;%26gt; @a.gtld-servers.net upsdn.net
; (1 server found)
;; global options: printcmd
;; Got answer:
;; -%26gt;%26gt;HEADER%26lt;%26lt;- opcode: QUERY, status: NOERROR, id: 34265
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 8, ADDITIONAL: 8
;; QUESTION SECTION:
;upsdn.net. IN A
;; AUTHORITY SECTION:
upsdn.net. 172800 IN NS ns1.dnspod.net.
upsdn.net. 172800 IN NS ns1.everydns.net.
upsdn.net. 172800 IN NS ns2.dnspod.net.
upsdn.net. 172800 IN NS ns2.everydns.net.
upsdn.net. 172800 IN NS ns3.dnspod.net.
upsdn.net. 172800 IN NS ns3.everydns.net.
upsdn.net. 172800 IN NS ns4.dnspod.net.
upsdn.net. 172800 IN NS ns4.everydns.net.
;; ADDITIONAL SECTION:
ns1.dnspod.net. 172800 IN A 218.108.58.68
ns1.everydns.net. 172800 IN A 38.99.14.207
ns2.dnspod.net. 172800 IN A 60.195.249.161
ns2.everydns.net. 172800 IN A 216.218.240.206
ns3.dnspod.net. 172800 IN A 60.195.249.166
ns3.everydns.net. 172800 IN A 80.84.249.169
ns4.dnspod.net. 172800 IN A 61.129.70.142
ns4.everydns.net. 172800 IN A 63.219.183.200
;; Query time: 599 msec
;; SERVER: 192.5.6.30#53(192.5.6.30)
;; WHEN: Sun Sep 24 19:03:23 2006
;; MSG SIZE rcvd: 315 |
如果只有Question,没有Answer,那就有问题了
如何判断域名的DNS服务器记录本身有没有解析域名的DNS服务器记录是一组特殊的主机名。这些DNS主机名必须要在Internic注册之后,才能用于域名注册。注册之后,通过whois能够查到,而且在互联网根服务器上会为注册的DNS服务器作解析。
以upsdn.com为例,他的dns服务器
Name Server: SENS01.DIG.COM
Name Server: SENS02.DIG.COM
Name Server: orNS01.DIG.COM
Name Server: orNS02.DIG.COM |
都可以通过whois以及dig @a.gtld-servers.net查到。
为了保险起见,所有注册过的DNS服务器,同时也要在它本身的域名服务器上作A纪录的解析。否则,有的客户端可能不能正常工作。
如SENS01.DIG.COM本身在其自身的DNS服务器上也作了解析。
如果你注册了自己的DNS服务器,但没有为DNS服务器做解析,可能会出现解析不稳定的情况。
如何判断域名的DNS服务器上未解析登陆到域名的DNS服务器上,执行:
如果没有结果,可以看/etc/named.conf中有没有该域名的记录,以及记录中的zone文件是否存在,如果都存在,可以执行程序代码:
然后执行:
看log中有没有报错,有没有zone文件格式的问题。
如何判断域名的多个DNS服务器上的解析不一致依次查询该域名的每个DNS服务器,看结果是否一致。在所有的服务器中,如果有的服务器没有返回结果,不会影响到域名的正常解析,因为此时解析客户端会尝试其他的服务器,只有当所有的服务器都没有结果才会报错。但是如果A服务器上和B服务器上的解析不一致,则会出现域名解析时对时不对的故障。
Dig @ns2.everydns.com upsdn.net
Dig @ns4.dnspod.net upsdn.net |
如果不一致,通常是服务器之间的同步问题。
如何判断域名的DNS服务器网络设置是否正确可以从其他机器分别以tcp和udp协议连接,如:
dig +tcp @ns4.dnspod.net upsdn.net
及
dig +notcp @ns4.dnspod.net upsdn.net |
如果不能连接,而且服务器上named服务已经启动,多半是
软件或
硬件防火墙的原因。在服务器上检查/etc/sysconfig/ipchains或 iptable中是否允许domain(53端口)的tcp及udp连接。或暂时停止ipchains/iptable服务,看外部是否能够连接。如果软件防火墙配置正确或根本未启动,则检查硬件防火墙有没有打开53端口。
如何判断本地DNS cache未更新可以查出域名的DNS服务器,检查这些服务器上解析是否正确,如果服务器上正确,而本地解析不正确,则说明
使用的本地DNS服务器没有刷新,需要等到它刷新之后。通常需要4到12个小时左右。
相关阅读:
- 新手学堂:Linux操作系统实用技巧精彩汇集(上) (漫天星辰, 2008-11-04)
- Linux嵌入式系统的内存管理方法详细介绍 (漫天星辰, 2008-11-04)
- 轻松一刻:Ubuntu Linux下玩KOF97的方法 (漫天星辰, 2008-11-04)
- Linux操作系统程序启动引导过程详细剖析 (漫天星辰, 2008-11-04)
- Unix——真正的黑客是门艺术 (漫天星辰, 2008-11-04)
- 系统管理精华推荐:漫谈UNIX的文件系统 (漫天星辰, 2008-11-04)
- Linux安全配置步骤大全(1) (漫天星辰, 2008-11-04)
- 嵌入式Linux操作系统的驱动程序开发要点 (漫天星辰, 2008-11-04)
- Linux系统工具 让高耗能的应用软件现身 (漫天星辰, 2008-11-04)
- Linux两种简单替代“花生壳”软件的办法 (漫天星辰, 2008-11-04)
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
server
Server
SERVER
防火墙
硬件