DNS BIND之bind-utils

bind-utils是bind软件提供的一组DNS工具包,里面有一些DNS相关的工具。主要:dig,host,nslookup,nsupdate。使用这些工具可以进行域名解析和DNS调试工作。

1.dig的使用
dig是一个DNS查询工具.dig向DNS服务器发出请求,然后输出DNS服务器的返回结果。系统管理员可以使用dig来测试DNS服务器。dig会根据/etc/resolv.conf文件中列出的服务器,依次进行尝试。不加参数执行dig时,dig将执行一个.查询,即根查询。
a.dig命令的格式为:
dig  [  @server ]  [ -b address ]  [ -c class ]  [ -f filename ]  [ -k filename ]  [ -p port# ]  [ -t type ]  [ -x addr ]  [ -y name:key ]  [name ]  [ type ]  [ class ]  [ queryopt... ]
dig [ -h ]

dig [ global-queryopt... ]  [ query... ]
dig的简单使用:
dig @server name type
  server是DNS服务器的域名或ip地址.可以是以"."分割的IPv4的IP地址,也可以是以":"分割的IPv6的IP地址.如果server是一个域名,则dig先解析这个域名,然后再进行后续的查询.如果没有server参数,dig将会读取/etc/resolv.conf文件中的服务器列表。
  name是需要查询的资源记录的名称.
  type表示需要进行什么类型的查询,类型包括:ANY,A,MX,SIG等.如果没有指定类型,dig将进行A记录查询。
示例:

# dig @172.23.3.1 www.baidu.com A


; <<>> DiG 9.2.4 <<>> @172.23.3.1 www.baidu.com A
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12603
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4


;; QUESTION SECTION:
;www.baidu.com.                 IN      A


;; ANSWER SECTION:
www.baidu.com.          292     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       705     IN      A       202.108.22.5
www.a.shifen.com.       705     IN      A       202.108.22.43


;; AUTHORITY SECTION:
a.shifen.com.           75348   IN      NS      ns1.a.shifen.com.
a.shifen.com.           75348   IN      NS      ns2.a.shifen.com.
a.shifen.com.           75348   IN      NS      ns3.a.shifen.com.
a.shifen.com.           75348   IN      NS      ns4.a.shifen.com.


;; ADDITIONAL SECTION:
ns1.a.shifen.com.       916     IN      A       202.108.22.101
ns2.a.shifen.com.       396     IN      A       220.181.27.59
ns3.a.shifen.com.       994     IN      A       202.108.22.102
ns4.a.shifen.com.       1016    IN      A       220.181.27.58


;; Query time: 172 msec
;; SERVER: 172.23.3.1#53(172.23.3.1)
;; WHEN: Mon Oct 15 15:42:50 2007
;; MSG SIZE  rcvd: 226
b.参数选项
-b    设置查询时所使用的源IP地址.这个必须是一个本地主机网络接口上的地址.
-c    Internet上的DNS服务器,大部分是拒绝使用-c进行查询的.这个值可以是CH,HS等.
-f    使用批处理模式从文件中读取一个需要查询的列表.
-p    指定一个DNS服务器的端口,不使用-p选项,则使用默认端口53.
-t    设置查询类型.默认为A类型查询.
-x    反向查询.使用这个选项时,不需要提供name,class,type参数.dig会自动设置这些参数.
查询选项:
    dig提供了一些开关式的查询选项,用于设置查询方法和查询结果的输出.
       +[no]tcp
查询时,是否使用TCP协议.默认情况下是使用UDP协议.
       +[no]ignore
是否忽略设置有"截头"位的UDP回应包.若设置为不忽略,将使用TCP协议进行重试.
       +domain=somename
设置一个包含域名的搜索列表,就像在/etc/resolv.conf文件中指定的一样.
       +[no]search
是否使用搜索列表.默认不使用搜索列表
       +[no]adflag
是否在查询中设置AD(可信数据)位.
       +[no]cdflag
是否在查询中设置CD(禁止检查)位.这个需要服务器不进行回应的DNSSEC确认.
       +[no]recurse
在查询中设置RD(递归)位.默认情况下是设置有这个标志.表示dig正常情况下会进行一个递归查询.当使用+nssearch或+trace时,这个选项将自动被禁用.
       +[no]nssearch
设置这个选项后,dig将在权威DNS服务器中查找结果.然后显示每个DNS服务器的SOA记录.
       +[no]trace
设置轨迹查询.即从根服务器开始追踪一个域名的解析过程.此选项默认是禁用的.打开此选项后,dig将反复对name进行查询.它将从根服务器开始,显示每一个服务器回答.
       +[no]cmd
设置是否打印初始化注释.默认是打开的.
       +[no]short
设置是否简化输出.默认是详细的输出.
       +[no]identify
在启用short选项后,是否显示IP地址和端口号.在short选项启用后,默认是不显示
IP地址和端口号的.
       +[no]comments
是否输出注释行.默认是输出注释行.
       +[no]stats
是否输出统计列表.默认是输出统计列表.
       +[no]qr
是否输出发送出的查询内容.默认是不打印.
       +[no]question
在输出中是否打印"提问部分".默认是打印"提问部分".
       +[no]answer
在输出中是否打印"回答部分".默认是打印"回答部分".
       +[no]authority
在输出中是否打印"权威部分".默认是打印"权威部分".
       +[no]additional
在输出中是否打印"附加部分".默认是打印"附加部分".
       +[no]all
设置或取消所有标记设置.
       +time=T
设置查询的超时时间.默认超时是5秒.
       +tries=T
设置UDP查询的重试次数.默认是3.
       +[no]multiline
设置是否多行输出.默认每个记录一行.
       +[no]fail
是否在接收到一个错误后,尝试下一个服务器.
       +[no]besteffort
是否显示信息的摘要.默认是不显示.

2.host的使用
host是进行DNS查询的简单工具.用来将域名解析为IP地址. host的命令格式:
host  [  -aCdlnrTwv ]  [ -c class ]  [ -N ndots ]  [ -R number ]  [ -t type ]  [ -W wait ]  name [ server ]
name 需要解析的域名.可以是以"."分隔的IPv4地址,也可以是":"分隔的IPv6地址.
server DNS服务器的域名或IP地址.这是个可选项.指定此选项后,将会忽略/etc/resolv.conf中的设置.
-a 等同于-v -t选项.
-C 显示SOA记录.
-c 指定一个查询类别.默认是IN类别.
-d,-v 详细输出方式.
-n 对IPv6的IP地址进行反解析.
-R 一次查询中UDP协议的重试次数.默认为1.
-r 禁用递归查询.
-T 在查询中使用TCP协议.host默认使用UDP协议进行查询.
-t 用来指定查询类型.类型可以是CNAME,NS,SOA,SIG,KEY,AXFR等.默认是查询A类型记录.
-W 设置等待查询结果的时间,单位为秒.
-w 设置等待查询结果.等待时间取决于硬件能够记录的最大数值.
示例:
$ host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 202.108.22.5
www.a.shifen.com has address 202.108.22.43

$ host -T www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 202.108.22.5
www.a.shifen.com has address 202.108.22.43

$ host www.gmail.com
www.gmail.com is an alias for mail.google.com.
mail.google.com is an alias for googlemail.l.google.com.
googlemail.l.google.com has address 66.249.89.19
googlemail.l.google.com has address 66.249.89.83
googlemail.l.google.com has address 66.249.89.18

$ host -t MX www.gmail.com
www.gmail.com is an alias for mail.google.com.
mail.google.com is an alias for googlemail.l.google.com.
3.nslookup的使用
nslookup可以用来交互式的进行DNS查询.nslookup有2个工作模式:交互模式和非交互模式.交互模式 允许用户查询不同主机或域DNS信息.非交互模式可以输出主机或域的名称和各种信息.
命令格式:nslookup [ -option ]  [ name | - ]  [ server ]
使用方法:
1)交互模式
通过两种方式可以进入交互模式:
a.运行nslookup时不使用任何参数.
b.nslookup的第1个参数是"-",并且第2个参数是1个DNS服务器的名称或IP地址.
交互模式命令:
host [server] 查询host的信息.可以使用当前默认的DNS服务器或指定一个server.如果host是一个IP地址,并且查询类型是A或PTR.则会输出host的域名。
server <domain>
改变默认DNS服务器为domain.
lserver <domain>
lserver使用初始的服务器来查询domain的信息.
exit
退出程序.
set keyword[=value]
这个命令用来设置一些状态信息.
all
输出当前设置的常用选项的信息和当前默认的服务器和主机的信息.
> set all
class=value
改变查询类别为:IN,CH,HS,ANY.
[no]debug
打开/关闭调试模式.调试模式下,会输出包发送过程的信息.
[no]d2
打开/关闭调试模式2.会输出比调试模式更加详细的信息.
domain=name
设置查询列表.
[no]search
如果一个查询请求中,至少包含一个".",但结尾没有".".则会将搜索列表中的域名添加到上面.
port=value
改变默认的TCP/UDP DNS服务器端口.默认值是53.
[no]recurse
如果1台服务器上没有所要查询的信息,是否要查询其他的服务器.
retry=number
设置重试次数.
timeout=number
设置超时秒数.
[no]vc
发送请求到服务器时,是否使用虚拟电路.
示例:
$ nslookup
> server 202.106.195.68
Default server: 202.106.195.68
Address: 202.106.195.68#53
> set debug
> www.baidu.com
Server:         202.106.195.68
Address:        202.106.195.68#53


------------
    QUESTIONS:
        www.baidu.com, type = A, class = IN
    ANSWERS:
    ->  www.baidu.com
        canonical name = www.a.shifen.com.
    ->  www.a.shifen.com
        internet address = 202.108.22.43
    ->  www.a.shifen.com
        internet address = 202.108.22.5
    AUTHORITY RECORDS:
    ADDITIONAL RECORDS:
------------
Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 202.108.22.43
Name:   www.a.shifen.com
Address: 202.108.22.5
> exit
2)非交互模式
当nslookup的第1个参数为需要查询的名称或IP地址时,会进入非交互模式.第2个参数用来指定DNS服务器
的名称或IP地址。
示例:
$ nslookup www.sohu.com 202.106.195.68
Server:         202.106.195.68
Address:        202.106.195.68#53

Non-authoritative answer:
www.sohu.com    canonical name = d7.a.sohu.com.
d7.a.sohu.com   canonical name = pagegrp7.a.sohu.com.
Name:   pagegrp7.a.sohu.com
Address: 61.135.150.104
Name:   pagegrp7.a.sohu.com
Address: 61.135.150.108
Name:   pagegrp7.a.sohu.com
Address: 61.135.150.113
Name:   pagegrp7.a.sohu.com
Address: 61.135.150.126
Name:   pagegrp7.a.sohu.com
Address: 61.135.150.145
Name:   pagegrp7.a.sohu.com
Address: 61.135.150.93
Name:   pagegrp7.a.sohu.com
Address: 61.135.150.98
Name:   pagegrp7.a.sohu.com
Address: 61.135.150.101
4.nsupdate的使用
nsupdate是一个动态DNS更新工具.可以向DNS服务器提交更新记录的请求.它可以从区文件中添加或删除资源记录,而不需要手动进行编辑区文件。
nsupdate命令格式:
nsupdate  [  -d ]  [  [ -y keyname:secret ]  [ -k keyfile ]  ]  [ -v ] [ filename ]
-d 调试模式.
-k 从keyfile文件中读取密钥信息.
-y keyname是密钥的名称,secret是以base64编码的密钥.
-v 使用TCP协议进行nsupdate.默认是使用UDP协议.
输入格式:
nsupdate可以从终端或文件中读取命令.每个命令一行.一个空行或一个"send"命令,则会将先前输入的命令发送到DNS服务器上。
命令格式:
server servername [ port ]
发送请求到servername服务器的port端口.如果不指定servername,nsupdate将把请求发送给
当前去的主DNS服务器.
如:
> server 192.168.0.1 53
local address [ port ]
发送nsupdate请求时,使用的本地地址和端口.
zone zonename
指定需要更新的区名. 
class classname
指定默认类别.默认的类别是IN.
key name secret
指定所有更新使用的密钥.
prereq nxdomain domain-name
要求domain-name中不存在任何资源记录.
prereq yxdomain domain-name
要求domain-name存在,并且至少包含有一条记录.
prereq nxrrset domain-name [ class ]  type
要求domain-name中没有指定类别的资源记录.
prereq yxrrset domain-name [ class ]  type
要求存在一条指定的资源记录.类别和domain-name必须存在.
update delete domain-name [ ttl ]  [ class ]  [ type  [ data... ]  ]
删除domain-name的资源记录.如果指定了type和data,仅删除匹配的记录.
update add domain-name ttl [ class ]  type data...
添加一条资源记录.
show
显示自send命令后,所有的要求信息和更新请求.
send
将要求信息和更新请求发送到DNS服务器.等同于输入一个空行.
nsupdate示例:
在/etc/named.conf中添加下面一段内容:
zone "foo.ca" in {
        type master;
        file "db.foo.ca";
        allow-transfer { 127.0.0.1; };
        allow-update { 127.0.0.1; };
        };
建立/var/named/db.foo.ca区文件,内容如下:
$ORIGIN .
$TTL 86400      ; 1 day
foo.ca                  IN SOA  foo.ca. root.foo.ca. (
                                4          ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
$TTL 86400      ; 1 day
                        NS      foo.ca.
                        A       192.168.0.1  ; A记录为192.168.0.1
使用nsupdate更新这条记录:
# nsupdate
> server 127.0.0.1
> update delete foo.ca A
>
> update add foo.ca 80000 IN A 192.168.0.2
>
> quit
停止bind服务:
# /etc/init.d/named stop
查看db.foo.ca区文件内容:
# cat db.foo.ca
$ORIGIN .
$TTL 86400      ; 1 day
foo.ca                  IN SOA  foo.ca. root.foo.ca. (
                                6          ; serial
                                10800      ; refresh (3 hours)
                                900        ; retry (15 minutes)
                                604800     ; expire (1 week)
                                86400      ; minimum (1 day)
                                )
                        NS      foo.ca.
$TTL 80000      ; 22 hours 13 minutes 20 seconds
                        A       192.168.0.2    ; A记录为192.168.0.2
$TTL 86400      ; 1 day
                        AAAA    ::1
使用nslookup查询域名foo.ca:
# nslookup
> server 127.0.0.1
Default server: 127.0.0.1
Address: 127.0.0.1#53
> foo.ca
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   foo.ca
Address: 192.168.0.2

你可能感兴趣的:(dns)