跨NAT网络的BIND DNS通知(notify)报文异常问题及解决方案咨询
各位大佬,我碰到一个挺头疼的特定场景问题,想请教下大家的解决方案:
我们有两台DNS服务器,彼此的网络通过NAT进行转换。具体环境是:主DNS服务器的IP是192.168.1.1,它通过网关192.168.1.254被NAT到192.168.2.x这个子网。
最近遇到的问题是:当我在主DNS上更新了DNS记录后,位于192.168.2.1的从DNS确实能收到主服务器发来的通知报文,但这个报文的源IP显示的是NAT后的网关地址192.168.1.254。这就导致从服务器尝试从这个错误的地址同步数据库,日志里一直输出这样的内容:
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添加到allow-notify列表中,但问题依然存在——从服务器会一直处于"refresh"状态,无法完成同步,日志变成了这样:
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
我自己分析了下,应该是因为从服务器收到通知报文后,默认会从报文的源IP(也就是NAT后的192.168.1.254)发起同步请求,而不是主DNS原本的IP地址192.168.1.1。
另外,我手动在从服务器上执行rndc retransfer xxx.local是可以正常完成同步的,因为这个命令会直接去联系主DNS的原始IP 192.168.1.1。
所以想请教下各位:有没有办法让从服务器在收到来自NAT地址的通知报文时,仍然去联系主DNS的原始IP进行同步?我已经在主服务器上试过配置notification-source、transfer-source这些参数,但都没起到预期效果,还是没法让从服务器直接对接主DNS完成更新。
备注:内容来源于stack exchange,提问作者tabbit

