首页 > 代码库 > DNS客户端测试工具详解
DNS客户端测试工具详解
由于DNS是用户接入互联网必须设置的,这里就以CentOS系统为例介绍DNS客户端的设置。
一、相关配置文件
我们知道,从主机名到IP的映射有两种方法,一种是把主机名和其对应的IP地址记录在hosts文件中,这是早期的方法。第二种方法是通过DNS服务器经过层级解析实现主机名到对应的IP地址的映射。这两种方法至今仍在系统上被采用,那么当用户需要解析主机名时,是先查找hosts文件而后再通过DNS架构解析呢?还是先进行DNS解析?它们的优先级如何?我们先看看相关的配置文件吧。
/etc/hosts:早期用于记录hostname与IP地址映射关系的文件。
/etc/resolv.conf:用户在这个文件中可指定由哪台DNS服务器解析,就是ISP的DNS服务器IP地址记录处。
/etc/nsswitch.conf:这个文件用于决定查询时是先查找hosts文件还是先通过/etc/resolv.conf指定的DNS服务器进行解析。
一般Linux的主机名到对应IP的解析默认都是以hosts文件优先,这是由/etc/nsswitch文件所决定的,我们查看以下/etc/nsswitch.conf的相关配置:
[root@www ~]# vim /etc/nsswitch.conf hosts: files dns myhostname
上面的files就是使用/etc/hosts文件查询,dns就是使用/etc/resolv.conf文件指定的DNS服务器进行解析查询,最后的myhostname表示查询当前系统的主机名。因为files在dns之前,所以是hosts文件优先查询。当然,只要把dns写在files之前就可以优先使用/etc/resolv.conf文件指向的DNS查询了。
我们查看一下/etc/resolv.conf文件的配置:
[root@www ~]# vim /etc/resolv.conf nameserver 114.114.114.114 nameserver 223.5.5.5
上面配置了两个DNS服务器指向,一般在查询过程中只向第一个指向的DNS服务器请求解析主机名。而当这里指向的第一台DNS服务器(114.114.114.114)宕机时,则向第二台DNS服务器发出解析请求,所以这里配置两个DNS可起到DNS备份的作用。
一般在/etc/resolv.conf文件中配置的DNS指向不超过三个,这是因为当你的局域网出现问题时,会导致无法连接到DNS服务器,而你的主机会向每台DNS服务器发出连接请求,而每次连接请求时都会有timeout的等待时间,会耗费大量时间。
二、DNS资源记录类型
在了解DNS客户端测试工具之前,需要了解DNS的资源记录类型,因此以下先介绍常见的DNS资源记录类型有哪些。
搭建一个DNS服务器时,需要配置区域数据库文件,而区域数据库文件记录的数据包括了各种具有一定格式的记录,这多条记录信息记录了这个区域的各种信息,这些记录称为DNS资源记录(Resource Record,RR)。以下列出各种资源记录类型及其记录信息。
Resource Record,RR | 记录内容 |
SOA | Start Of Authority,起始授权记录。 |
NS | Name Server,域名服务记录。 |
A | Address,地址记录,FQDN --> IPv4. |
AAAA | 地址记录,FQDN --> IPv6. |
PTR | PoinTeR,反向解析记录,IP --> FQDN. |
CNAME | Canonical Name,别名记录。 |
MX | Mail eXchanger,邮件交换器。 |
三、DNS的正、反解查询命令:host、nslookup、dig
DNS的测试工具有很多,常用的有host、nslookup和dig这三个工具,这里先介绍最简单的host。
1. host
host的语法格式:
host [-t RR_TYPE] name [SERVER_IP]
其中,SERVER_IP表示指定某个DNS服务器的IP地址,使用这个DNS服务器进行解析,而非使用/etc/resolv.conf指定的DNS服务器。
示例:
查看www.sina.com.cn的IP地址:
[root@www ~]# host www.sina.com.cn www.sina.com.cn has address 183.232.24.111 //这是IP地址。 www.sina.com.cn is an alias for jupiter.sina.com.cn. //这是别名。 jupiter.sina.com.cn is an alias for cmnetnews.sina.com.cn. www.sina.com.cn is an alias for jupiter.sina.com.cn. jupiter.sina.com.cn is an alias for cmnetnews.sina.com.cn.
如果只查看IP地址(A记录):
[root@www ~]# host -t A www.sina.com.cn www.sina.com.cn has address 183.232.24.111
查看.sina.com.cn这个域的邮箱主机名:
[root@www ~]# host -t MX sina.com.cn sina.com.cn mail is handled by 10 freemx3.sinamail.sina.com.cn. sina.com.cn mail is handled by 10 freemx1.sinamail.sina.com.cn. sina.com.cn mail is handled by 10 freemx2.sinamail.sina.com.cn.
查看IP地址为114.114.114.114的这台DNS服务器主机名:
[root@www ~]# host -t PTR 114.114.114.114 114.114.114.114.in-addr.arpa domain name pointer public1.114dns.com.
指定223.5.5.5为DNS服务器,查看google的web服务器主机的IPv6地址:
[root@www ~]# host -t AAAA www.google.com 223.5.5.5 Using domain server: Name: 223.5.5.5 //使用的DNS服务器。 Address: 223.5.5.5#53 //DNS服务器的IP地址及端口号。 Aliases: www.google.com has IPv6 address 200:2:f3b9:bb27:: //查询结果。
查询整个域的设置:
host -l DOMIAN
我在本地搭建了一台DNS服务器,域名为itab.com,这里使用host -l去查询itab.com这个域的设置:
[root@www ~]# host -l itab.com 127.0.0.1 Using domain server: Name: 127.0.0.1 Address: 127.0.0.1#53 Aliases: itab.com name server ns1.itab.com. itab.com name server ns2.itab.com. bbs.itab.com has address 192.168.10.140 bbs.itab.com has address 192.168.10.141 mx1.itab.com has address 192.168.10.3 mx2.itab.com has address 192.168.10.4 ns1.itab.com has address 192.168.10.1 ns2.itab.com has address 192.168.10.2 www.itab.com has address 192.168.10.140
再查询redhat.com这个域试试:
[root@www ~]# host -l redhat.com ; Transfer failed. Host redhat.com not found: 9(NOTAUTH) ; Transfer failed.
怎么会查询失败呢?这样的响应是因为管理redhat.com这个域的DNS服务器不允许我们查询,毕竟我们不是redhat.com的系统管理员,当然没有权限可以查看redhat.com这个区域的设置了。
对于我在本地搭建的DNS服务器,因为没有设置转发权限,因此能够被查询。这可以通过bind配置文件中的allow-transfer一项控制,
2. nslookup
nslookup的语法格式:
nslookup [-option] [name] [server_ip]
这里的server_ip同host。
示例:
[root@www ~]# nslookup www.google.com Server: 114.114.114.114 //使用的DNS服务器。 Address: 114.114.114.114#53 Non-authoritative answer: //“非权威”查询结果。 Name: www.google.com Address: 93.46.8.89
需要注意的是,“权威答案”指的是由直接负责的DNS服务器返回的答案,而“非权威答案”指的是这条查询结果并非由直接负责www.google.com的DNS服务器返回,说明返回的是缓存结果。
nslookup也可直接进入交互式模式进行查询,当nslookup之后没有加上任何名称时即可进入交互式模式。
nslookup交互式模式下的常用命令:
server IP:指定一个DNS服务器进行查询。 set q=RR_TYPE:指定要查询的资源记录类型。 name:指定要查询的名称。
用法示例:
[root@www ~]# nslookup > > www.google.com //执行正解查询。 Server: 114.114.114.114 //使用的DNS服务器。 Address: 114.114.114.114#53 Non-authoritative answer: //查询结果。 Name: www.google.com Address: 93.46.8.89 > > > 114.114.114.114 //执行反解查询。 Server: 114.114.114.114 //使用的DNS服务器。 Address: 114.114.114.114#53 Non-authoritative answer: //查询结果。 114.114.114.114.in-addr.arpa name = public1.114dns.com. Authoritative answers can be found from: //可从哪里获取“权威答案”。 114.114.114.in-addr.arpa nameserver = ns100.114dns.net. 114.114.114.in-addr.arpa nameserver = ns100.114dns.com. ns100.114dns.com internet address = 114.114.118.118 ns100.114dns.com internet address = 60.215.138.254 ns100.114dns.net internet address = 114.114.119.119 ns100.114dns.net internet address = 58.217.249.158 > > > set q=NS //设定要查询的资源记录类型为NS记录。 > google.com //查询google.com这个域的DNS服务器主机名。 Server: 223.5.5.5 //使用的DNS服务器。 Address: 223.5.5.5#53 Non-authoritative answer: //查询结果。 google.com nameserver = ns3.google.com. google.com nameserver = ns4.google.com. google.com nameserver = ns2.google.com. google.com nameserver = ns1.google.com. //上面结果显示有4台DNS服务器。 > > > > set q=A //指定要查询的资源记录类型为A记录。 > server 223.6.6.6 Default server: 223.6.6.6 Address: 223.6.6.6#53 > > www.baidu.com //执行正解查询。 Server: 223.6.6.6 Address: 223.6.6.6#53 Non-authoritative answer: //查询结果。 www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address: 14.215.177.37 Name: www.a.shifen.com Address: 14.215.177.38
3. dig
dig这个工具用于测试DNS系统,因此不会查询hosts文件。其查询的语法格式为:
dig [-t RR_TYPE] name [@SERVER] [query options] 查询参数: +[no]trace:跟踪解析过程。 +[no]recurse:进行递归解析。 其他选项与参数: @SERVER:如果不以/etc/resolv.conf文件中设置指向的DNS服务器进行查询,则可在此处指定。 -t RR_TYPE:指定要查询的资源记录类型。 -x:查询反向解析信息。
示例:
上面查询结果可分为四段。
第一段为跟查询有关的一些参数。
第二段为要查询的内容(QUESTION)。
因为我们要查询的是www.baidu.com这个主机名对应的IP地址,所以这里显示为A。
第三段为依据上面的QUESTION去查询的结果(ANSWER)。
第四段为DNS传输的相关信息。
使用dig进行反向解析测试的格式为:
dig -x IP
示例:
[root@www ~]# dig -x 114.114.114.114 ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -x 114.114.114.114 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61474 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 5 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: //要查询的内容。 ;114.114.114.114.in-addr.arpa. IN PTR ;; ANSWER SECTION: //查询结果。 114.114.114.114.in-addr.arpa. 561 IN PTR public1.114dns.com. ;; AUTHORITY SECTION: //权威信息,此处显示114.114.114.0/24这个网段的NS记录。 114.114.114.in-addr.arpa. 72977 IN NS ns100.114dns.com. 114.114.114.in-addr.arpa. 72977 IN NS ns100.114dns.net. ;; ADDITIONAL SECTION: //额外信息,包括上面NS记录的A记录。 ns100.114dns.com. 1224 IN A 60.215.138.254 ns100.114dns.com. 1224 IN A 114.114.118.118 ns100.114dns.net. 1224 IN A 58.217.249.158 ns100.114dns.net. 1224 IN A 114.114.119.119 ;; Query time: 3 msec ;; SERVER: 114.114.114.114#53(114.114.114.114) ;; WHEN: Wed Mar 29 23:06:44 CST 2017 ;; MSG SIZE rcvd: 203
模拟完全区域传送:
dig -t axfr DOMIAN [@SERVER]
模拟完全区域传这个功能主要用于测试主从DNS服务器之间数据是否能够正常传送。我在本地搭建了一台DNS服务器,这里直接使用dig进行测试:
[root@www ~]# dig -t axfr itab.com @127.0.0.1 ; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> -t axfr itab.com @127.0.0.1 ;; global options: +cmd itab.com. 3600 IN SOA ns1.itab.com. dnsadmin.itab.com. 2017032901 3600 600 7200 604800 itab.com. 3600 IN NS ns1.itab.com. itab.com. 3600 IN NS ns2.itab.com. itab.com. 3600 IN MX 10 mx1.itab.com. itab.com. 3600 IN MX 20 mx2.itab.com. bbs.itab.com. 3600 IN A 192.168.10.140 bbs.itab.com. 3600 IN A 192.168.10.141 mx1.itab.com. 3600 IN A 192.168.10.3 mx2.itab.com. 3600 IN A 192.168.10.4 ns1.itab.com. 3600 IN A 192.168.10.1 ns2.itab.com. 3600 IN A 192.168.10.2 web.itab.com. 3600 IN CNAME www.itab.com. www.itab.com. 3600 IN A 192.168.10.140 itab.com. 3600 IN SOA ns1.itab.com. dnsadmin.itab.com. 2017032901 3600 600 7200 604800 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Wed Mar 29 23:22:22 CST 2017 ;; XFR size: 14 records (messages 1, bytes 321)
上面结果显示数据能够正常传送。需要注意的是,上面的模拟完全区域传送的实验应该在从DNS服务器测试才对,但这里只是作为实验,因此直接在本地进行测试。
四、查询域管理者相关信息:whois
上面提到,查询正、反解的命令是host、nslookup及dig,查询整个域的设置则使用‘host -l DOMAIN‘,那么如果想要知道“这个域是谁管的”的信息就可以使用whois这个命令。
whois查询的语法格式:
whois DOMIAN
示例:
[root@www ~]# whois redhat.com # 前面是whois服务器提供的告知信息,这里略去。 Domain Name: REDHAT.COM Registrar: NOM IQ LTD (DBA COM LAUDE) # 注册者 Sponsoring Registrar IANA ID: 470 # 赞助者 Whois Server: whois.comlaude.com Referral URL: http://www.comlaude.com Name Server: NS1.REDHAT.COM Name Server: NS2.REDHAT.COM Name Server: NS3.REDHAT.COM Name Server: NS4.REDHAT.COM Status: clientUpdateProhibited https://icann.org/epp#clientUpdateProhibited Updated Date: 25-apr-2016 # 最近一次更新日期 Creation Date: 26-may-1994 # 建立日期 Expiration Date: 25-may-2017 # 失效日期 # 下面是一堆联络方式,这里省略。
使用whois命令可以查询到当初注册这个domain的用户的相关信息。但因为近年来网络安全问题,而whois所提供的信息又非常详细,因此为了保护用户的隐私,所以,目前使用whois所查询到的信息不见得完整可靠。
本文出自 “Tab” 博客,请务必保留此出处http://xuweitao.blog.51cto.com/11761672/1911586
DNS客户端测试工具详解