- 论坛徽章:
- 0
|
Internet上的成千上万台主机都是通过IP地址来区分的。当大家对IP地址了解后,发现去记这些数字很难记。能否有些方便我们记忆的形式来互相访问?在这种需求之下,我们有了DNS(域名) 。
1 DNS 定义
DNS 是域名系统 (Domain Name System) 的缩写,该系统用于命名组织到域层次结构中的计算机和网络服务。DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,DNS 服务可以将此名称解析为与之相关的其他信息,如 IP 地址。
例如,多数用户喜欢使用友好的名称(如 debian.linuxsir.org)来查找计算机,如网络上的邮件服务器或 Web 服务器。友好名称更容易了解和记住。但是,计算机使用数字地址在网络上进行通讯。为更容易地使用网络资源,DNS 等命名系统提供了一种方法,将计算机或服务的用户友好名称映射为数字地址。
下图显示了 DNS 的基本用途,即根据计算机名称查找其 IP 地址。
DNS示意图
本例中,客户端计算机查询 DNS 服务器,要求获得某台计算机(Debian.linuxsir.org)的 IP 地址。由于 DNS 服务器能够根据其本地数据库应答此查询,因此,它将以包含所请求信息的应答来回复客户端,即一条主机 (A) 资源记录,其中含有 Debian.linuxsir.org 的 IP 地址信息(211.93.98.20)。
此例显示了单个客户端与 DNS 服务器之间的简单 DNS 查询。实际上,DNS 查询要复杂得多,包含此处未显示的许多其他步骤。
2.2 DNS的结构
DNS是一个分层级的分散式名称对应系统有点像电脑的目录树结构在最顶端的是一个“.”(root)然後其下分为好几个基本类别名称如com、 org、edu等再下面是组织名称如cisco、intel等继而是主机名称如www、mail、ftp等。因为当初internet是从美国发起的所以当时并没有国域名称但随着后来internet的蓬勃发展DNS也加进了诸如cn、jp、au等国域名称。所以一个完整的dns名称就好像是这样的 www.xyz.com.cn而整个名称对应的就是一个IP地址了。
在开始的时候root下面只有六个组织类别
类别名称 代表意思
edu 教育学术单位
org 组织机构
net 网路通讯单位
com 公司企业
gov 政府机关
mil 军事单位
不过自从组织类别名称开放以後各种各样五花八门的名称也相继现出来了但无论如何取名的规则最好量适合网站性质。除了原来的类别资料由美国的NIC(Network Information Center)管理之外其它在国域以下的类别分别由该国的NIC管理。
2.3 DNS 查询的工作原理
当 DNS 客户端需要查询程序中使用的名称时,它会查询 DNS 服务器来解析该名称。客户端发送的每条查询消息都包括三条信息,指定服务器回答的问题:
* 指定的 DNS 域名,规定为完全合格的域名 (FQDN)
* 指定的查询类型,可根据类型指定资源记录,或者指定查询操作的专用类型。
* DNS 域名的指定类别。
例如,指定的名称可为计算机的 FQDN,如 Debian.linuxsir.org ,并且指定的查询类型用于通过该名称搜索地址 (A) 资源记录。将 DNS 查询看作客户端向服务器询问由两部分组成的问题,如“您是否拥有名为‘Debian.linuxsir.org’的计算机的 A 资源记录?”当客户端收到来自服务器的应答时,它将读取并解释应答的 A 资源记录,获取根据名称询问的计算机的 IP 地址。
DNS 查询以各种不同的方式进行解析。有时,客户端也可使用从先前的查询获得的缓存信息在本地应答查询。DNS 服务器可使用其自身的资源记录信息缓存来应答查询。DNS 服务器也可代表请求客户端查询或联系其他 DNS 服务器,以便完全解析该名称,并随后将应答返回至客户端。这个过程称为递归。
另外,客户端自己也可尝试联系其他的 DNS 服务器来解析名称。当客户端执行此操作时,它会根据来自服务器的参考答案,使用其他的独立查询。这个过程称为迭代。
总之,DNS 查询进程分两部分进行:
* 名称查询从客户端计算机开始,并传输至解析程序即 DNS 客户端服务程序进行解析。
* 不能在本地解析查询时,可根据需要查询 DNS 服务器来解析名称。
2.4 Internet上域名命名的一般规则
由于Internet上的各级域名是分别由不同机构管理的,所以,各个机构管理域名的方式和域名命名的规则也有所不同。但域名的命名也有一些共同的规则,主要有以下几点:
域名中只能包含以下字符:
1. 26个英文字母
2. “0,1,2,3,4,5,6,7,8,9”十个数字
3. “-”(英文中的连词号)。
域名中字符的组合规则:
1. 在域名中,不区分英文字母的大小写
2. 对于一个域名的长度是有一定限制的
2.5 常见标准资源记录
SOA(Start Of Authority)
起始授权记录表示一个授权区的开始
A (Address)
将主机名转换为地址。这个字段保存以点分隔的十进制形式的IP地址。任何给定的主机都只能有一个A记录,因为这个记录被认为是授权信息。这个主机的任何附加地址名或地址映射必须用CNAME类型给出
CNAME (Canonical NAME)
给定一个主机的别名,主机的别名记录是在这个主机的A记录中指定的
MX (Mail eXchanger)
建立邮件交换器记录。MX记录告诉邮件传送进程把邮件送到另一个系统,这个系统知道如何将它递送到它的最终目的地
NS (Name Server)
标识一个域的域名服务器。NS资源记录的数据字段包括这个域名服务器的DNS名。我们还需要指定这个名字名字服务器的地址与主机名相匹配的A记录
PTR (domain name PoinTeR)
将地址变换成主机名。主机名必须是规范主机名
**********************
3. BIND9 的安装与配置
3.1 bind简介
BIND (Berkeley Internet Name Domain)是Domain Name System (DNS) 协议的一个实现,提供了DNS主要功能的开放实现,包括
* 域名服务器 (named)
* DNS解析库函数
* DNS服务器运行调试所用的工具
是一款开放源码的DNS服务器软件,由美国加州大学Berkeley分校开发和维护的,
按照ISC的调查报告,BIND是世界上使用最多最广泛的域名服务系统。不论你的邮件服务器,WEB服务器或者其他的services如何的安全可靠,DNS的故障会给你带来用户根本无法访问这些服务。
BIND,也是我们常说的named,由于多数网络应用程序使用其功能,所以在很多BIND的弱点及时被发现。主要分为三个版本:
v4
1998年多数UNIX捆绑的是BIND4,已经被多数厂商抛弃了,除了OpenBSD还在使用。OpenBSD核心人为BIND8过于复杂和不安全,所以继续使用BIND4。这样一来BIND8/9的很多优点都不包括在v4中。
v8
就是如今使用最多最广的版本,其详细内容可以参阅 BIND 8+ 域名服务器安全增强
v9
最新版本的BIND,全部重新写过,免费(但是由商业公司资助),也添加了许多新的功能(但是安全上也可能有更多的问题)。BIND9在2000年十月份推出,现在稳定版本是9.3.2。
3.2 软件的相关资源
官方网站: http://www.bind.com/
最新版本: 9.3.2 http://www.isc.org/sw/bind/bind9.3.php#download
帮助文档: http://www.isc.org/sw/bind/
配置文件样例: http://www.bind.com/bind.html
FAQ: http://www.nominum.com/getOpenSourceResource.php?id=6
3.3 配置环境
环境:GNU/Linux Debian/testing Linux 2.6.8-2-386
版本:bind9 9.3.2-2
测试域名:mydebian.org
测试ip: 192.168.102.47 主域名服务器
192.168.102.48 纯缓存域名服务器
192.168.102.49 辅助域名服务器
192.168.102.49 测试客户机
3.4 配置文件说明
安装bind9的命令:
~# aptitude update
~# aptitude install bind9 bind9-host dnsutils
配置文件族:
# ls /etc/bind/ -l
total 44
-rw-r--r-- 1 root root 237 Jan 16 2006 db.0
-rw-r--r-- 1 root root 271 Jan 16 2006 db.127
-rw-r--r-- 1 root root 237 Jan 16 2006 db.255
-rw-r--r-- 1 root root 353 Jan 16 2006 db.empty
-rw-r--r-- 1 root root 256 Jan 16 2006 db.local
-rw-r--r-- 1 root root 1507 Jan 16 2006 db.root
-rw-r--r-- 1 root bind 1611 Jan 16 2006 named.conf
-rw-r--r-- 1 root bind 165 Jan 16 2006 named.conf.local
-rw-r--r-- 1 root bind 672 Jan 16 2006 named.conf.options
-rw-r----- 1 bind bind 77 Aug 4 08:41 rndc.key
-rw-r--r-- 1 root root 1317 Jan 16 2006 zones.rfc1918
配置文件说明:
named.conf
设置一般的named参数,指向该服务器使用的域数据库的信息源
named.conf.options
全局选项
db.root
根服务器指向文件, 由Internet NIC创建和维护, 无需修改, 但是需要定期更新
db.local
localhost正向区文件,用于将名字localhost转换为本地回送IP地址 (127.0.0.1)
db.127
localhost反向区文件,用于将本地回送IP地址(127.0.0.1)转换为名字localhost
其中,主配置文件/etc/named.conf的配置语句
命令 用法
acl 定义IP地址的访问控制清单
control 定义ndc使用的控制通道
include 把其他文件包含到配置文件中
key 定义授权的安全密钥
logging 定义日志写什么,写到哪
opitons 定义全局配置选项和缺省值
server 定义远程服务器的特征
trunsted-keys 为服务器定义DNSSEC加密密钥
zone 定义一个区
默认情况下, 内容如下:
include "/etc/bind/named.conf.options";
zone "." {
type hint;
file "/etc/bind/db.root";
};
zone "localhost" {
type master;
file "/etc/bind/db.local";
};
zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};
zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};
zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};
include "/etc/bind/named.conf.local";
其中type项的值:
master:表示定义的是主域名服务器
slave :表示定义的是辅助域名服务器
hint:表示是互联网中根域名服务器
在Debian环境中,options语句的配置内容, 被移至named.conf.options文件中:
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you might need to uncomment the query-source
// directive below. Previous versions of BIND always asked
// questions using port 53, but BIND 8.1 and later use an unprivileged
// port by default.
// query-source address * port 53;
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
// forwarders {
// 0.0.0.0;
// };
auth-nxdomain no; # conform to RFC1035
};
3.5 创建主域名服务器
a. 首先, 在在192.168.102.47机器上安全bind9
b. 使用编辑器,比如vi, 编辑配置文件/etc/bind/named.conf
加入如下内容
zone "mydebian.org" {
type master; //定义此区为主服务器
file "/etc/bind/db.mydebian"; 指定区资源文件的位置
};
zone "102.168.192.in-addr.arpa" {
type master; //定义此区为主服务器
file "/etc/bind/db.192"; //指定区资源文件的位置
};
c. 创建区资源文件:
创建区资源文件/etc/bind/db.mydebian内容如下
;
; BIND data file for local loopback interface
;
$TTL 604800
$ORIGIN mydebian.org.
@ IN SOA mydebian.org. root.mydebian.org. (
2006080401 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
IN NS ns
IN MX 0 mail.mydebian.org.
@ IN A 192.168.102.47
ns IN A 192.168.102.47
www IN A 192.168.102.47
webserver IN CNAME www
mail IN A 192.168.102.47
ftp IN A 192.168.102.48
ns2 IN A 192.168.102.48
ns3 IN A 192.168.102.49
第一行是TTL设定,生存时间记录字段。它以秒为单位定义该资源记录中的信息存放在高速缓存中的时间长度。这里定义为604800秒,也就是1周.
第二行是$ORIGIN设定,说明下面的记录出自何处.请您加倍留意最后的一个小小数点"."
然后,第三行,是一个 SOA 记录的设定,在这里我们看到一个特殊字符 @ ,它就是 ORIGIN 的意思,也就是刚刚所定义的$ ORIGIN mydebian.org. 的内容,您可以写成 mydebian.org. 也可以用 @ 来代替。
假如这个文件前面没有定义 $ ORIGIN 的话, 那這个 @ 的值就以 named.conf 里的 zone .
接着 SOA 后面,指定了这个区域的授权主机和管理者的信箱,这里分别是"mydebian.org." 和"root.mydebian.org."。我们平时使用的信箱通常是“user@host”这样的格式,但因为@在 DNS 记录中是个保留字符,所以在 SOA 中就用“.”来代替了@。目前这个信箱是 "root@mydebian.org."。
接下来的 SOA 设置,是被括在“( )”之间的 5 组数字,主要作为和 slave 服务器同步 DNS 资料所使用的资料:
Serial:其格式通常会是“年月日+修改次序”(但也不一定如此,您自己能够记得就行)。当 slave 要进行资料同步的时候,会比较这个号码。如果发现在这里的号码比它那边的数值“大”,就进行更新,否则忽略。不过设 serial 有一个地方您要留意:不能超过 10 位数字!
Refresh:这里是是告诉 slave 要隔多久要进行资料同步(是否同步要看 Serial 的比较结果)。
Retry:如果 slave 在进行更新失败后,要隔多久再进行重试。
Expire:这是记录逾期时间:当 slave 一直未能成功与 master 取得联系,那到这里就放弃 retry,同时这里的资料也将标识为过期(
expired )。
Minimum:这是最小默认 TTL 值,如果您在前面没有用“$TTL”来定义,就会以此值为准。
请注意:SOA 记录中这对 “ ( ) ”符号之第一个 “ (”括号一定要和 SOA 写在同一行,而不能用 Enter 断行到下一行去,而且其左边最好有一个空格键或 tab 建。而最后一个 “ )”括号也不能写在注解符号 “ ;”的右边。 置 DNS 的 RR 记录档,其格式要求非常严格,我们丝毫不能掉以轻心。比方说:如果句子不是以空格键、Tab 键、 或注解符号 ( ; )开头,也不在 SOA 的 “ ( ) ”之内, 则表示要定义一个“新记录项 (Entry) ”;如果句子是以空格键或 tab 键开始的话,其设置被视为上一个“记录项”的内容。所以,如果您要为“同一个记录项”定义多个记录设置,而不想重复打字,您倒可以偷懒:在接着它的后面几行用空白或 Tab 来缩排就可以了。
NS表明负责mydebian.org.这个域的Name Server是mydebian.org这台主机
MX记录标明发往mydebian.org域的邮件由mail.mydebian.org这台服务器接收
A记录标明了IP地址和域名之间的对应关系
接下来创建该区的反向映射资源文件
/etc/bind/db.192内容如下:
;
; BIND reverse data file for local loopback interface
;
$TTL 604800
@ IN SOA mydebian.org. root.mydebian.org. (
2006080401 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS mydebian.org.
47 IN PTR mail.mydebian.org.
47 IN PTR www.mydebian.org.
47 IN PTR ns.mydebian.org.
48 IN PTR ftp.mydebian.org.
48 IN PTR ns2.mydebian.org.
49 IN PTR ns3.mydebian.org.
其中PTR记录用来解析IP地址对应的域名
d. 重启DNS服务
/etc/init.d/bind9 restart
此时查看系统日志,可了解BIND的启动情况,比如如下输出,则说明引导正常
tonybox:~# tail /var/log/syslog
Aug 14 08:36:45 localhost named[2792]: zone 127.in-addr.arpa/IN: loaded serial 1
Aug 14 08:36:45 localhost named[2792]: zone 102.168.192.in-addr.arpa/IN: loaded serial 2006080801
Aug 14 08:36:45 localhost named[2792]: zone 255.in-addr.arpa/IN: loaded serial 1
Aug 14 08:36:45 localhost named[2792]: zone localhost/IN: loaded serial 1
Aug 14 08:36:45 localhost named[2792]: zone mydebian.org/IN: loaded serial 2006080801
Aug 14 08:36:45 localhost named[2792]: running
Aug 14 08:36:45 localhost named[2792]: zone mydebian.org/IN: sending notifies (serial 2006080801)
Aug 14 08:36:45 localhost named[2792]: zone 102.168.192.in-addr.arpa/IN: sending notifies (serial 2006080801)
Aug 14 08:36:45 localhost named[2792]: client 192.168.102.47#1030: received notify for zone 'mydebian.org'
Aug 14 08:36:45 localhost named[2792]: client 192.168.102.47#1030: received notify for zone '102.168.192.in-addr.arpa'
e. 在客户机上的设置
# cat /etc/resolv.conf
search mydebian.org
nameserver 192.168.102.47
f. 测试:
使用nslookup 测试
tonybox2:~# nslookup
> set type=any
> mydebian.org
Server: 192.168.102.47
Address: 192.168.102.47#53
mydebian.org
origin = mydebian.org
mail addr = root.mydebian.org
serial = 2006080801
refresh = 604800
retry = 86400
expire = 2419200
minimum = 604800
mydebian.org nameserver = ns.mydebian.org.
mydebian.org mail exchanger = 0 mail.mydebian.org.
Name: mydebian.org
Address: 192.168.102.47
使用dig测试
tonybox2:~# dig @192.168.102.47 mydebian.org
; > DiG 9.3.2 > @192.168.102.47 mydebian.org
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER> DiG 9.3.2 > @192.168.102.47 ftp.mydebian.org
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER> DiG 9.3.2 > @192.168.102.47 -x 192.168.102.47
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER> DiG 9.3.2 > @192.168.102.48 www.mydebian.org
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER> DiG 9.3.2 > @192.168.102.48 www.mydebian.org
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER /var/named/named.ca
3.7 辅助域名服务器
a. 192.168.102.49 为我们的dns 缓存服务器,首先, 在在192.168.102.49 机器上安全bind9,
b. 在主配置文件/etc/named.conf中加入如下内容:
zone "mydebian.org" {
type slave;
file "/etc/bind/slaves/db.mydebian";
masters {192.168.102.47;};
};
zone "102.168.192.in-addr.arpa" {
type slave;
file "/etc/bind/slaves/db.192";
masters {192.168.102.47;};
};
type后面的值已经成为slave; 表示定义的是辅助域名服务器
file 后面也可以是别的文件名不必与主域DNS服务器的设置一样
masters 后为主域DNS服务器的IP地址, 可以是多个IP,型如
masters {ip1;ip2;ip3;};
c. 创建/etc/bind/slaves/目录
tonybox2:/etc/bind# mkdir slaves
tonybox2:/etc/bind# chown bind.bind slaves
d. 重启dns服务
tonybox2:/etc/bind/slaves# /etc/init.d/bind9 restart
named进程第一次启动时,辅助域名服务器就下载主域名服务器的信息;辅助域名服务器根据主域名服务器的对应SOA记录规定的刷新时间间隔,去主域名服务器查询相关信息。
tonybox2:/etc/bind/slaves# ls -l
total 8
-rw-r--r-- 1 bind bind 410 2006-08-08 12:23 db.192
-rw-r--r-- 1 bind bind 430 2006-08-08 12:23 db.mydebian
查看 /etc/bind/slaves 目录,我门会发现已经从主域名服务器获取了相应的资源文件
如果用户bind对于/etc/bind/slaves目录没有写权限, 则查看 /var/log/syslog 会出现如下类似错误:
tonybox:~# tail /var/log/syslog
Aug 8 12:30:09 tonybox2 named[3849]: zone mydebian.org/IN: Transfer started.
Aug 8 12:30:09 tonybox2 named[3849]: transfer of 'mydebian.org/IN' from 192.168.102.47#53: connected using 192.168.102.15#1075
Aug 8 12:30:09 tonybox2 named[3849]: dumping master file: /etc/bind/tmp-VHTxU6CT5n: open: permission denied
Aug 8 12:30:09 tonybox2 named[3849]: transfer of 'mydebian.org/IN' from 192.168.102.47#53: failed while receiving responses: permission denied
Aug 8 12:30:09 tonybox2 named[3849]: transfer of 'mydebian.org/IN' from 192.168.102.47#53: end of transfer
Aug 8 12:30:10 tonybox2 named[3849]: zone 102.168.192.in-addr.arpa/IN: Transfer started.
Aug 8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: connected using 192.168.102.15#1076
Aug 8 12:30:10 tonybox2 named[3849]: dumping master file: /etc/bind/tmp-dxbiD1JtTK: open: permission denied
Aug 8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: failed while receiving responses: permission denied
Aug 8 12:30:10 tonybox2 named[3849]: transfer of '102.168.192.in-addr.arpa/IN' from 192.168.102.47#53: end of transfer
************************
4. 安全设置:
4.1 版本信息
在named.conf.options配置文件中加入:
version "None of your business";
当别人要探测我们DNS服务器的版本时,对方得到的将是None of your business :)
4.2 地址监听
在named.conf.options配置文件中加入:
Listen-on{192.168.102.47;};
如果DNS服务运行在有多个网卡的服务器上,那么默认的它会在所有网卡接口上监听服务,这个选项告诉它只在指定的借口上进行服务监听。
4.3 访问控制列表
首先定义访问控制列表
在/etc/bind/named.conf文件的最上部添加如下内容:
include "/etc/bind/named.conf.acls";
创建/etc/bind/named.conf.acls文件,内容如下:
acl denied {
192.168.0.0/24;
};
acl intra-net {
192.168.102.0/24;
};
acl slave {
192.168.102.49;
}
如果不想让192.168.0.0/24网段使用DNS服务器,则可以在 named.conf.options 文件的options内部加入:
blackhole {denied;};
如果只想相让192.168.102.0/24;网段使用DNS服务器,则可以在 named.conf.options 文件的options内部加入:
allow-query { intra-net; };
如果只想对某个区资源作限制,也可将blackhole/allow-query指令加入到named.conf的对应zone中去。比如:
zone "mydebian.org" {
type master;
file "/etc/bind/db.mydebian";
allow-query { intra-net; };
};
4.4 传送控制
使用的是allow-transfer指令,用于设定允许从主域名服务器更新资源文件的辅助域名服务器的ip地址
使用方法,如:
allow-query{ slave;};
根据需求可以加在/etc/bind/named.conf的对应zone中去,对某个区资源做限制, 或加入到/etc/bind/named.conf.options文件中,多所有的区资源文件作限制。
*************************
DIG
Section: User Commands (1)
Index Return to Main Contents
BSD mandoc
BSD 4
NAME(名称)
dig - 发送域名查询信息包到域名服务器
SYNOPSIS(总览)
dig [@ server ] domain [Aq query-type ] [Aq query-class ] [+ Aq query-option ] [-Aq dig-option ] [%comment ]
DESCRIPTION(描述)
Dig (domain information groper 域名信息搜索)是一个灵活的命令行工具, 它可以用来从域名系统服务器中收集信息. Dig 有两种模式:简单交互模式用于简单的查询,而批处理模式则可以对包含多个查询条目的列表执行查询. 所有查询选项都可以从命令行输入.
通常简单的 dig 用法为下列格式:
dig @ server domain query-type query-class
这里:
server
可为域名或者以点分隔的Internet地址. 如果省略该可选字段, dig 会尝试使用你机器的默认域名服务器.
注意: 如果指定了一个域名,那么将使用域名系统解析程序 (即BIND)来进行解析. 如果你的系统不支持DNS,那么可能 必须 指定一个以点分隔的地址.另外一种选择是, 如果在你配置的某个地方有一台这样的服务器, 那么你所要做的就是建立 /etc/resolv.conf 并在其中指明默认域名服务器的位置,这样 server 自身就可以解析了.参看 resolver(5) 以获得 /etc/resolv.conf 相关的信息. 警告: 修改 /etc/resolv.conf 同样会对标准的解析程序库产生影响,而 (潜在地) 某些程序会要用到它. 作为一种选择,用户可设置环境变量 LOCALRES 为指定的文件,这将用来取代 /etc/resolv.conf Po Ns Ev LOCALRES 是特定针对 dig 解析程序的,并不会牵涉到标准解析程序 Pc . 如果 LOCALRES 变量未设置或者指定的文件不能读,那么就使用 /etc/resolf.conf
domain
是指一个你请求信息的域名. 参看 -x 选项(在该部分的 Sx OTHER OPTIONS 节中有介绍)以获知指定反向地址查询的便捷方法.
query-type
是指你所请求的信息类型(DNS查询类型). 如果省略,默认为 ``a '' (T_A = address ) 以下类型是可识别的:
a T_A
网络地址
any T_ANY
所有/任何与指定域相关的信息
mx T_MX
该域的邮件网关
ns T_NS
域名服务器
soa T_SOA
区域的授权记录
hinfo T_HINFO
主机信息
axfr T_AXFR
区域传输记录(必须是询问一台授权的服务器)
txt T_TXT
任意的字符串信息
(参看RFC 1035以获得完整的列表.)
query-class
是指在查询中请求的网络等级.如果省略,默认为 ``in '' (C_IN = Internet ) 以下的等级是可识别的:
in C_IN
Internet等级的域
any C_ANY
所有/任何等级的信息
(参看RFC 1035以获得完整的列表.)
注意: ``Any '' 可以用来指定一个 等级 和/或查询的一种 类型 Dig 会将第一次出现的 ``any '' 解释为 query-type = T_ANY 为了指明 query-class = C_ANY 你必须或者指定 ``any'' 两次,或者使用 -c 选项(见下面)设置 query-class
OTHER OPTIONS(其它选项)
% ignored-comment
``%'' 用来引用一个不用作解释的参数. 如果正以批处理的模式运行 dig 这可能很有用. 因为不用对一组查询中的每个 @server-domain-name 进行解析,你就可以避免这样做的额外开销, 并且仍然能够在命令行上以域名作为参数. 例如:
dig @128.9.0.32 %venera.isi.edu mx isi.edu
-Aq dig option
``- '' 用来指定一个影响 dig 操作的选项. 当前可用的选项有(尽管不能保证都有用):
-x dot-notation-address
这是指定反向地址映射的便捷的方法. 不用写 ``dig 32.0.9.128.in-addr.arpa , '' 你可以简单地写成 ``dig -x 128.9.0.32 ''
-f file
dig 批处理模式的文件.该文件包含了一组查询清单 ( dig 命令行),它们将一个接一个地执行.以 `; ,' `#' 或 `\n' 开头的行将忽略.其它选项仍然可以在命令行上出现,而且对每个批处理查询都有效.
-T time
当运行于批处理模式下时,两次接着的查询之间的时间间隔,以秒计. 可以用来保持两个或多个批处理 dig 命令大致同步运行.默认为零.
-p port
端口号.通过监听非标准端口号来查询域名服务器.默认为53.
-P Bq ping-string
在查询返回之后,执行一次 ping(8) 命令以获得响应时间的对照关系.这在调用shell上显得不那么自然. 该命令显示的最后三行统计信息为:
ping -s server_name 56 3
如果可选的 ``ping_string '' 存在,那么会覆盖shell命令中的 ``ping -s ''
-t query-type
指定查询类型.可以指定为一个将包含在类型字段中的整数值,也可以使用上面讨论的缩写助记符(即 mx = T_MX
-c query-class
指定查询等级.可以指定为一个将包含在等级字段中的整数值,也可以使用上面讨论的缩写助记符(即in = C_IN).
-k keydir:keyname
用TSIG密钥指定的的密钥名来签署这次查询, 该密钥名在目录keydir下.
-envsav
该标识指定 dig 的环境变量 (默认的,显示选项,等等.),在所有参数都解释了之后, 应保存它们到一个文件中以使之成为默认的环境变量. 如果你不喜欢默认的标准设置而又不想在每次使用 dig 时带大量的选项,那么这很有用. 环境变量包括解析程序状态变量标识,超时和重试次数以及详细控制 dig 输出的标识(见下面). 如果shell环境变量 LOCALDEF 设置为一个文件的名字,那么此即为默认的 dig 环境变量所保存的地方.如果没有,那么会在当前工作目录下创建 ``DiG.env ''
注意: LOCALDEF 是特定针对 dig 解析程序, 而它不会影响标准解析程序库的操作.
每当 dig 执行时,它会查找 ``./DiG.env '' 或者在shell环境变量 LOCALDEF 中指定的文件. 如果这样的文件存在而且可读,那么在解释任何参数之前, 先从该文件中恢复环境变量.
-envset
该标识只影响批处理查询的运行.当在 dig 的批处理文件一行上指定了 ``-envset '' 时,在参数之后的 dig 环境变量会被解释为批处理文件执行期间默认的环境变量, 或者直到指定了 ``-envset '' 的下一行为止.
-[no ] cm stick
该标识只影响批处理查询的运行. 它指定 dig 环境变量(通过 ``-envset '' 开关变量初始化读入或设置)会在 dig 批处理文件每次查询(行)之前重建. 默认的 ``-nostick '' 表示 dig 环境变量不是固定的,因而在 dig 批处理文件中单行上指定的选项将对剩余的行继续产生作用(也即,它们不会恢复成 ``sticky(固定的)'' 默认值).
+ Aq query-option
``+'' 用来指定一个在查询信息包中需修改的或者需用来修改 dig 输出细节的选项.这些选项中的许多与 nslookup(8) 所承认的参数相同. 如果一个选项需带参数,那么格式如下:
+ keyword [= value ]
绝大多数关键字可简写. ``+'' 选项的解释是非常直白的 --- 值与它的关键字之间千万不能用空格分隔. 当前可用的关键字有:
Keyword Abbrev. Meaning [default]
(关键字) (缩写) (含义) [默认值]
[no ] debug (deb )
打开/关闭调试模式 Bq Cm deb
[no ] d2
打开/关闭特殊的调试模式 Bq Cm nod2
[no ] recurse (rec )
使用/不使用递归查询 Bq Cm rec
retry= file ... (ret )
设置重试次数为# Bq 4
time= file ... (ti )
设置超时长度为#秒 Bq 4
[no ] ko
保留公开的选项(keep open options)(隐含vc) Bq Cm noko
[no ] vc
使用/不使用虚拟电路 Bq Cm novc
[no ] defname (def )
使用/不使用默认的域名 Bq Cm def
[no ] search (sea )
使用/不使用域搜索列表 Bq Cm sea
domain= NAME (do )
设置默认的域名为 NAME
[no ] ignore (i )
忽略/不忽略截断(trunc.)错误 Bq Cm noi
[no ] primary (pr )
使用/不使用主服务器 Bq Cm nopr
[no ] aaonly (aa )
表示只包含授权查询的标识 Bq Cm noaa
[no ] cmd
重复(echo)解释的参数 Bq Cm cmd
[no ] stats (st )
显示查询统计信息 Bq Cm st
[no ] Header (H )
显示基本的包头 Bq Cm H
[no ] header (he )
显示包头的标识 Bq Cm he
[no ] ttlid (tt )
显示TTLs(Time to Live) Bq Cm tt
[no ] cl
显示等级信息 Bq Cm nocl
[no ] qr
显示向外的查询 Bq Cm noqr
[no ] reply (rep )
显示响应信息 Bq Cm rep
[no ] ques (qu )
显示询问部分 Bq Cm qu
[no ] answer (an )
显示应答部分 Bq Cm an
[no ] author (au )
显示授权的部分 Bq Cm au
[no ] addit (ad )
显示附加的部分 Bq Cm ad
pfdef
设置为默认显示位
pfmin
设置为最小的默认显示位
pfset= #
设置显示位为# (#可以为十六进制/八进制/十进制)
pfand= file ...
位和显示位设为#(bitwise and print flags with #)
pfor= file ...
位或显示位设为#(bitwise or print flags with #)
当发送数据报查询时, retry 和 time 选项会影响解析程序库的重传策略.其算法如下:
for i = 0 to retry - 1
for j = 1 to num_servers
send_query
wait((time * (2**i)) / num_servers)
end
end
(注意: dig 通常取 ``num_servers '' 的值为1 . )
DETAILS(细节)
Dig 以前要求BIND的 resolver(3) 库的版本作一些细微的修改. 从BIND 4.9起,BIND的解析程序已经修补好并可以正常地与 dig 一起工作. 实质上, dig 在解释参数和设置适合的参数时是直来直去的 (虽然并不巧妙) Dig 会用到 resolver(3) 的例程 Fn res_init , Fn res_mkquery , Fn res_send 以及访问 Ft _res 结构.
ENVIRONMENT(环境变量)
LOCALRES
用来替换Pa /etc/resolv.conf的文件
LOCALDEF
默认的环境变量文件
另见上面对 -envsav -envset 和 -[no ] stick 选项的说明.
FILES(相关文件)
/etc/resolv.conf
初始化的域名和域名服务器地址
./DiG.env
默认的保存默认选项的文件
SEE ALSO(另见)
named(8), resolver(3), resolver(5), nslookup(8).
STANDARDS(标准)
RFC 1035.
AUTHOR(作者)
Steve Hotz hotz@isi.edu
ACKNOWLEDGMENTS(致谢)
Dig 使用了源自 nslookup(8) 的函数, 其作者为Andrew Cherenson.
BUGS
Dig 是蠕变特色("creeping featurism")的一个典型实例 -- 这是因在其开发过程中就考虑到了一些潜在应用而导致的结果. 它可能会从这种严格的限定中受益.同样, 他们设立的显示位以及条目的间隔尺寸很明显地也是一种十分特别的创意.
当问题出在解析程序身上时, Dig 不会总是能够正常地退出(在适合的状况下) Po Sy 注意: 绝大多数一般的exit情况是能够处理的 Pc . 当运行于批处理模式下时尤其恼火. 如果不能正常退出(又无法俘获)的话, 那么整个批处理将终止;如果俘获了这样的事件, dig 就只是继续下一个查询罢了.
*************************
8. 参考文献
http://www.isc.org/index.pl?/sw/bind/FAQ.php
Building A Debian DNS System
Two-in-one DNS server with BIND9
Traditional DNS Howto
DNS配置过程/debian
鸟哥的 Linux 私房菜
http://www.cublog.cn/opera/showart.php?blogid=12066&id=60600
http://blog.csdn.net/marcolu/archive/2004/06/30/30735.aspx
使用TSIG和DNSSEC加固域名服务器
BIND Manual Pages, BIND 9 User Guide
http://www.bind9.net/manual/bind/9.3.2/Bv9ARM.ch06.html#options
http://edu.tmn.cn/html/5/48/2005223/234756.htm
bind-9.3.1 + mysql-4.1.9 + web管理详细配置全过程
http://osmond.cn/rh9/slides/toc.html
****************************
9. 附录
BIND相关的一些工具介绍
dig
dig查询DNS服务器。
host
host是一个DNS查找工具。
rndc
rndc控制BIND的操作。
rndc-confgen
rndc-confgen生成rndc.conf文件
named-checkconf
named-checkconf检查named.conf文件的语法。
named-checkzone
named-checkzone检查区域文件的合法性。
lwresd
lwresd是为本地进程提供的只有缓存的名字服务器。
named
named是名字服务器守护进程。
dnssec-signzone
dnssec-signzone生成带有签名的区域文件。
dnssec-signkey
dnssec-signkey为区域文件密钥集生成签名。
dnssec-keygen
dnssec-keygen是DNS密钥生成器。
dnssec-makekeyset
dnssec-makekeyset利用dnssec-keygen生成的一个或多个密钥创建密钥集。
nsupdate
nsupdate用于提交DNS更新请求。
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/25162/showart_205028.html |
|