我正在使用 bind9 和 webmin 尝试为我们的主名称服务器设置 DNS 辅助服务器。我认为我的情况应该非常简单,但我无法让主服务器将区域传输到从服务器。
我已将主服务器配置为在 Webmin 服务器索引中具有从服务器,然后将其配置为集群从服务器下的从服务器,然后allow_transfer
在主服务器上配置从服务器的 IP。iptables -nL
显示主服务器和从服务器上的端口 53 和 953 均打开。netstat -lnpt
显示named
正在监听 53(在主服务器和从服务器上),但是当我运行测试将记录传输到从服务器时,我得到:
Testing transfer of slave zone from 10.191.0.2 .. .. from 10.191.0.2 :
Failed : ;; Connection to 10.191.0.2#53(10.191.0.2) for
test.example.com failed: connection refused.
主服务器上区域的配置 .2
zone "test.example.com" {
type master;
file "/var/lib/bind/test.example.com.hosts";
notify yes;
allow-transfer {
10.191.0.3;
};
};
从属设备上的区域配置 .3
zone "test.example.com" {
type slave;
masters {
10.191.0.2;
};
file "/var/lib/bind/test.example.com.hosts";
allow-transfer {
10.191.0.2;
};
allow-update {
10.191.0.2;
};
};
我知道我遗漏了一些东西,但我似乎无法弄清楚。
谢谢你的帮助
答案1
让我总结一下,并在答案中添加这种行为的原因,以便将来可能遇到此问题的人...
按照定义,DNS 系统在端口 53 上使用默认的 UDP 协议。但该服务旨在防止答案碎片化,因此一旦答案变大,它就会“回落”到 TCP 协议。
使用 UDP(原则上),您无法保证答案会完全到达,并且一旦 TCP 发送确认,某些部分在传递过程中不会丢失。因此,一旦答案足够小,可以容纳一个部分,就会使用 UDP。一旦答案更大,系统就会将其作为 TCP 发送出去,而不关心碎片和传递顺序。更大答案的示例可能是带有粘合记录的“常规”答案(在哪里询问下一个查询迭代步骤 - 鸡和蛋 ;-) 或 DNSSEC 内容)或刚刚提到的区域传输。
正如 rfc5936 - DNS 区域传输协议 (AXFR) 所述:
因为准确性至关重要,AXFR 请求必须使用 TCP 或其他可靠协议。
...
随着 EDNS0 和需要许多小区域的应用程序(例如网络托管和一些 ENUM 场景)的加入,UDP 上的 AXFR 会话现在似乎是理想的选择。但是,AXFR 会话的某些方面仍然难以转换为 UDP。
因此本文档没有在这方面更新 RFC 1035: 未定义通过 UDP 传输的 AXFR 会话。
因此,根据引用,您会看到区域传输的 TCP 协议是强制性的。
一般情况下(不仅仅是因为区域传输),您应该在 DNS 服务器上同时允许 TCP/53 和 UDP/53,以使其正常工作。仅允许 UDP/53 只能实现部分可操作性。
-- 编辑(2019 年 6 月 20 日星期四 10:20 UTC)--
还添加了问题的实际答案(AXFR 使用 TCP) - 感谢 Håkan Lindqvist