分类: LINUX
2008-03-03 20:32:47
10.3. DNS NOTIFY (Zone Change
Notification)
1、一般情况下,BIND 从服务器使用一个轮询的方法来检测是否需要进行 zone
transfer。轮询的时间间隔由 SOA 记录的 refresh interval
字段决定。但是这种定时轮询的方案有可能导致数据更新的延迟,尤其是在使用动态更新的环境。
2、主服务器何时知道一个 zone 的数据发生了变化 :
Ø
收到 reload 指令后,在加载 zone data files 时,发现文件的 mtime 时间已经改变
Ø
收到关于某个 zone 的动态更新
Ø
name server 不会自动
reload 某个 zone
3、RFC 1996 中提出了一个方案,该方案允许主服务器通知从服务器关于 zone
data 的变化。称为 'DNS
NOTIFY'。
4、当主服务器注意到某个 zone 的 serial
number 发生变化时,它发送一个特殊的消息给这个 zone的所有从服务器。主服务器是通过该 zone 的 NS 记录来确定那些是从服务器的,并从中剔除出本机。(具体方法是忽略 SOA 的 MNAME 字段中指定的 name server)
5、当 name server 检测到序列号有变化时,就会发出 notify 消息。不管序列号是多少,是增加还是减少,都会发出 notify 消息。至于从服务器收到 notify 消息后,是否会进行 transfer ,则取决于 notify
消息中的序列号和从服务器上的序列号哪个更大。
6、当一个从服务器接收到一个关于某个 zone 的 NOTIFY 通知时,它发出一个 NOTIFY 响应包。该响应包告诉主服务器它收到了该
NOTIFY 通知,所以主服务器可以停止向它继续发送
NOTIFY 通知了。假如从服务器执行完 zone
transfer 了,按照 RFC
1996 的要求,它必须向该 zone 的其他权威服务器(包括主服务器)发出自己的
NOTIFY 通知。这么做的目的是因为某些主服务器可能无法直接向从服务器发送
NOTIFY 通知,或者从服务器无法直接同主服务器通信(因为他们使用其他从服务器作为主服务器)。特别是后一种,当一个从服务器完整 zone
transfer 后,再向它的“从服务器”发出 notify 消息,这样那些“二级从服务器”也能得以更新了。
7、从服务器只接受来自它所配置的主服务器的 NOTIFY 通知,从其他服务器来的 NOTIFY 消息一律被忽略 !!
8、在 BIND 8/9 中,NOTIFY 特性默认是开启的,但也可以关闭。可以针对单独某个 zone 关闭 notify 功能。
9、also-notify 语句 :
Ø
考虑那些没有在上级域注册的内部 name server ,它们也需要 NOTIFY 消息以尽快更新它们的数据,虽然它们并不服务于外界,而是专门服务于内部网络
Ø
also-notify 带一个
address match list 作为参数
Ø
notify explicit + also-notify 将强制 BIND 忽略 NS 记录,只将
NOTIFY 消息发送给 also-notify 指定的name server 。