我遇到了一个非常具体的问题:我们有两个 DNS 服务器,它们的网络相互进行 NAT。示例:DNS 主服务器有 192.168.1.1,它使用网关 192.168.1.254 NAT 到另一个子网 192.168.2.x。在更新 DNS 主服务器的 DNS 条目后,我在 192.168.2.1 上的 DNS 从服务器会收到来自主服务器的通知包,但通知包似乎来自 NAT 后的 IP 192.168.1.254 - 因此,从服务器尝试从错误的地址更新其 DNS 数据库,它始终显示:
named[]: client @0x7ff89c02a170 192.168.1.254#59273: received notify for zone 'xxx.local'
named[]: zone xxx.local/IN: refused notify from non-master: 192.168.1.254#59273
在从属设备上将 192.168.1.254 添加为“允许通知”也不起作用 - 它停留在“刷新”状态,因此不会更新:
named[]: client @0x7fb7d0024440 192.168.1.254#39318: received notify for zone 'xxx.local'
named[]: zone xxx.local/IN: notify from 192.168.1.54#39318: serial 2023062701: refresh in progress, refresh check queued
我认为这是由于 DNS 从属服务器尝试从具有 NATted IP 的服务器更新其数据库,它似乎从该 IP 获取“通知”包,而不是从原始 DNS 服务器的 IP 获取。
在从属服务器上手动运行rndc retransfer xxx.local
确实有效,因为它会联系原始服务器 192.168.1.1。
有没有什么办法可以告诉从属服务器在收到来自 NAT 地址的通知包后联系原始 DNS 服务器的 IP?
我已经在主服务器上尝试了“通知源”、“传输源”和其他设置。我所做的所有设置都无法成功让从属 DNS 直接联系主 DNS 进行更新。
答案1
在 bind 中,您定义主节点将向哪些主机发送传输(允许传输),并在从节点上告诉它请求传输。当一个节点请求传输时,另一个节点将启动与第一个节点的新 TCP 连接,以使用它从中收到传输请求的地址传输数据(如果它列在 all-transfers ACL 中)。
我不相信有办法配置 Bind 来开始向未请求它的地址进行转移。
解决您的问题最简单的方法是在两个节点之间使用 VPN。具体来说,分配 IP 地址的 VPN - ssh 或 SSL 隧道不行。