在了解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 的不同方式,也可以根本就不转发.
相关文章: