在了解Zone语句之前需要先了解view语句的用法,可参考文章下面的文章:
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 ; ] }];
各参数的详解释
type:hint
根NS的设置,也就是.域的服务器设置。因为我们知道,客户端从指定的NS上找不到记录后,将会出现两种情况,一种向.域服务器请求查询。一种将请求转发到上一级NS服务器。这里的设置是指第一种。
举例说明常用的设置:
zone "." IN { type hint; file "/usr/local/named/etc/named.ca"; };
Tips 1:hint只针对.域进行设置。
看下named.ca的种其中三行。
;; 这里指定.域中的其中一台服务器 . 518400 IN NS a.root-servers.net. ;; 这里指定了这台.域服务器的IPv4和IPv6具体地址. a.root-servers.net. 3600000 IN A 198.41.0.4 a.root-servers.net. 3600000 IN AAAA 2001:503:ba3e::2:30
Tip 2:可以从这里下载这个文件:named.ca
Tip 3:在什么时候会使用hint ?这个只是个人的总结,如果你的这台NS所在的局域网已经有上一层的NS了,这个时候设置hint 是没有任何作用的。因为这个时候不使用已存在的NS,你根本上不了网。只能设置forwarders {10.0.2.3;}; 同时开启递归查询 recursion yes;
type:master
这是一个主从结构,也是最常用的,和我们平时所说的主从是一个意思,一般情况下,一个域名解析会使用2个NS,其实这里就是主从,防止单点故障,当然也可以一主多从。举例说明
zone "abc.com" IN { type master; file "/usr/local/named/etc/named.abc.com"; };
Tips 1:named.abc.com中的内容到底是什么样的?看下面的注解:
FQDN的写法:
$TTL 600
@ IN SOA master.abc.com. woodie.abc.com. ( 2017022802 3H 15M 1W 1D )
@ IN NS master.abc.com.
master.abc.com. IN A 192.168.80.110
@ IN MX 10 www.abc.com.
www.abc.com. IN A 192.168.80.121
bbs.abc.com. IN CNAME www.abc.com.
ftp.abc.com. IN CNAME www.abc.com.
linux.abc.com. IN CNAME www.abc.com.
slave.abc.com. IN A 192.168.80.120
122.abc.com. IN A 192.168.80.122
#其中2017022802 3H 15M 1W 1D,分别是serial,refresh,retry,expire,Minimum,看参考Tips 3
简写:
$TTL 600 @ IN SOA master.abc.com. woodie.abc.com.( 2017022802 3H 15M 1W 1D ) @ IN NS master master IN A 192.168.80.110 @ IN MX 10 www www IN A 192.168.80.121 bbs IN CNAME www ftp IN CNAME www linux IN CNAME www slave IN A 192.168.80.120 122 IN A 192.168.80.122
简写不太容易看明白,而FQDN的写法,又太啰嗦,而且要注意.(点号),所以我个人偏好喜欢这样的写法。
$TTL 600 @ IN SOA master.abc.com. woodie.abc.com.( 2017022802 3H 15M 1W 1D ) @ IN NS master.abc.com. master IN A 192.168.80.110 @ IN MX 10 www.abc.com. www IN A 192.168.80.121 bbs IN CNAME www.abc.com. ftp IN CNAME www.abc.com. linux IN CNAME www.abc.com. slave IN A 192.168.80.120 122 IN A 192.168.80.122
Tips 2:设定法则,知识建议,如果RR资料更新频繁,值可以相应缩写,如果不是可以增大更新频率,减少同步的带宽。
;Refresh >= Retry *2 ;Refresh + Retry < Expire ;Expire >= Rrtry * 10 ;Expire >= 7Days ;
Tips 3:参数详解
- ns.abc.com. woodie.abc.com. :这里是SOA的固定格式,这里有两部分内容,中间用空格隔开,前半部分:Zone的主 DNS 服务器的主机名,后半部分:管理Zone的负责人的电子邮件地址。在该电子邮件名称中使用英文句点 (.) 代替“at”符号 (@)。
- $TTL 指令:该zone的缓存时间
- serial:数值Serial代表这个Zone的序列号,序号越大表明资料越新,主要用在 master / slave 同步使用,每次Zone文件更新,都需要修改Serial数值。RFC1912 2.2建议的格式为YYYYMMDDnn 其中nn为修订号,,但序号的最大值不能大于2的32次方,即4294967296
- refresh:数值Refresh设置Slave DNS多长时间与Master Server进行Serial核对。目前Bind的notify参数可设置每次Master DNS更新都会主动通知Slave DNS更新,Refresh参数主要用于notify参数关闭时;
- retry:数值Retry设置当Slave DNS试图获取Master DNS Serial时,如果Master DNS未响应,多长时间重新进行检查;
- expire:如果master/slave在1周内都链接失败,slave将不再尝试链接master,但注意,此时slave还会继续提供解析服务,只是数据不在更新。
- Minimum:在 8.2版本之前,由于没有独立的 $TTL 指令,所以通过 SOA 最后一个字段来实现。但由于 BIND 8.2 后出现了 $TTL 指令,该部分功能就不再由 SOA 的最后一个字段来负责,由 $TTL 全权负责,SOA 的最后一个字段专门负责 negative answer ttl(negative caching)
Tips 4:经常提到RR是什么意思呢?RR是Resource Record的缩写,包括A, NS, SOA, CNAME, MX.
- SOA:开始验证的标识,Start of Authority的缩写。
- NS:域名服务 NameServer的缩写。
- A:具体地址IPv4,Address的缩写。
- AAAA:具体地址IPv6
- MX:邮件服务器
- CNAME:主机别名的服务器
Tips 5:反解配置
zone "80.168.192.in-addr.arpa" IN { type master; file "/usr/local/named/etc/named.192.168.80"; allow-update { none; }; };
cat /usr/local/named/etc/named.192.168.80
$TTL 600 @ IN SOA master.abc.com. woodie.abc.com.( 2017022802 3H 15M 1W 1D ) @ IN NS master.abc.com. 110 IN PTR master.abc.com. 120 IN PTR slave.abc.com. 121 IN PTR www.abc.com. 122 IN PTR 122.abc.com. #这里不再重复介绍,将正解的A换成PTR即可
Tips 6:有一个地方非常有意思。如果将named.conf中的zone配置成如下:
zone "168.192.in-addr.arpa" IN {
type master;
file "/usr/local/named/etc/named.192.168.80";
allow-update { none; };
};
那相应的 /usr/local/named/etc/named.192.168.80 的文件也相应的调整。
$TTL 1 @ IN SOA master.abc.com. woodie.abc.com.( 2017022802 3H 15M 1W 1D ) @ IN NS master.abc.com. 110.80 IN PTR master.abc.com. //注意是110.80,而不是80.110 120.80 IN PTR slave.abc.com. 121.80 IN PTR www.abc.com. 122.80 IN PTR 122.abc.com.
type:slave
和master很相似,有几个不同点,slave不需要配置 named.192.168.80 和 named.abc.com 文件,因为slave启动成功后,会自动同步。在named.conf中的配置也不一样,注意比较:
zone "abc.com" IN { type slave; file "/usr/local/named/etc/named.abc.com"; masters {192.168.80.110;}; }; zone "80.168.192.in-addr.arpa" IN { type slave; file "/usr/local/named/etc/named.192.168.80"; allow-update { none; }; masters {192.168.80.110;}; };
type:forward
先看下设置语法:
zone "taisha.org" IN { type forward; forward first; forwarders {10.0.2.3;}; };
此时访问 taisha.org 这个 zone 将转发给10.0.2.3来处理。
- forward
此选项只有当forwarders 列表中有内容的时候才有意义。当值是 First,默认情况下,使
服务器先查询设置的forwarders,如果它没有得到回答,服务器就会自己寻找答案。
如果设定的是 only,服务器就只会把请求转发到其它服务器上去。 - forwarders
设定转发使用的 ip 地址。默认的列表是空的( 不转发)。转发也可以设置在每个域上,
这样全局选项中的转发设置就不会起作用了。用户可以将不同的域转发到服务器上,或者
对不同的域可以实现 forward only 或 first 的不同方式,也可以根本就不转发.
Pingback引用通告: Bind的安装与详细配置 | 精彩每一天
Pingback引用通告: Bind中的 options 语句定义和用法 | 精彩每一天
Pingback引用通告: Bind中的view语句定义和用法 | 精彩每一天