https://bind9.readthedocs.io/en/latest/reference.html#zone-statement-grammar
https://bind9.readthedocs.io/en/latest/reference.html#zone-statement-definition-and-usage
1. Zone Types
type
关键字是必须的,除了in-view
之外。它接受如下值:primary
(or master
), secondary
(or slave
), mirror
, hint
, stub
, static-stub
, forward
, redirect
, or delegation-only
。
primary
primary zone 拥有zone的主数据副本,可以提供权威应答。Type master
同 primary
。
secondary
secondary zone 是 primary zone 的副本。Type slave
同 secondary
。
primaries
列表指定了一个或者多个可供secondary连接用于升级zone的primary服务器地址。Primaries 列表元素也可以是其他 primaries 列表的名字。默认,使用端口53通信;可以通过在IP地址列表前指定端口以变更所有服务器的通信端口,也可以在IP地址之后指定每个服务器的端口。primary的授权可以通过每个服务器的TSIG keys进行。如果指定文件,那么无论什么时候zone变更,副本数据都会写到文件内,在服务器启动的时候会加载该文件。推荐使用文件,因为它可以加速服务器的启动速度,并且消除不必要的带宽浪费。注意,如果一台服务器很大量(成千上万) 的 zones,最好使用两级命名结构方式定义 zone filenames。比如,某 secondary 服务器将 zone example.com
放到文件 ex/example.com
,这里 ex/
是zone name的前两个字符。 (大多数操作系统,在一个目录存在10万个文件的情况下会运行很慢)
mirror
Mirror zone 类似于 secondary
,只是其数据在用于应答之前要经过DNSSEC验证。在zone传输过程中、重启named
服务加载磁盘zone文件时,验证作用于整个域。如果新版本的mirror zone验证失败了,那么会计划重传,最近一次成功验证的版本会被使用,直到其过期或者新版本验证通过。如果因为传输失败、过期而导致mirror zone 没有可用的数据,那么是使用传统的DNS递归查询来查找答案。Mirror zones 不能作用于未开启递归查询的视图。
Mirror zone 的应答和 secondary
一样,除了AA bit (“authoritative answer”)没有设置,AD bit (“authenticated data”) 设置了。
Mirror zones 被用于设置根域的快速本地副本,类似 RFC 7706内的描述。IANA 根域的primary服务器列表内置于 named
,因此它的 mirroring 可以通过如下配置开启:
zone "." {
type mirror;
};
镜像非根域需要使用primaries
选项 (参考 primaries Statement Grammar 获取更多信息)来提供primary 服务器列表,以及指定zone的密钥签名密钥 (KSK) 明确配置为 trust anchor。
要在 named
重启时, mirror zone 内容固话,使用 file 选项。
要给 mirror zone 配置NOTIFY , 仅 notify no;
和 notify explicit;
可以使用在zone level;其他notify
设置作用于zone level会被识别为配置错误。对于mirror zone ,其他 options
or view
level 的notify
设置会被 notify explicit;
覆盖。notify
选项的全局默认配置是 yes
,所以mirror zones 默认配置是 notify explicit;
。
Mirror zones 默认禁用 outgoing transfers ,但是可以通过 allow-transfer开启。
注意:
在非根域使用mirror zone 是实验性的,可能会导致性能问题,特别是那些大的或者频繁更新的zone。
hint
根名称服务的初始集是通过 hint zone 来指定的。当服务器启动时,它使用 root hints 来找到一个根名称服务器,然后获取最近的根服务器集合列表。 如果没有给class IN 指派 hint zone,那么服务器使用编译的默认 root servers hints 集合。非IN类的Classes 没有内置的默认 hints。
stub
stub zone ,存根域。stub zone 与 secondary zone 类似,但是其只复制primary zone 的 NS 记录,而不是整个zone。Stub zones 不是DNS的标准组成部分;它们是BIND实现的特有属性。
Stub zones 可以消除parent zone 内对glue NS 记录的需要,代价是维护stub zone entry 和 在 named.conf
内的一组服务器地址。新配置方式不推荐这种用法,BIND9有限支持。如果一个 BIND 9 primary,即服务于 parent zone,也有child stub zones ,那么服务于parent zone 的所有 secondary servers 都需要配置同样的 child stub zones 。
Stub zones 还有一种用法,强制指定某域一组特定的权威服务器用于解析。比如,私有网络上的缓存服务器(使用RFC 1918 寻址 ),可以给 10.in-addr.arpa
配置stub zones 使用一组内网名称服务器作为该域的权威服务器。
static-stub
static-stub zone 类似 stub zone,除了:zone data 是被静态配置好的,而不是传输自primary server;并且当匹配static-stub zone的查询必须使用递归查询时,总是使用本地配置的数据(名称服务器名称和glue addresses),即使缓存了不同的权威信息。
Zone data 通过 server-addresses
和 server-names
zone 选项配置。
zone data 的格式组成为 NS 和 (如果需要)glue A or AAAA RRs internally,可以通过 rndc dumpdb -all
dump zone 数据库查看。 RRs 被认为是本地配置参数,而不是public data。对static-stub zone的非递归查询(比如 RD bit )被禁止,并返回以REFUSED。
因为数据是静态配置的,所以没有zone的维护操作。比如,没有定期刷新,进来的消息会被拒绝,返回NOTAUTH。
每个static-stub zone 都配置有内部生成的NS和(如有必要)glue A or AAAA RR。
forward
forward zone,转发域,是基于单个域进行转发的方式。 forward
类型的 zone
描述可以包含forward
and/or forwarders
描述, 应用于给定zone name的域名查询。如果 forwarders
描述不存在,或者forwarders
列表是空的,那么该域不会进行转发,取消options
内任何转发器的效果。 因此,要使用该类型的zone来变更全局 forward
行为(先“forward first”然后“forward only”,反之亦然),但是还要使用全局配置的相同服务器,重新指定全局转发器。
redirect
Redirect zones ,重定向zone 。当正常查询被返回**NXDOMAIN **的时候,重定向zone会提供查询结果。每个视图只支持一个 redirect zone 。allow-query
用于限制那些客户端可以看到答复。
如果客户机已请求DNSSEC记录(DO=1),并且NXDOMAIN应答已签名,则不会发生替换。
要将所有 NXDOMAIN 应答重定向到 100.100.100.2 和 2001:ffff:ffff::100.100.100.2,配置名称为 “.”的 redirect
类型的 zone,以及zone file 文件,内含通配符记录指向期望地址:*. IN A 100.100.100.2
and *. IN AAAA 2001:ffff:ffff::100.100.100.2
.
再比如,要重定向所有的 Spanish names (后缀 .ES), 使用类似的条目但是以 *.ES.
作为名字,而不是 *.
。 要重定向所有的 commercial Spanish names (under COM.ES),使用通配符条目*.COM.ES.
。
注意:所有的 redirect zone 支持所有可用的types;不限于 A and AAAA 记录。
如果redirect zone 配置了primaries
参数,则其被视为secondary zone。否则,其将作为primary zone加载文件。
因为 redirect zones 不是通过名称直接引用的,所以它们不是保存在常规primary and secondary zones的 zone lookup table 内。要重新加载 redirect zone, 使用 rndc reload -redirect
;要配置为 secondary的 redirect zone,使用 rndc retransfer -redirect
。当使用 rndc reload
而不指定zone name,redirect zones 将和其他zones一起加载。
delegation-only
该类型域被用于强制基础架构域(比如,COM、NET、ORG)处于仅委托状态。任何应答没有在authority 部分显式或隐式委派的,都被视为NXDOMAIN。这不能应用于 zone apex,也不能被应用于leaf zones。
delegation-only
对收自转发器的应答没有影响。
请参阅root-delegation-only的注意事项。
in-view
当使用多视图的时候,在一个视图内配置的 primary
or secondary
zone 可以被后续视图引用。这就允许所有的视图使用同一个zone而不需要重复加载。这通过zone
进行配置,在指定zone的视图内以in-view
参数配置。包含 in-view
的 zone
不需要指定 type,因为这是其他视图的zone定义的一部分。
参见 Multiple Views 获取更多信息。
2. Class
区域名称后面可以有选择地后跟一个类。如果未指定class,则假定为 class IN
(用于Internet
)。绝大多数情况下是正确的。
Class hesiod
来自于麻省理工学院Athena项目的一个信息服务命名。它用于共享有关各种系统数据库的信息,例如用户、组、打印机等。关键字HS
是hesiod
的同义词。
另一个麻省理工学院的开发项目是 Chaosnet,一个创建于1970年代中期的局域网协议。它的 Zone data 被指定以 CHAOS
class。