分类: 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 >