起因
这两天线上遇到一个问题,合作方无法把用户的操作结果通知我们,造成用户在合作方操作成功,但我们这边业务一直失败,收到了不少用户的投诉。联系合作方查询,原来是对方的DNS域名解析出了问题,解析不成功,一直不能把操作结果通知过来。后来在对方的机房DNS Server中添加了我们域名授权DNS服务器的IP地址,才基本解决了这个问题。趁此机会,总结下DNS域名解析的问题诊断。
--这篇文章最初写于几个月前了,一直没有写完,今天得空更新出来
工具:nslookup,dig,traceroute
域名解析,简单的说就是提供域名与ip地址的映射。常用的域名解析查看工具当属nslookup和dig了。
nslookup简单易用,以为例:
$nslookup www.kuaidingyue.comServer: 10.x.x.222Address: 10.x.x.222#53Non-authoritative answer:Name: www.kuaidingyue.comAddress: 115.28.21.187
这里本地域名服务器地址是10.x.x.222,可以在/etc/resolv.conf文件(centos)中指定本地域名解析服务器的地址
nslookup使用比较直接,有兴趣的同学可以查看下man手册。dig工具就比较强大了,google一下可以发现不少好的博文。这里仅介绍比较常用的命令:跟踪解析过程,控制结果显示。
$dig +trace www.kuaidingyue.com; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> +trace www.kuaidingyue.com;; global options: printcmd. 7187 IN NS i.root-servers.net.. 7187 IN NS g.root-servers.net.. 7187 IN NS j.root-servers.net.. 7187 IN NS k.root-servers.net.. 7187 IN NS c.root-servers.net.. 7187 IN NS a.root-servers.net.. 7187 IN NS b.root-servers.net.. 7187 IN NS f.root-servers.net.. 7187 IN NS l.root-servers.net.. 7187 IN NS h.root-servers.net.. 7187 IN NS m.root-servers.net.. 7187 IN NS e.root-servers.net.. 7187 IN NS d.root-servers.net.;; Received 509 bytes from 10.x.x.222#53(10.x.x.222) in 1 mscom. 172800 IN NS b.gtld-servers.net.com. 172800 IN NS l.gtld-servers.net.com. 172800 IN NS e.gtld-servers.net.com. 172800 IN NS f.gtld-servers.net.com. 172800 IN NS k.gtld-servers.net.com. 172800 IN NS a.gtld-servers.net.com. 172800 IN NS d.gtld-servers.net.com. 172800 IN NS g.gtld-servers.net.com. 172800 IN NS h.gtld-servers.net.com. 172800 IN NS m.gtld-servers.net.com. 172800 IN NS i.gtld-servers.net.com. 172800 IN NS c.gtld-servers.net.com. 172800 IN NS j.gtld-servers.net.;; Received 509 bytes from 192.x.x.17#53(i.root-servers.net) in 80 mskuaidingyue.com. 172800 IN NS f1g1ns1.dnspod.net.kuaidingyue.com. 172800 IN NS f1g1ns2.dnspod.net.;; Received 219 bytes from 192.x.x.30#53(b.gtld-servers.net) in 3 mswww.kuaidingyue.com. 600 IN A 115.28.21.187kuaidingyue.com. 600 IN NS f1g1ns2.dnspod.net.kuaidingyue.com. 600 IN NS f1g1ns1.dnspod.net.;; Received 117 bytes from 122.225.217.192#53(f1g1ns1.dnspod.net) in 29 m
通过+trace选项,可以看到域名kuaidingyue.com的解析过程
从本地域名服务器(10.x.x.222)获取根域名服务器
从根域名服务器(192.x.x.17)获取com.域名服务器
从域名服务器(192.x.x.30)获取可以解析该域名的域名服务器
从最终提供解析域名的服务器(122.225.217.192)获取域名IP地址
关于域名解析的配置、A记录、NS记录的说明,稍候会介绍。这里可以看到完整的域名解析过程。
dig可以控制输出结果的显示格式,例如我们只想看到域名解析的结果,而不需要过多的注释,就可以用下面的命令:
$dig +nocmd www.kuaidingyue.com +noall +answer www.kuaidingyue.com. 248 IN A 115.28.21.187
dig还可以指定起始的域名解析服务地址,这样就不用取/etc/resolv.conf中本地域名服务器,再去递归查询域名了:
$dig @f1g1ns2.dnspod.net www.kuaidingyue.com +nocomments +nostats; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5 <<>> @f1g1ns2.dnspod.net www.kuaidingyue.com +nocomments +nostats; (4 servers found);; global options: printcmd;www.kuaidingyue.com. IN Awww.kuaidingyue.com. 600 IN A 115.28.21.187kuaidingyue.com. 600 IN NS f1g1ns2.dnspod.net.kuaidingyue.com. 600 IN NS f1g1ns1.dnspod.net.
在工作中,我们通常愿意查看一下从本地到目标地址的连通性。一般的手段就是直接用ping工具查看回包,统计丢包率来判断网络状况。还有一个也是利用ICMP协议,详细列出从本地到目标地址的路由情况的工具:traceroute
$traceroute www.kuaidingyue.comtraceroute to www.kuaidingyue.com (115.28.21.187), 30 hops max, 40 byte packets 1 10.x.x.1 (10.x.x.1) 0.664 ms 0.697 ms 0.734 ms 2 10.x.x.49 (10.x.x.49) 0.362 ms 0.359 ms 0.315 ms 3 10.x.x.29 (10.x.x.29) 0.304 ms 0.327 ms 0.292 ms 4 10.x.x.73 (10.x.x.73) 0.629 ms 0.594 ms 0.530 ms 5 220.x.x.2 (220.x.x.2) 1.353 ms 1.390 ms 1.358 ms 6 10.x.x.10 (10.x.x.10) 0.881 ms 1.158 ms 1.223 ms 7 220.x.x.49 (220.x.x.49) 5.751 ms 5.129 ms 5.856 ms 8 * 218.x.x.173 (218.x.x.173) 2.031 ms * 9 220.x.x.57 (220.x.x.57) 3.920 ms 4.037 ms 218.x.x.229 (218.x.x.229) 4.475 ms10 202.x.x.42 (202.x.x.42) 5.833 ms 202.x.x.46 (202.x.x.46) 7.375 ms 202.x.x.242 (202.x.x.242) 4.206 ms11 202.x.x.18 (202.x.x.18) 24.380 ms 25.699 ms 202.x.x.6 (202.x.x.6) 29.984 ms12 219.x.x.46 (219.x.x.46) 34.037 ms 219.x.x.22 (219.x.x.22) 11.162 ms 219.x.x.46 (219.x.x.46) 35.278 ms13 219.146.18.218 (219.146.18.218) 28.358 ms 27.852 ms 219.146.18.246 (219.146.18.246) 26.695 ms14 42.120.244.78 (42.120.244.78) 35.698 ms 219.146.18.246 (219.146.18.246) 18.112 ms 42.120.244.78 (42.120.244.78) 35.228 ms15 42.120.244.78 (42.120.244.78) 25.574 ms 42.120.245.62 (42.120.245.62) 53.592 ms 42.120.245.6 (42.120.245.6) 122.412 ms16 * 42.120.245.18 (42.120.245.18) 98.152 ms *17 ip28.hichina.com (115.28.21.187) 27.691 ms 28.291 ms 25.866 ms
上面每条记录是数据包经过的路由地址,以及响应时间。traceroute每次发送3个数据包,可以看到在每一跳中经过的路由地址并不一定相同。
域名解析服务
以在配置的域名解析服务为例:
其中A,NS记录表示的意义在上都有清晰的说明,如下图所示
还支持单独解析联通IP,这里就不细述了,可以到查看"线路类型"。
这里说明一下域名解析中有递归服务器和授权服务器的区别:
域名解析都是递归进行的,而最终有个域名服务器来解析域名对应的记录,这台负责最终解析域名记录的服务器称为授权域名服务器
小结
域名解析故障时,dig可以帮助快速定位问题。dig工具很强大,但需要慢慢积累。