科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网网络频道在Linux和Unix上用Dig工具排除域名解析DNS故障

在Linux和Unix上用Dig工具排除域名解析DNS故障

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在实际应用过程中可能会遇到DNS解析错误的问题,就是说当我们访问一个域名时无法完成将其解析到IP地址的工作,而直接输入网站IP却可以正常访问,这就是因为DNS解析出现故障造成的。

作者:51cto 2007年10月8日

关键字: DNS服务器 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

  

  返回

  ;<<>>DiG 9.3.2-P1 <<>>@a.gtld-servers.net upsdn.net

  ; (1 server found)

  ;; global options: printcmd

  ;; Got answer:

  ;; ->>HEADER<<- 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服务器上,执行:

  dig @localhost upsdn.net

  

  如果没有结果,可以看/etc/named.conf中有没有该域名的记录,以及记录中的zone文件是否存在,如果都存在,可以执行程序代码:

  rndc reload abc.com

  

  然后执行:

  tail /var/log/messages

  

  看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个小时左右。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章