Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103687962
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-04 23:38:56

 

DNS是一种将域名解析为IP地址的服务.如:通过DNS解析,可以
得到210.77.38.126.
bind是linux系统下的一个DNS服务程序.bind-utils是bind软件提供的一组DNS工具包,
里面有一些DNS相关的工具.主要有:dig,host,nslookup,nsupdate.使用这些工具可以
进行域名解析和DNS调试工作.

GTES 10,10.5,11版本都包含有bind-utils包,可以在安装完bind包后,直接安装它们:

# rpm -ivh bind-utils.xxx.rpm

源码下载地址:

以bind-9.4.1-P1版本为例.
# tar zxvf bind-9.4.1-P1.tar.gz
# cd bind-9.4.1-P1
# ./configure
# make
# make install

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  A

; <<>> DiG 9.2.4 <<>> @172.23.3.1  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:
;.                 IN      A

;; ANSWER SECTION:
.          292     IN      CNAME   
       705     IN      A       202.108.22.5
       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
		是否显示信息的摘要.默认是不显示.

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 
 is an alias for 
 has address 202.108.22.5
 has address 202.108.22.43

$ host -T 
 is an alias for 
 has address 202.108.22.5
 has address 202.108.22.43

$ host 
 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 
 is an alias for mail.google.com.
mail.google.com is an alias for googlemail.l.google.com.

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 
	改变默认DNS服务器为domain.
lserver 
	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
> 
Server:         202.106.195.68
Address:        202.106.195.68#53

------------
    QUESTIONS:
        , type = A, class = IN
    ANSWERS:
    ->  
        canonical name = 
    ->  
        internet address = 202.108.22.43
    ->  
        internet address = 202.108.22.5
    AUTHORITY RECORDS:
    ADDITIONAL RECORDS:
------------
Non-authoritative answer:
   canonical name = 
Name:   
Address: 202.108.22.43
Name:   
Address: 202.108.22.5
> exit
$

2)非交互模式

当nslookup的第1个参数为需要查询的名称或IP地址时,会进入非交互模式.第2个参数用来指定DNS服务器
的名称或IP地址.

示例:
$ nslookup  202.106.195.68
Server:         202.106.195.68
Address:        202.106.195.68#53

Non-authoritative answer:
    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
$

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
>
阅读(456) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~