我在两台运行 Debian 8 + Bind9 的双 IP 堆栈机器之间设置了一个小型的主->从 DNS 方案。
主设备和从设备都拥有绑定使用的 IPv4 和 IPv6,由配置参数强制执行listen-on
listen-on-v6
transfer-source
transfer-source-v6
notify-source
notify-source-v6
query-source address
query-source-v6 address
。
目前我的主服务器设置为通知从服务器:
notify yes;
also-notify { xxxx:xxxx:xxxx:xxxx::xxx5; x.x.x.5; };
由于我的从属设备具有如下区域配置:
zone "example.dev" {
type slave;
masters { xxxx:xxxx:xxxx:xxxx::xxx2; x.x.x.2; };
file "...";
};
这个设置工作正常,然而通过检查日志文件(正如我所料)主服务器在每次区域更改时都会通知从服务器两次:
May 20 20:57:53 salvedns named[8568]: zone example.dev/IN: notify from x.x.x.2#52041: zone is up to date
May 20 20:57:53 salvedns named[8568]: zone example.dev/IN: notify from xxxx:xxxx:xxxx:xxxx::xxx2#51347: zone is up to date
一次通过 IPv4,另一次通过 IPv6。
有没有办法告诉绑定服务器这xxxx:xxxx:xxxx:xxxx::xxx5
x.x.x.5
确实是同一个 DNS 服务器的地址,并尝试首先通过 IPv6 通知它,如果失败,则通过 IPv4 重试?此外,如何在 salvemasters
声明上执行相同的操作?
谢谢。
答案1
我不相信有任何配置选项可以满足您的要求。但是,我也不认为双重通知真的值得担心。
虽然在这种配置下它是多余的,但它导致的开销很小,通常不会出现任何问题。
一般来说,收到多个通知消息并不奇怪,最初主要来自主服务器+其他从服务器,但现在也来自双栈主机,甚至最初的规范预期这一点:
4.2. 每个从属设备可能会收到相同 NOTIFY 请求的多个副本:一个来自主主设备,另一个来自每个其他从属设备,因为该从属设备传输新区域并通知其潜在对等设备。NOTIFY 协议支持这种多重性,要求从属设备/主设备仅在更新 SOA RR 或确定不需要更新之后发送 NOTIFY,这实际上意味着在成功进行区域传输之后。因此,除非重新排序交付,否则任何从属设备收到的最后一个 NOTIFY 将指示最新更改。由于从属设备始终只从其已知主设备请求 SOA 和 AXFR/IXFR,因此它将有机会在每个主设备完成每个区域更新后重试其对 SOA 的查询。