分享

BIND配置文件详解

 sailorhzr 2010-09-27

BIND配置文件语法介绍
BIND配置文件语法介绍
logging 和options 语句只在每个配置中出现一次。
 
1.acl语句
acl语句的定义和使用
acl 语句给一个地址匹配表赋予了一个象征名称。它的名字来自于地址匹配列表的最基本功能:访问控制表列(ACLs)。
注意,一个地址表名必须首先在acl中定义了,然后才能在别处使用;提前调用是不允许的。
acl acl-name {address_match_list};
下列ACLs 组成:
acls
localhost 和localnets 的ACLs 目前不支持IPV6(也就是说,localhost不匹配主机的IPV6地址,localnets不匹配连上IPV6 网络的主机),因为缺乏确定本地IPV6 主机地址的标准方法。
 
2.controls语句
控制语句controls的定义和使用
controls {
inet ( ip_addr | * ) [ port ip_port ] allow { address_match_list }
keys { key_list };
[ inet ...; ]
};
controls 语句定义了系统管理员使用的,有关本地域名服务器操作的控制通道。这些控制通道被rndc用来发送命令,并从域名服务器中检索非DNS的结果。
 
inet 控制通道是一个监听在ip_addr(可以是ipv4或ipv6地址)地址上的ip_port端口的TCP socket。ip_addr 是“*”的话,则说明是一个ipv4的通配符;允许接受系统上的任何IPV4地址上的用户连接。要想监听所有ipv6地址上的连接,则应该使用“::”作 为ip_addr。如果仅想在本地主机上使用rndc,建议使用loopback 地址(127.0.0.1 或::1)以获得最大安全性。
 
allow 和keys子语用来限制通过控制通道发出命令的能力。根据address_match_list中的定义,来监控控制通道上的用户连接。 address_match_list中的key_id成员则被忽略,反之则根据key_list来单独的表示。每个在key_list中的key_id 都允许用来鉴别通过控制通道传送的命令和响应,这些服务器和用户端之间的命令和响应都经过了数字签名的技术处理。所有经过控制通道的命令都必须使用设置的 密匙进行加密。如果没有设置controls语句,named就会建立一个默认控制通道,监听loopback地址127.0.0.1 和对应的IPV6地址::1。当有一个controls 语句,但没有key子句时,named将会试着从文件/etc/rndc.key(或者任意在BIND编译时设定的sysconfdir)中读取命令通道 密匙。用rndc-confgen –a 命令,创建一个rndc.key文件。
 
rndc.key 是用来简化从BIND8系统上的升级过程,因为BIND8 在它的命令通道中没有使用数字签名,也就没有key子句。这样,在BIND9安装后执行rndc-confgen –a 命令,BIND9就可以继续使用和BIND8一样的配置文件,并仍然使用类似于BIND8中的ndc一样的工作方式。既然rndc.key 的特性只是用于兼容BIND8配置文件,所以它的配置就没有什么高难度。
 
当 用户想修改加密的信息时,当然不能简单的修改密匙名称和加密程度,而应该用用户自己的密匙来生成新的rndc.conf文件。rndc.key文件也有自 己的读取权限设置,只有文件的所有者(运行named的用户)可以访问。如果用户要求能有更多的用户能够使用rndc,则生成rndc.conf文件时, 将文件属组的权限置为可读,并将这些用户归入这个组就可以了。
要想禁止掉命令通道,则使用一条空controls语句:controls { }; 即可。
 
3.include语句
include语句的定义和使用
include 文件名;
include语句通过允许对配置文件的读或写,来简化对配置文件的管理。例如,它可以包含多个只能由域名服务器读取的私人密匙(private key)。
 
4. key语句
key语句的定义和使用
key key_id {
algorithm string;
secret string;
};
key 语句定义了一个用于TSIG的共享密匙。
key 语句可以出现在配置文件的开始或者在一个view语句中。定义在开始的key语句可以在所有视图中应用。在controls语句中使用的key必须事先定义在文件的开始。
key_id,也叫做密匙名,是确认一个域名的唯一密匙。可以在一个“server”语句中使用,使得发给这个服务器的请求都会用这个密匙进行加密,或者用于确认来自于地址匹配列表中的主机的请求,是否已经用这个名字、算法和secret的密匙进行了加密。
algorithm_id 是一个标记安全/鉴定的字符串。目前唯一由TSIG鉴别支持的算法是hmac-md5。secret_string 是算法要使用的机密级,是一个64位编码的字符串。
 
5.logging语句
日志logging语句的定义和使用
logging {
[ channel channel_name {
( file path name
[ versions ( number | unlimited ) ]
[ size size_spec ]
| syslog syslog_facility
| stderr
| null );
[ severity ( critical | error | warning | notice | info |debug [level ] | dynamic ); ]
[ print-category yes or no; ]
[ print-severity yes or no; ]
[ print-time yes or no; ]
}; ]
[ category category_name {
channel_name ; [ channel_name ; … ]
}; ]
...
};
logging语句为域名服务器设定了一个多样性的logging选项。它的channel短语对应于输出方式、格式选项和分类级别,它的名称可以与category短语一起定义多样的日志信息。
 
只用一个logging语句就可以用来定义多个channel和category。如果没有logging 语句的话,logging设置就是:
logging {
category "unmatched" { "null"; };
category "default" { "default_syslog"; "default_debug"; };
};
 
在 BIND9中,logging的配置只有在整个配置文件被读取后才被执行。而在BIND8中,logging部分被读取后就开始执行了。当服务器启动时, 所有在配置文件中关于语法错误的logging信息都转到缺省通道(channel)中,或者使用”-g”选项,指定转成标准错误。
 
A.channel 短语
所 有日志会输出到一个或多个channel中;你可以定义所有你想要的通道。每个通道的定义必须包括一个目的字句,用来确定所选的相关通道的信息,将会被输 出到一个文件,或者到一个特殊的syslog工具,或者到一个标准错误流,或者被忽略。它也可以随意的限制通道能接受的信息级别(默认值info),定义 是否包含一个由named产生的时间标记,或者是否包含分类的名称、级别等(默认是不包含任何内容)。
目的子句为null时,会使所有发送给通道的信息被丢弃;那样的话,其他通道选项就没有意义了。
目的子句为file 时,会使通道的内容输出到一个磁盘文件。它可以包含这个文件的大小和该文件可以保存多少个版本。
如 果使用versions日志文件选项,named就会自动保留多个版本的日志文件。例如,如果选择保存文件lamers.log的三个老版本,那么在它被 打开的时候lamers.log.1被更名为lamers.log.2,lamers.log.0 被更名为lamers.log.1 ,lamers.log 被更名为lamers.log.0。也可以设置version unlimited,这样就没有备份版本的限制了。
如 果对日志文件设置了size选项,那么仅当此文件超过了设定的大小时,系统就会进行更名。默认情况下不储存备份文件;所有存在的日志文件被简单进行追加。 文件的size 选项用来限制日志的增长。如果文件超过了限制,又没有versions选项,则named 就会停止写入文件。如果保留了备份版本,则备份文件如上所述进行滚动命名,然后开始创建一个新的文件。如果没有versions选项,也没有其它的机制来 删除或减小日志文件,则系统就不会有数据继续写入日志中。默认状态是不限制文件的大小的。
size 和versions 选项的使用例子:
channel "an_example_channel" {
file "example.log" versions 3 size 20m;
print-time yes;
print-category yes;
};
syslog 目的子句是把通道指向系统日志。它的参数是一个syslog的前缀,如syslog帮助中所述。syslog是怎样处理带有这些前缀的信息,可以参考syslog.conf 的帮助信息。
severity子句象syslog中的”priorites”一样工作,唯一区别的是用户可以直接写入一个文件,而不是使用syslog写入一个文件。不到严重级的信息将不会被通道选择;高严重级的信息将会被接受。
如 果用户正在使用syslog,那么syslog.conf 的优先级也会决定什么会最终通过。例如,将channel facility和severity定义成daemon和debug,就不会只记录通过syslog.conf的daemon.warning信息,后者 会使severity是info和notice的信息被丢弃。如果情况相反,named就会只记录warning或更高级别的信息,而syslogd则会 记录来自于通道的所有信息。
stderr目的子句将通道输出 到服务器的标准错误流。它用于服务器在前台运行的情况下,例如,当处于debug模式的时候,服务器能提供丰富的调试信息。如果服务器的全局debug级 别(globe debug level)大于0,debug 模式将被激活。全局debug级别可以通过在启动named时设置“-d”参数加一个正数,或运行rndc trace来设置。如果要关闭debug模式,则将全局debug 级别设置成0,或运行rndc notrace。服务器中所有的debug信息有一个debug级别,高调试级给出更详细的输出。
例如,指定调试严重级别的通道:
channel "specific_debug_level" {
file "foo";
severity debug 3;
};
上例中,服务器在处于debug模式的时候都会收到3级和比3级小的级别的调试信息,全局的调试级别在这里不起作用。dynamic严重级别的通道将使用服务器全局debug级别决定打印哪些信息。
如 果使用了print-time参数,则日期和时间也将会记录下来。print-time也可以针对syslog的通道进行设置,但因为syslog也打印 日期和时间,所以一般来讲,这没有什么意义。如果设置了print-category 参数,则信息的分类也会记录下来。如果设置了print-severity参数,则信息的严重级别也会记录下来。print-xxx 选项可以进行多重组合,单输出格式都是这个顺序:时间、分类、严重级别。
 
下面是一个当三个打印选项都设置的例子:
28-Feb-2000 15:05:32.863 general: notice: running
下面是named 提前定义的四个通道,用于指定缺省的日志。
channel "default_syslog" {
syslog daemon; // 发送给syslog 的daemon facility
severity info; //只发送此优先级和更高优先级的信息
};
channel "default_debug" {
file "named.run"; // 写入工作目录下的named.run 文件。注意:如果服务器用-f 参数启动,则"named.run"会被stderr 所替换。
severity dynamic; // 按照服务器当前的debug 级别记录日志
};
channel "default_stderr"{
stderr; //写到stderr
severity info; //只发送此优先级和更高优先级的信息
};
channel "null" {
null; // 丢弃所有发到此通道的信息
};
default_debug 通道有特殊的性质:只有当服务器的debug级别非0的时候,它才产生输出。一般来说,它会在服务器的工作目录中写入named.run文件。
因为安全原因,当在命令行选项中使用了“-u”参数后,只有当named使用了新的UID
后,named.run文件才会产生,以root身份启动和运行的named所产生的debug信息将会被丢弃。如果用户需要得到这些输出,则必须使用“-g”参数运行服务器,并重新将标准错误定向到一个文件中去。
一旦定义好一个通道,它就不能被重新定义。这样就不能修改内置的通道,但是可以通
过把分类指向你已经定义的通道,来修改默认的日志记录。
 
B. category 短语
这里存在许多分类,用户可根据需要定义想看到或不想看到的日志。如果你不将某个分类指定到某些通道的话,那么在这个分类的日志信息就会被发送到default分类通道中。如果用户没有设定缺省的分类,下列"default"则会被系统使用:
category "default" { "default_syslog"; "default_debug"; };
 
作为一个例子,假定你要在文件中记录安全事件,但您也要保留缺省的日志文件。最好按照下面配置:
channel "my_security_channel" {
file "my_security_file";
severity info;
};
category "security" {
"my_security_channel";
"default_syslog";
"default_debug";
};
为了丢弃一个分类中的所有信息,可以设定null 通道:
category "xfer-out" { "null"; };
category "notify" { "null"; };
 
下面是可用的分类和相关的简明描述,以后的BIND版本中会包含更多的分类。
bind_category
 
 
6.options语句
options语句的定义和使用:
options语句用来设置可以被整个BIND使用的全局选项。这个语句在每个配置文件中只有一处。如果出现多个options语句,则第一个options的配置有效,并且会产生一个警告信息。
如果没有options语句,则每个选项使用缺省值。
options {
[ version version_string; ]
[ directory path_name; ]
[ named-xfer path_name; ]
[ tkey-domain domainname; ]
[ tkey-dhkey key_name key_tag; ]
[ dump-file path_name; ]
[ memstatistics-file path_name; ]
[ pid-file path_name; ]
[ statistics-file path_name; ]
[ zone-statistics yes_or_no; ]
[ auth-nxdomain yes_or_no; ]
[ deallocate-on-exit yes_or_no; ]
[ dialup dialup_option; ]
[ fake-iquery yes_or_no; ]
[ fetch-glue yes_or_no; ]
[ has-old-clients yes_or_no; ]
[ host-statistics yes_or_no; ]
[ minimal-responses yes_or_no; ]
[ multiple-cnames yes_or_no; ]
[ notify yes_or_no | explicit; ]
[ recursion yes_or_no; ]
[ rfc2308-type1 yes_or_no; ]
[ use-id-pool yes_or_no; ]
[ maintain-ixfr-base yes_or_no; ]
[ forward ( only | first ); ]
[ forwarders { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ]
[ check-names ( master | slave | response )( warn | fail | ignore ); ]
[ allow-notify { address_match_list }; ]
[ allow-query { address_match_list }; ]
[ allow-transfer { address_match_list }; ]
[ allow-recursion { address_match_list }; ]
[ allow-v6-synthesis { address_match_list }; ]
[ blackhole { address_match_list }; ]
[ listen-on [ port ip_port ] { address_match_list }; ]
[ listen-on-v6 [ port ip_port ] { address_match_list }; ]
[ query-source [ address ( ip_addr | * ) ] [ port ( ip_port | * ) ]; ]
[ max-transfer-time-in number; ]
[ max-transfer-time-out number; ]
[ max-transfer-idle-in number; ]
[ max-transfer-idle-out number; ]
[ tcp-clients number; ]
[ recursive-clients number; ]
[ serial-query-rate number; ]
[ serial-queries number; ]
[ transfer-format ( one-answer | many-answers ); ]
[ transfers-in number; ]
[ transfers-out number; ]
[ transfers-per-ns number; ]
[ transfer-source (ip4_addr | *) [port ip_port] ; ]
[ transfer-source-v6 (ip6_addr | *) [port ip_port] ; ]
[ notify-source (ip4_addr | *) [port ip_port] ; ]
[ notify-source-v6 (ip6_addr | *) [port ip_port] ; ]
[ alsonotify { ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ]
[ max-ixfr-log-size number; ]
[ coresize size_spec ; ]
[ datasize size_spec ; ]
[ files size_spec ; ]
[ stacksize size_spec ; ]
[ cleaning-interval number; ]
[ heartbeat-interval number; ]
[ interface-interval number; ]
[ statistics-interval number; ]
[ topology { address_match_list }];
[ sortlist { address_match_list }];
[ rrset-order { order_spec ; [ order_spec ; ... ] } };
[ lame-ttl number; ]
[ max-ncache-ttl number; ]
[ max-cache-ttl number; ]
[ sig-validity-interval number ; ]
[ min-roots number; ]
[ use-ixfr yes_or_no ; ]
[ provide-ixfr yes_or_no; ]
[ request-ixfr yes_or_no; ]
[ treat-cr-as-space yes_or_no ; ]
[ min-refresh-time number ; ]
[ max-refresh-time number ; ]
[ min-retry-time number ; ]
[ max-retry-time number ; ]
[ port ip_port; ]
[ additional-from-auth yes_or_no ; ]
[ additional-from-cache yes_or_no ; ]
[ random-device path_name ; ]
[ max-cache-size size_spec ; ]
[ match-mapped-addresses yes_or_no; ]
};
 
version
回答针对服务器版本的请求时的内容。缺省返回的是服务器的真实版本。
directory
服务器的工作目录。配置文件中所有使用的相对路径,指的都是在这里配置的目录下。大多数服务器的输出文件(如named.run)都缺省生成在这个目录下。如果没有设定目录,工作目录缺省设置为服务器启动时的目录‘.’。指定的目录应该是一个绝对路径。
named-xfer
这个选项已经被废弃了。它在BIND8 中,它用来给named-xfer程序设定路径名。在BIND9中,不需要单独的named-xfer程序;它的功能已经内置在域名服务器中。
tkey-domain
这 个域名将会附带在由TKEY 生成的所有共享密匙名字的后面。当用户请求进行TKEY交换时,它会为密匙设定或不设定所要求的名称。如果设置了tkey_domain,共享密匙的名字 将会是"client specified part"(用户设定的部分)+ "tkey-domain"。否则,共享密匙的名字将是"random hex digits"(随机的16 进制数)+ "tkey-domain"。在大多数情况下,domainname应该是服务器的域名。
tkey-dhkey
针对使用Diffie-Hellman 的TKEY模式的用户,服务器用来生成共享密匙的Diffie-Hellman 密匙。服务器必须可以从工作目录中调入公共和私人密匙。大多数情况下,密匙的名称应该是服务器的主机名。
dump-file
当执行rndc dumpdb命令时,服务器存放数据库文件的路径名。如果没有指定,缺省名字是named_dump.db。
memstatistics-file
服务器输出的内存使用统计文件的路径名。如果没有指定,默认值为named.memstats。
注意:还没有在BIND9中实现!
pid-file
进程ID文件的路径名。如果没有指定,默认为/var/run/named.pid。pid-file是给那些需要向运行着的服务器发送信号的程序使用的。
statistics-file
当使用rndc stats命令的时候,服务器会将统计信息追加到的文件路径名。如果没有指定,默认为named.stats在服务器程序的当前目录中。
port
服务器用来接收和发送DNS协议数据的UDP/TCP端口号。默认为53。这个选项主要用于服务器的检测;因为如果不使用53端口的话,服务器将不能与其它的DNS进行通讯。
random-device
服 务器使用的entropy源:entropy主要用于DNSSEC操作,如TKEY的数据交换和加密域的动态更新。此选项指定了entropy将会从哪个 设备(或文件)中读取信息。如果它是一个文件,则当文件耗尽后,需要entropy的操作将会失败。如果没有指定,默认值是/dev/random(或等 价的),如果它存在,否则就是没有。random-device选项是在服务器启动时,初始化配置时起作用的,在以后的重启时则被忽略。
 
A.Boolean 选项
auth-nxdomain
如果是yes,那么AA位将一直设置成NXDOMAIN响应,甚至在服务器不是授权服务器的情况下都是这样的。默认值是no;这与BIND8不同。如果用户使用的是非常老版本的DNS软件,则有必要把它设置成yes。
deallocate-on-exit
此选项在BIND8中用于检查出口处内存泄露。BIND9忽略此选项,并始终进行检查。
dialup
如果是yes, 那么服务器将会像在通过一条按需拨号的链路进行域传送一样,对待所有的域(按需拨号就是在服务器有流量的时候,链路才连通)。根据域类型的不同它有不同的 作用,并将集中域的维护操作,这样所有有关的操作都会集中在一段很短的时间内完成,每个heartbeat-interval一次,一般是在一次调用之中 完成。它也禁止一些正常的域维护的流量。默认值是no。
dialup选项也可以定义在view和zone语句中,这样就会代替了全局设置中dialup的选项。
如果域是一个主域,服务器就会对所有辅域发送NOTIFY请求。这将激活辅域名服务器中的对域的序列号的检验。这样当建立一个连接时,辅域名服务器才能确认这个域的传输合法性。
如果这个域是一个辅域或是末梢域(stub zone),那么服务器将会禁止通常的“zone up to date”(refresh)请求,为了能发送NOTIFY请求,只有在heartbeat-interval 过期之后才执行。
通过下列的设置,可以实现更好的控制。
1、notify 只发送NOTIFY信息。
2、notify-passive 发送NOTIFY信息,并禁止普通的刷新(refresh)请求。
3、refresh 禁止普通的刷新处理,当heartbeat-interval 过期时才发送刷新请求。
4、passive 只用于关闭普通的刷新处理。
fake-iquery
在BIND8中,此选项用来模拟陈旧的DNS查询类型IQUERY。BIND9不再进行IQUERY模拟。
fetch-glue
这个选项以后不再使用。
has-old-clients
这个选项在BIND8中执行有问题,BIND9则忽略了这个选项。为了达到has-old-clients yes的预期效果,可以设定两个独立选项auth-nxdomain yes和rfc2308-type1 no来代替。
host-statistics
在BIND8中,它可以保留每台和域名服务器交互的主机统计信息。BIND9中不支持。
maintain-ixfr-base
此选项不再使用了。在BIND8用于判定是否保存了增量域传输的处理日志。BIND9任何可能的时候都会保存传输日志。如果需要禁止流出的增量域传输,可以使用provide-ixfr no。
minimal-responses
如果是yes,当产生响应的时候,服务器将只会按照需要将记录添加到authority和additional的数据部分。(例如,delegations,negative responses)。这样会改善服务器的性能。默认值为no。
multiple-cnames
这个选项在BIND8中使用,允许一个域名承认多条CNAME记录(与DNS标准相违
背)。BIND9.2在主hosts文件和动态更新中都严格强制执行CNAME规则。
notify
如果是yes(默认),当一个授权的服务器修改了一个域后,DNS NOTIFY信息被发送出去。此信息将会发给列在域NS记录上的服务器(除了由SOA MNAME标示的主域名服务器)和任何列在also-notify选项中的服务器。
如果是explicit,则notify将只发给列在also-notify中的服务器。如果是no,就不会发出任何报文。
notify选项也可能设定在zone语句中,这样它就替代了options中的notify 语句。如果notify会使得辅域名服务器崩溃,就需要将此选项关闭。
recursion
如 果是yes,并且一个DNS询问要求递归,那么服务器将会做所有能够回答查询请求的工作。如果recursion是off的,并且服务器不知道答案,它将 会返回一个推荐(referral)响应。默认值是yes。注意把recursion设为no,不会阻止用户从服务器的缓存中得到数据,它仅仅阻止新数据 作为查询的结果被缓存。服务器的内部操作还是可以影响本地的缓存内容,如NOTIFY地址查询。
rfc2308-type1
设置成yes 将会使得服务器发送NS 记录和关于negative answer 的SOA记录。默认值为no。
注:BIND9 中还不支持。
use-id-pool
此选项已经不再使用。BIND9 始终都是从池中分配请求ID的。
zone-statistics
如果是yes,缺省情况下,服务器将会收集在服务器所有域的统计数据。这些统计数据可以通过使用rndc stats来访问,rndc stats命令可以将这些信息转储到statistics-file定义的文件中去。
use-ixfr
这个选项不再使用。如果需要针对一个或多个特殊的服务器关闭IXFR,可以参考provide-ixfr中的内容。
provide-ixfr
参阅中关于provide-ixfr的陈述。
request-ixfr
参阅关于request-ixfr的陈述。
treat-cr-as-space
这 个选项应用于BIND8中,使服务器正确处理回车(”\r”)字符,就象其它的空格或tab字符一样。这样可以便于在unix系统上加载由NT或DOS系 统生成的域文件。在BIND9中,UNIX”的\n”和DOS 的”\r\n”都可以正确处理为换新行,这个选项就被忽略了。
additional-from-auth
additional-from-cache
当回答具有additional数据的请求,或者当在CNAME 和DNAME串的后面时,这些选项控制一个权威服务器的操作。
当这两个选项都被设成yes(默认状态),并且查询的是授权的数据(这个域就配置在本地服务器中)时,回答中的additional部分的数据将使用来自于其它授权域和cache。
在许多情况下这是不需要的,比如在缓存内容的正确性受到怀疑的情况下,或是在某些辅域可能被非法修改的服务器。还有,避免对这些additional数据的搜索将会加速服务器运转。
例如,如果一个查询需要主机foo.example.com的MX记录,找到的记录是"MX 10
mail.example.net",如果知道的话, mail.example.net的地址记录(A,A6 和AAAA)也会被提供出来。把选项设置为no,则禁止了这种操作。
这些选项用于授权的服务器,或者是授权的视图中。把它们设成no,但没有同时设置recursion no,将会使得服务器忽略这些选项,并记录一个警告日志。
设定additional-from-cache为no实际上针对additional信息的查询和正在响应的查询,都禁止了缓存的使用。这常常使用在一台授权的服务器中,因为在这里缓存数据的正确性非常重要。
当 一台域名服务器不提供递归查询时,并且查询的名称并不在本地域中,一般会对根服务器或者其他已知的上级服务器回答"upwards referral(向上推荐)"。既然在向上查询中的数据来自于缓存,那么当additional-from-cache被设定为no时,服务器就不能提 供向上推荐。相反,它会使用REFUSED(拒绝)回答这些查询。因为向上推荐不是在用户解析过程中需要的,所以就不会出任何问题。
match-mapped-addresses
如 果是yes,那么一个ipv4映射成的ipv6地址就会匹配任何地址匹配表中能匹配于对应的ipv4 地址的记录。打开这个选项,对于运行了ipv6的linux系统有时非常有用,这样通过地址映射,就可以使得ipv4的TCP连接(如域传送)实现在 Ipv6的soket上,因为地址匹配列表是给Ipv4设计的。
 
B. 转发
转发功能可以用来在一些服务器上产生一个大的缓存,从而减少到外部服务器链路上的流量。它可以使用在和internet没有直接连接的内部域名服务器上,用来提供对外部域名的查询。只有当服务器是非授权的,并且缓存中没有相关记录时,才会进行转发。
forward
此选项只有当forwarders列表中有内容的时候才有意义。当值是First,默认情况下,使服务器先查询设置的forwarders,如果它没有得到回答,服务器就会自己寻找答案。如果设定的是only,服务器就只会把请求转发到其它服务器上去。
forwarders
设定转发使用的ip地址。默认的列表是空的(不转发)。转发也可以设置在每个域上,这样全局选项中的转发设置就不会起作用了。用户可以将不同的域转发到服务器上,或者对不同的域可以实现forward only或first的不同方式,也可以根本就不转发。
 
C. 访问控制
可以根据用户请求使用的IP地址进行限制。
allow-notify
设定哪个主机上的辅域(不包括主域)已经进行了修改。allow-notify也可以在zone语句中设定,这样全局options中的allow-notify选项在这里就不起作用了。但它只对辅域有效。如果没有设定,默认的是只从主域发送notify信息。
allow-query
设定哪个主机可以进行普通的查询。allow-query也能在zone语句中设定,这样全局options中的allow-query选项在这里就不起作用了。默认的是允许所有主机进行查询。
allow-recursion
设定哪台主机可以进行递归查询。如果没有设定,缺省是允许所有主机进行递归查询。注意禁止一台主机的递归查询,并不能阻止这台主机查询已经存在于服务器缓存中的数据。
allow-v6-synthesis
设定哪台主机能接收对ipv6的响应。
allow-transfer
设定哪台主机允许和本地服务器进行域传输。allow-transfer也可以设置在zone语句中,这样全局options中的allow-transfer选项在这里就不起作用了。如果没有设定,默认值是允许和所有主机进行域传输。
blackhole
设定一个地址列表,服务器将不会接收来自这个列表的查询请求,或者解析这些地址。从这些地址来的查询将得不到响应。默认值是none。
 
D. 接口
接口和端口(服务器回答来自于此的询问)可以使用listen-on选项来设定。listen-on使用可选的端口和一个地址匹配列表(address_match_list)。服务器将会监听所有匹配地址列表中所允许的端口。如果没有设定端口,就使用默认的53。
允许使用多个listen-on语句。例如:
listen-on{ 5.6.7.8; };
listen-on port 1234 { !1.2.3.4; 1.2/16; };
将在5.6.7.8 的ip地址上打开53端口,在除了1.2.3.4的1.2 网段上打开1234 端口。
如果没有设定listen-on,服务器将在所有接口上监听端口53。
listen-on-v6选项用来设定监听进入服务器的ipv6请求的端口。
服务器并不象在ipv4中那样对每个IPV6端口地址绑定一个独立的socket。相反,它一直监听ipv6通配的地址。这样,对于listen-on-v6语句唯一的address_match_list的参数就是:{ any; }和{ none;}
多个listen-on-v6选项可以用来监听多个端口:
listen-on-v6 port 53 { any; };
listen-on-v6 port 1234 { any; };
要使服务器不监听任何ipv6地址,使用:
listen-on-v6 { none; };
如果没有设定listen-on-v6语句,服务器将不会监听任何ipv6地址。
 
E. 查询地址
如果服务器查不到要解析的地址,它将会查询其它域名服务器。query-source可以用来设定这类请求所使用的地址和端口。对于使用ipv6发送的查询,有一个独立的query-source-v6选项。如果address是*或者被省略了,则将会使用一个通配的IP地址
(INADDR ANY)。如果port是*或者被省略了,则将会使用一个随机的大于1024的端口。
默认为:
query-source address * port *;
query-source-v6 address * port *;
注:query-source选项中设置的地址是同时用于UDPTCP两种请求的,但是port仅仅用
UDP请求。TCP请求使用的是随机的大于1024的端口。
 
F. 域传输
BIND有适当的机制来简化域传输,并限定系统传输的负载量。下列设定应用于域传输:
also-notify
定 义一个用于全局的域名服务器IP地址列表。无论何时,当一个新的域文件被调入系统,域名服务器都会向这些地址,还有这些域中的NS记录发送NOTIFY信 息。这有助于更新的域文件尽快在相关的域名服务器上收敛同步。如果一个also-notify列表配置在一个zone语句中,全局options中的 also-notify语句就会在这里失效。当一个zone-notify语句被设定为no,系统就不会向在全局中also-notify列表中的IP地 址发送NOTIFY消息。缺省状态为空表(没有全局通知列表)。
max-transfer-time-in
比设定时间更长的进入的域传输将会被终止。默认值是120分钟(2小时)。
max-transfer-idle-in
在设定时间下没有任何进展的进入域传输将会被终止。默认为60分钟(1小时)。
max-transfer-time-out
运行时间比设定的时间长的发出的域传输将会被终止。默认为120分钟(2小时).
max-transfer-idle-out
在设定时间下没有任何进展的发出的域传输将会被终止。默认为60分钟(1小时)。
serial-query-rate
辅域名服务器将会定时查询主域名服务器,来确定域的串号是否改变。每个查询将会占用一些辅域名服务器网络带宽。为限制占用的带宽,BIND9可以限制每个查询发送的频率。serial-query-rate的值是一个整数,就是每秒能发送的最大查询数。默认值为20。
serial-queries
在BIND8中, serial-queries选项设定了在任何时候允许达到的最大的并发查询数。BIND9不限制串号查询的数量并忽略了serial-queries选项。它会使用serial-query-rate选项来限制查询的频率。
transfer-format
域传输可以用两种不同格式,one-answer和many-answer。transfer-format选项使用在主域名服务器上,用来确定发送哪种格式。one-answer在每个资源记录传输中使用一个
DNS消息。many-answer则将尽可能多的资源记录集中在一个消息中。many-answer是
更加有效的,但只有相对比较新的辅域名服务器才支持它,如BIND9、BIND8.x 和打了补丁的BIND4.9.5。默认的设置为many-answer。使用server语句中的相关选项,可以替代全局选项中的transfer-format设置。
transfers-in
可以同时运行的进入的域传输的最大值。默认值为10。增加transfers-in的值,可以加速辅域的收敛速度,但也可能增加本地系统的负载。
transfers-out
可以同时运行的发出的传输的最大值。超过限定的域传输请求将会被拒绝。默认值为10。
transfers-per-ns
从一台指定的远程域名服务器,同时进行的进入的域传输的最大值。默认值2。增加
transfers-per-ns的值,会加速辅域的收敛速度,但也可能增加远程系统的负载。使用
server语句中的transfer短语可以替代全局选项中的transfers-per-ns。
transfer-source
transfer- source决定在从外部域名服务器上得到域传送数据时,选哪个本地的ip地址使用在IPV4的TCP连接中。它可以选定IPV4的源地址,和可选的 UDP端口,用于更新的查询和转发的动态更新。不过不做设置,它会缺省挑选一个系统中的地址(常常是最靠近远程终端服务器的接口地址)。但这个地址必须已 经配置在远程终端的allow-tranfer选项中,才能进行域传送。此语句为所有的域设定了transfer-source,但如果view或 zone中也使用了transfer-source语句,则全局选项中的配置就在这里失效了。
transfer-source-v6
和transfer-source一样,只是域传输是通过IPV6执行的。
notify-source
notify-source确定使用哪些本地的源地址和可选的UDP端口,用于发送NOTIFY消息。这个地址必须在辅域名服务器的master域或在allow-notify中设置。它会为所有域设定
notify-source, 但如果view或zone中也使用了notify-source语句,则全局选项中的配置就在这里失效了。
notify-source-v6
与notify-source类似,但应用于ipv6地址的notify报文的发送。
 
G. 操作系统资源限制
可以限制服务器对许多系统资源的使用。这些就是通过调节资源限制的数值来完成的。例如,1G可以代替1073741824,限定一个十亿字节的限制。Unlimited 要求不限制使用,或者最大可用量。Default 将会使用服务器启动时的缺省值。
下列选项设定了域名服务器进程的操作系统资源占用限制。一些操作系统可能不支持一些
或所有的限制。在这样的系统中,当使用不被支持的限制时,会产生一个告警。
coresize
core dump文件的最大值尺寸。默认值为default
datasize
服务器可以使用的最大数据内存量。默认值为default。这是一个在服务器系统内存中
已经设置了的参数。如果服务器要超过这个限制的内存量,则会失败,这将使服务器不能
提供DNS服务。所以,这个选项作为一种限制服务器所使用的内存量的方式就不太有效,但是它能够将操作系统设置的太小的缺省数据尺寸增大。如果要限制服务器使用的内存量,可以使用max-cache-size和recursive-clients选项。
files
服务器可以同时打开的最大文件数。默认是unlimited。
stacksize
服务器可以使用最大的堆栈内存量。默认值为default。
 
H. 服务器资源限制
下列选项设定了服务器资源使用限制,这是由域名服务内部做的而不是操作系统设定的。
max-ixfr-log-size
此选项比较老;它由BIND8兼容接受或者忽略。
recursive-clients
服务器同时为用户执行的递归查询的最大数量。默认值1000,因为每个递归用户使用许多位内存,一般为20KB,主机上的recursive-clients选项值必须根据实际内存大小调整。
tcp-clients
服务器同时接受的TCP连接的最大数量,默认值100。
max-cache-size
服务器缓冲使用的最大内存量,用比特表示。但在缓存数据的量达到这个界限,服务器将会使记录提早过期这样限制就不会被突破。在多视图的服务器中,限制分别使用于每个视图的缓存。默认值没有限制,意味着只有当总的限制被突破的时候记录才会被缓存清除。
 
I. 周期性任务间隔
cleaning-interval
服务器将在cleaning-interval的每一时间中从缓存中清除过期的资源记录。默认为60分钟,如果设置为0,就不会有周期性清理。
heartbeat-interval
服务器将会为所有标记dialup的域运行维护任务,无论它的间隔在何时到期。默认为60分钟,合理值不超过1天(1440 分钟)。如果设定为0,不会为这些域产生域维护。
interface-interval
服务器将在每个interface-interval时间扫描网络接口表。默认为60分钟。如果设置为0,仅当配置文件被加载时才会进行接口扫描。在扫描之后,所有新接口上的监听器将会被打开(listen-on配置使用的接口)。关闭接口上的监听器将会被清除。
statistics-interval
域名服务器统计将会在每个statistics-interval时刻被记入日志。默认值60分钟,如果设为0,就没有统计数据记入日志。
注意:BIND9 不支持
 
J. 拓扑
当 服务器从一个域名服务器列表中选择一个域名服务器查询时,这些域名服务器是没有什么不同的,但是服务器会先选择在拓扑结构上距离自己最近的服务器去做解 析。拓扑语句使用一个地址匹配列表并且以一个特殊方式解释它。每个顶层列表元素被赋了一段距离,非否定元素得到它们在列表中的位置的距离,匹配距离表的开 头越近,它离服务器的距离就越小。否定匹配元素将会从服务器分配最大距离;没有匹配的地址将会得到一个比任何非否定表元素都远的并且比任何否定元素近的距 离。例如:
topology {
10/8;
!1.2.3/24;
{ 1.2/16; 3/8; };
};
最优先网段10的服务器,然后是在网络1.2.0.0(网络掩码255.255.0.0)和3.0.0.0(网络掩
码255.0.0.0);再就是没列出来的,但是没有否定的网段。否定的网段1.2.3 的主机(网络掩
码255.255.255.0)。
默认拓扑为:
topology { localhost; localnets; };
注意:BIND9不支持拓扑选项。
 
K. sortlist 语句
对 一个DNS询问的响应包括形成一个资源记录集(RR集)的多资源记录(RRs)。名称服务器将会以不确定的顺序返回在RRset中的RRs(参见 rrset-order语句)。用户端的解答器会重新适当的排列,也就是说,使用任何在本地网上的地址优先于其他的地址。尽管如此,不是所有的解答器可以 做到或者正确配置。当用户使用一个本地服务器的时候,服务器可以基于用户地址进行分类。这只要求配置名称服务器,而不是所有用户端。
sortlist 语句(如下)使用一个地址匹配表甚至比拓扑语句还要特殊的解释它。每个在sortlist 的顶层语句必须自己就是一个清楚的拥有一个或两个元素的地址匹配表。每个顶级表的第一个元素(可能是一个IP地址,一个IP前缀,一个ACL名称或者一个 地址匹配表)与查询源地址进行匹配检查直到找到匹配的地址。
一旦查询的源地址 被匹配,如果顶级语句只包括一个元素的话,真正的匹配于源地址的原始元素就被用来选择地址,对应的转移到了响应的开始。如果语句是两个元素的表,那么第二 个元素遵照拓扑语句中地址匹配表的方式进行处理。每个顶级元素被赋予一个距离和与响应的开头距离最近的地址。
在 下列例子中,任何来自于任何主机地址的查询将会得到本地网上第一首选地址的响应。下一个首选地址在网段192.168.1/24上,既可以在 192.168.2/24或192.168.3/24网段之后。从一台在192.168.1/24网段上的主机收到的查询将会优先本网段和 192.168.2/24和192.168.3/24网。而来自192.168.4/24或192.168.5/24上主机的查询将只优先直连的网段。
sortlist {
{ localhost; //IF 主机名
{ localnets;
192.168.1/24; //THEN 在下列网中最适合
{ 192.168.2/24; 192.168.3/24; }; }; }; //IF 在C类192.168.1
{ 192.168.1/24; //THEN 使用.1, 或.2 或.3
{ 192.168.2/24; 192.168.3/24; }; }; };
{ 192.168.2/24; //IF C类192.168.1
{ 192.168.2/24; //THEN使用2, 或.1 或.3
{ 192.168.1/24; 192.168.3/24; }; }; };
{ 192.168.3/24; //IF 在C类192.168.3
{ 192.168.1/24; 192.168.2/24; }; }; }; //THEN使用.3 或.1 或.2
};
};
下 个例子将给出一个本地主机和直接连接到网上的主机的合理的状态(behavior)。它很象BIND4.9.x分类的地址状态。从本地主机发给查询的响应 支持任何直接连接的网络,从其他直接连接网络上的主机发送给查询的响应优先在相同网段上的地址。对其他查询的响应没有分类。
sortlist {
{ localhost; localnets; };
{ localnets; };
};
 
L. RRset 排序
当多重记录在一个解答中被返回的时候,设定在响应中的记录顺序是很有用的.。
rrset-order语句允许对在多记录响应下的记录顺序的设定。参见sortlist语句。
一个order_spec定义如下:
[ class class_name ][ type type_name ][ name "domain_name"] order ordering
如果没有设定类,默认值为ANY。如果没有设定类型,默认值为ANY。如果没有设定
名称,默认值为”*”。
合法的排序值是:
fixed:记录以它们在域文件中的顺序
random:记录以随机顺序被返回
cyclic:记录以环顺序被返回
例如:
rrset-order {
class IN type A name "host.example.com" order random;
order cyclic;
};
将会使得任何处于IN类中的A类记录的响应以随机顺序返回,IN 类以"host.example.com"为后缀。其他的记录以循环记录被返回。
如果多重rrset-order语句出现,它们并不组合在一起,只适用于最后一个条。
注意:rrset-order语句不被BIND9支持,BIND9目前只支持"random-cyclic"排序,服务器随机选择RRset集中的开始点,有顺序返回在那个点开始的记录。如果需要的话围绕RRset
结尾。
 
M. 合成的IPV6响应
许 多现存的子域解答器支持ipv6的DNS查询(定义在RFC1986 中,使用AAAA 记录进行前向查询和ip6.int域中的”nibble labels”进行反向查询)但是不支持RFC2874-style 查询(使用A6记录和在ip6.arpa 中的二进制标签)对于那些希望继续使用子域解答器而不是转到
BIND9 lightweight 解答器的人来说,BIND 9提供一种自动把RFC1886-型查询转换成
RFC2874-型查询的方法。返回合成的AAAA和PTR记录。
这个性质默认下是无效的,可以在分用户基础上添加一个allow-v6-synthesis
{ address_match_list };子句到选项或者视图语句中。当它被激活时,递归AAAA查询使服
务器先进行A6查询,如果失败,执行AAAA查询。不管哪个成功,结果都作为一个合成的AAAA 记录返回。
类 似的,在ip6.int中的递归PTR查询将会促使一个ip6.arpa查询使用二进制标签,如果失败,执行另一个在ip6.int中的查询,结果将会以 在ip6.int中的合成PTR记录返回。合成记录的TTL 为0值。合成响应的DNSSEC确认当前并不被支持;也没有了AD标记。
注:allow-v6-synthesis仅为提供了递归服务的用户执行。
 
N. 调谐
lame-ttl
设定缓存有问题服务器指示的秒数。0使不缓存(不被推荐)。默认值600(10 分钟)。最大值1800(30 分钟)。
max-ncache-ttl
为降低网络流量和提升服务器存储否定回答的性能。max-ncache-ttl以秒为单位设定这些回答的保存时间。默认max-ncache-ttl是10800秒(3小时)。max-ncache-ttl不能超过7天,如果设成一个更大的值,则将会被自动减为7天。
max-cache-ttl
max-cache-ttl设定了服务器储存普通(肯定)答案的最大时间。默认值一周(7 天)。
min-roots
一个请求要求的最小的根服务器数量。默认为2。
注意:不被BIND9 支持
sig-validity-interval
设定未来作为动态更新结果的自动生成的DNSSEC信号过期的天数。默认是30天。信号的初始时间无条件设为在当前时间的前一个小时,以允许一个有限的时钟偏差。
min-refresh-time
max-refresh-time
min-retry-time
max-retry-time
这些选项控制了服务器在更新一个域(询问SOA变化)或者重试失败的传输时的状态。通常域的SOA值(但是这些值是由主服务器设定的)几乎不给此级服务器管理者对它们内容的控制。
这些选项允许管理者为每域,每个视图或者全局设定一个最小或者最大更新和重试时间。这些选项对于此级和根域是有效的并且设定SOA更新和重试时间。
 
O. 统计文件
由BIND9产生的统计文件和由BIND8产生的类似,但不完全一样。
一个统计数据开始于行+++ Statistics Dump +++ (973798949),这里出现的数字是一个标准UNIX型的时间戳,从1970年1月1日开始以秒计。紧跟这行的是一系列行,包括一个
记数器类型,记数器值,任意的域名和任意的视图名,没有所列的视图和域的行是整个服务器的整体统计。具有域和视图的行以给定的视图和域命名(对默认的视图来说视图名缺省)。
这个统计数据以行--- Statistics Dump ---(973798949)结束,在这数字是和开始行的数字一样的。Success对服务器或者域做出的成功查询。定义一个成功查询是查询返回非错误响应而不是返回推荐响应。
Referral:导致推荐响应查询
Nxrrset:导致没有数据的非错误查询的响应
Nxdomain:导致NXDOMAIN 的查询数量
Recursion:使服务器运行递归以找出最后答案的查询数量
Failure:导致失败的查询数量
7.server语句
服务器(server)语句的定义和使用:
server ip_addr {
[ bogus yes_or_no ; ]
[ provide-ixfr yes_or_no ; ]
[ request-ixfr yes_or_no ; ]
[ edns yes_or_no ; ]
[ transfers number ; ]
[ transfer-format ( one-answer | many-answers ) ; ]]
[ keys { string ; [ string ; [...]] } ; ]
};
服务器语句定义了与远程服务器相关的性质。
服务器语句可以出现在配置文件的顶层或者在视图语句的内部。如果一个视图语句包括一个或更多的服务器语句,只有那些视图语句内的被应用到视图和任何顶层的语句被忽略。如果一个视图不包括服务器语句,则任何顶层服务器语句都被当做默认。
bogus
如果你发现一台远端服务器正在输出错误数据,使用bogus标记它,将会阻止对它的更多查询。Bogus的默认值为no。
provide-ixfr
provide- ixfr子句决定本地服务器是否作为主域名服务器,当远端的一台辅域名服务器要求的时候,响应增量的域传输。如果设定成yes,增量传输将会在任何可能的 时候进行。如果设定为no,所有对远端服务器的传输都将是非增量的。如果不设置,在视图或者全局选项块中的provide-ixfr选项的值将使用默认 值。
request-ixfr
request-ixfr子句决定本地服务器是否作为辅域名服务器,将会向给定的远端服务器(一般为主域名服务器)发送域的增量传送请求。如果不设置,在视图或者全局选项块中的provide-ixfr选项的值将使用默认值。
对 不支持IXFR的服务器的IXFR请求将会自动转回AXFR。这样,就不需要用手工列出哪个服务器支持IXFR哪个不支持。全局默认值yes 一直会起作用。provide-ixfr和request-ixfr子句的作用是使IXFR无效,甚至当主域名服务器和辅域名服务器宣布支持它。
例如当使用IXFR时,如果一台服务器受灾并且崩溃或者破坏了数据。
edns
edns子句决定本地服务器与远端服务器通讯时是否使用EDNS.默认值为yes。
服务器支持两类域传输方式:
第一类,one-answer,每个源数据传输使用一个DNS报文。
第二类,many-answer,在一个报文中汇集了尽可能多的记录。多答案更有效率,但是
只被BIND9,BIND8.X 和BIND4.9.5补丁版本识别。你可以使用transfer-format选项为
一个服务器指定使用哪种方式。如果transfer-format没有被指定,就使用options里的
语句指定的transfer-format。
transfers
transfers用来限定同时从特定服务器进行数据传输的域的数量。如果transfers子句没有被指定,限制将会参照transfers-per-ns制定。
keys
keys子句用来确定一个由key语句定义的key_id,用于当远端服务器通话时的安全处理。key语句必须在涉及它的服务器语句之前。当一个请求发送到远端服务器,一个请求报文将会产生(使用本地指定键并附在报文上)。一个来自远端服务器的请求不要求被这个键标记。
尽管键子句语法支持多键,但是目前每个服务器只支持一个键.
 
8. trusted-keys语句
trusted-keys语句的定义和使用:
trusted-keys {
string number number number string ;
[ string number number number string ; [...]]
};
trusted- keys语句定义DNSSEC安全根。当非授权域的公共键是已知的但是却不能安全的通过DNS得到,或者因为DNS根域或者它的当前域没有被标记时定义安 全根。一旦一个键被设置成信任键,它就被认为是有效和安全的。解答器在所有存在于安全根次级域中的DNS 数据上尝试DNSSEC有效性。
trusted-keys语句能包含多重键入口,每个由键的域名,旗帜,协议算法和键数据的64进位组成。
 
9. view语句
视图(view)语句的定义和使用:
view view_name [class] {
match-clients { address_match_list } ;
match-destinations { address_match_list } ;
match-recursive-only { yes_or_no } ;
[ view_option; ...]
[ zone-statistics yes_or_no ; ]
[ zone_statement; ...]
};
视图是BIND9强大的新功能,允许名称服务器根据询问者的不同有区别的回答DNS查询。特别是当运行拆分DNS设置而不需要运行多个服务器时特别有用。每个视图定义了一个将会在用户的子集中见到的DNS名称空间。
根据用户的源地址(“address_match_list”)匹配视图定义的“match_clients”和用户的目的地址(“address_match_list”)匹配视图定义的” matach-destinations”。
如 果没有被指定,match-clients和match-destinations默认匹配所有地址。一个视图也可以做为match- recursive-only来指定,意思是来自匹配用户的递归请求将会匹配该视图。视图语句的顺序是很重要的,一位用户的请求将会在它所匹配的第一个视 图中被解答。在视图语句中定义的域只对匹配视图的用户是可用的。通过在多个视图中用相同名称定义一个域,不同域数据可以传给不同的用户。例如:在拆分 DNS设置中的”内部”和”外部”用户。
许多在named.conf 的options里的语句中给出的选项也能在视图语句中使用,仅仅用于使用哪个视图解答请求的时候。当view-specific值没有给出,options里的语句值就使用默 认值。域选项也可以在视图语句中指定默认值;这些view-specific默认值的优先级高于那些在options里面配置的语句。
视图精确到类。如果没有给定任何类,就假设为IN类。注意到所有非-IN视图必须包含一个暗示域,因为只有IN类具有compiled-in默认暗示。
如果在配置文件中没有view语句,在IN类中就会自动产生一个默认视图匹配于任何用户,任何指定在配置文件的最高级的zone语句被看作是此默认视图的一部分。如果存在外部view语句,所有的域视图必须会在view语句内部产生。
 
这是一则典型的使用视图语句运行的拆分DNS设置
view "internal" {
match-clients { 10.0.0.0/8; };
// 应该与内部网络匹配.
// 只对内部用户提供递归服务.
// 提供example.com zone 的完全视图
//包括内部主机地址.
recursion yes;
zone "example.com" {
type master;
file "example-internal.db";
};
};
view "external" {
match-clients { any; };
// 拒绝对外部用户提供递归服务
// 提供一个example.com zone 的受限视图
// 只包括公共可接入主机
recursion no;
zone "example.com" {
type master;
file "example-external.db";
};
};
 
10. zone语句
Zone语句的定义和使用:
zone zone_name [class] [{
type ( master | slave | hint | stub | forward ) ;
[ allow-notify { address_match_list } ; ]
[ allow-query { address_match_list } ; ]
[ allow-transfer { address_match_list } ; ]
[ allow-update { address_match_list } ; ]
[ update-policy { update_policy_rule [...] } ; ]
[ allow-update-forwarding { address_match_list } ; ]
[ alsonotify
{ ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ]
[ check-names (warn|fail|ignore) ; ]
[ dialup dialup_option ; ]
[ file string ; ]
[ forward (only|first) ; ]
[ forwarders
{ ip_addr [port ip_port] ; [ ip_addr [port ip_port] ; ... ] }; ]
[ ixfr-base string ; ]
[ ixfr-tmp-file string ; ]
[ maintain-ixfr-base yes_or_no ; ]
[ masters [port ip_port] { ip_addr [port ip_port] [key key]; [...] } ; ]
[ max-ixfr-log-size number ; ]
[ max-transfer-idle-in number ; ]
[ max-transfer-idle-out number ; ]
[ max-transfer-time-in number ; ]
[ max-transfer-time-out number ; ]
[ notify yes_or_no | explicit ; ]
[ pubkey number number number string ; ]
[ transfer-source (ip4_addr | *) [port ip_port] ; ]
[ transfer-source-v6 (ip6_addr | *) [port ip_port] ; ]
[ notify-source (ip4_addr | *) [port ip_port] ; ]
[ notify-source-v6 (ip6_addr | *) [port ip_port] ; ]
[ zone-statistics yes_or_no ; ]
[ sig-validity-interval number ; ]
[ database string ; ]
[ min-refresh-time number ; ]
[ max-refresh-time number ; ]
[ min-retry-time number ; ]
[ max-retry-time number ; ]
}];
 
A. 域文件类型
master
服务器有一个主域(控制域或主域)的配置文件拷贝,能够为之提供授权解析服务。
slave
辅 域(也可以叫次级域)是主域的复制。主域名服务器定义了一个辅域或多个辅域(次级域联系以更新域拷贝)的IP地址.默认下,传输是从服务器上的53端口进 行的;对所有的服务器来说这是可变的,通过设定一个在IP地址表前或者在IP地址之后基于每个服务器设定端口数字。对主域名服务器的鉴别也能通过每个服务 器上的TSIG键来完成。如果文件被指定了,那么任何主域配置信息改变的时候就要复制文件,并且当辅服务器重新启动的时候都会从主域名服务器上重新下载文 件。这可能会导致带宽的浪费和服务器重新启动次数的增加。
注意对每个服务器的数量众多的域来说(数万或者数十万),最好使用两级方式命名配置。
例如:一个域的服务器example.com可能把域内容放到一个叫做ex/example.com的文件中,在此, ex/只是域名前两个字符(如果把100K 的文件放入一个单独的目录中,大多数操作系统都会反应缓慢)
stub
子根域与辅域类似,子域只复制主域的NS记录而不是整个域。根域不是DNS的一个标准部分,它们是BIND运行的特有性质。
根 域可以用来避免在本机重新获得该域的NS记录,代价是保存一个根域入口和一组named.conf名称服务器地址。这个用法在新设置中并不建议使 用,BIND9只在有限的情况下才支持它。在BIND4/8中当前的域传输包括来自当前域的子根的NS记录。这表明,在某些情况下,用户可以为当前域设置 只存在于控制服务器里的子根。BIND9服务器从不以这种方式把来自不同域的数据混合。这样的话,如果一个BIND9控制服务器服务于一个已经设定了子根 域的母域,所有的当前域的次级服务器都需要设定相同的子根域。子根域也可以用来作为一种促使一个特定域的解答使用一个授权服务器的特定系。例如,在一个使 用RFC2157 地址的私有网络上缓存域名服务器可以用子根域进行设置。
forward
一 个”转发域”是一种在每个域基础上进行配置转发的一种方式。forward 类型的域语句包括一个转发语句和转发列表,都应用于在域内的由域名给出的查询。如果当前没有转发器语句,就会给出空列表,在域中就不会转发,也就取消了所 有在选项中的转发的作用。如果你要使用此种域来改变整体转发选项的状态(”forward first”,”forward only”但是要用同一服务器作为是全局设置)你需要理解全局转发器的特点。
hint
根名称服务器在最初设置时指定使用一个”hint zone”。当配置了”hint zone”的服务器
启动的时候,它使用根线索的设置找到根的名称服务器并得到根名称服务器的最新表。
如果没有为IN类设定线索域,服务器使用一个compiled-in的默认根服务器列表。
 
B.
域名后面的选项可以对应类。如果没有指定类,系统假定为IN类。这在大多数的情况下都是正确的。
Hesiod类是以一个信息服务的名称命名的,信息服务源于MIT的Athena工程.。Hesiod类是用来在多系统数据之间共享信息,如用户、组、打印机等等。”HS”对Hesiod来说是相同的类。
MIT发展的另一个是CHAOSnet,一个在70年代中期创立的本地协议。它的域数据可以用CHAOS类设定。
 
C. zone 选项
allow-notify
allow-query
allow-transfer
allow-update
设定哪台主机允许为主域名服务器提交动态DNS更新。默认为拒绝任何主机进行更新。
update-policy
设定一个”简单安全更新政策”。
allow-update-forwarding
设 定哪个主机能够向辅域名服务器的次级域提交动态域名服务器更新。默认值为{ none; },意味着不能进行动态更新转发。要使用更新转发,设定allow-update-forwarding{ any; };设定其他值而不是{ none; } 或者{ any; } 是常常起反作用的,因为主域名服务器拥有接入控制的权利,而辅域名服务器没有。
注意到激活一台次级服务器上的更新转发性质可能使主域名服务器依赖基于不安全IP地址的接入控制而可能使之受到攻击。
also-notify
只 当本域notify被激活时才是有意义的。能够收到本域DNS NOTIFY信息的计算机的集合是由所有域中列明的名称服务器加上任何由also-notify设定的IP地址。一个端口可能用每个also- notify地址设定以发送通告信息到那个端口而不是默认的53端口。
also-notify 对根域是无意义的。默认值为空。
check-names
此选项应用于BIND8中以约束hosts文件中的域名的字符集和/或从网络上接收的DNS响应。BIND9不限制域名的字符集也不执行check-names选项。
database
设 定储存域数据的数据库的类型。Database后面的关键词是一列whitespace-delimited(非限制空白空间)词。第一个词定义数据库类 型,后续词作为数据库的参数传给数据库,解释为特殊的数据库类型。默认值为"rbt",BIND9的本地native in-memory red-black-tree 库,则此数据库没有参数如果其它数据库驱动连接到服务器上的话其他值也是可能的。这些可能的数据库包括分布式的数据库,但缺省是没有连接的。
dialup
forward
只当域有一个转发器列表的时候才是有意义的。当配置为”only”时,在转发查询失败和得不到结果时会导致查询失败;在配置为”first”时,则在转发查询失败或没有查到结果时,会在本地发起正常查询。
forwarders
用来代替全局的转发器列表。如果如故不在forward类型的域中设定,就不会有这个域查询的被转发;全局的转发设置则没有起作用。
ixfr-base
在BIND8中设定动态更新和IXFR的交易日志文件(journal)的名称。BIND9 忽略这个选项而通过附加".jnl"到域文件名后创建日志文件.
ixfr-tmp-file
BIND8的非正式选项,BIND9忽略
max-transfer-time-in
max-transfer-idle-in
notify
pubkey
在BIND8中,此选项用于为DNSSEC标记域的信号(当它们从磁盘装载的时候)的验证设定一个公共域密钥,BIND9不在装载的时候验证密钥并忽略此选项。
zone-statistics
如果设为”yes”,服务器将会为本域储存统计信息,可以存储到在服务器选项中定义的统计文件中。
sig-validity-interval
transfer-source
transfer-source-v6
notify-source
notify-source-v6
min-refresh-time
max-refresh-time
min-retry-time
max-retry-time
 
D. 动态更新政策
BIND9支持两个授予用户对一个域执行动态更新权限的备选方案,分别由allow-update和update-policy设定。
allow-update 的使用与以前的BIND版本相同。它授于指定用户对域中的任何名称的任何的记录更新的权利。
update-policy 是BIND9中新出现的,允许更多更新控制,定义了一个规则集,规则授予或者取消一个或多个名称被一个或多个用户更新的权利。如果动态更新要求信息被标记(也就是说,可以包含TSIG 或SIG(0)记录),标记人的身份就能被确定。
规则在update-policy 域选项中指定,并只对主域有意义。当update-policy语句出现,这是一个allow-update的配置错误.。update-policy语句只检查信息的签名人,与源地址是不相关的。
这是一则规则的定义:
( grant | deny ) identity nametype name [ types ]
每条规则赋予或者取消授权,一旦一条信息成功的匹配一个规则,则马上执行该规则的给予或者取消操作,并且不检查其它的规则。一个规则是匹配的,就是当标记人匹配身份字段,名称匹配名称字段并且类型是在类型字段中定义的时候。
身份字段定义一个名称或者一个通配符名称,名称类型字段有四个值:
name, subdomain, wildcard 和self
name
当更新名称与原定义的名称字段相同时匹配。
subdomain
当更新名称与原定义的子域的一个名称字段相同时匹配。(包含它本身的名字)
wildcard
当更新名称与原定义的一个位于名称字段中的统配符名称的有效延伸相同时匹配
self
当更新名称与信息标记人的名称相同时匹配。忽略名称字段。
如果没有设定任何类型,规则匹配所有类型除了SIG、NS、SOA 和NXT;类型可能用
名称设定,包括"ANY"。(ANY 匹配所有类型除了NXT,NXT 不能被更新)。
此文章由 flyinweb 于 2009-07-01 18:17:04 编辑

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多