![如果我只允许来自 Internet 的 udp/53 流量,我的 DNS 辅助服务器是否可以正常工作?](https://linux22.com/image/584823/%E5%A6%82%E6%9E%9C%E6%88%91%E5%8F%AA%E5%85%81%E8%AE%B8%E6%9D%A5%E8%87%AA%20Internet%20%E7%9A%84%20udp%2F53%20%E6%B5%81%E9%87%8F%EF%BC%8C%E6%88%91%E7%9A%84%20DNS%20%E8%BE%85%E5%8A%A9%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
我在 BIND 上运行了“隐藏主要主机”DNS 设置,因此只有辅助主机对外界可见。防火墙当前允许从 Internet 到辅助主机上的 udp/53 和 tcp/53 的流量,一切似乎都运行正常。
然而,每天我都会看到一大堆来自与我无关的外部地址的“拒绝非主服务器通知”日志条目。我明白这些日志条目在告诉我什么,但我不想在我的日志中看到所有这些“噪音”。
由于只有辅助服务器面向互联网,我可以安全地拒绝来自互联网的 tcp/53 流量以防止出现“拒绝非主服务器的通知”条目吗?或者是否有充分的理由允许 tcp/53 流量流向辅助服务器?主服务器位于同一防火墙后面,不会受到此防火墙更改的影响。
答案1
如果答案超过 512 字节,也会使用 TCP,而不仅仅是区域传输。
我不会在防火墙上阻止它。
答案2
标准机制是,如果响应大于 512 字节,DNS 服务器将截断响应。DNS 客户端应使用 TCP 重新发送查询以获取完整响应。IPv6 AAAA 和 DNSSEC 查询响应很容易超出 512 字节的限制。具有长主机名的 CNAME 查询也可能超出此限制。
如果您确定您的 CNAME 不太长并且不打算使用 DNSSEC 和 IPv6 解析,则可以在防火墙上阻止 tcp/53 端口。
您还应该检查为什么会收到来自外部的通知。这意味着您的 IP 列在某个域的 NS 记录中。如果可能的话,嗅探一下这个通知 - 它可能表明您的 DNS 配置与您想象的不同。
答案3
我假设您在这种情况下应用的(未说明的)逻辑是假设 DNS 仅使用 TCP 进行区域传输,并且由于您没有对 Internet 进行区域传输,因此您认为切断从 Internet 到您的辅助设备的 TCP 端口 53 流量应该是安全的。
要得出答案,首先需要了解 DNS 为什么同时使用 UDP 和 TCP,以及何时使用其中一种。
原始 DNS 规范规定,UDP DNS 数据包的最大大小为 512 字节。如果答案超过此限制,服务器将要求客户端使用 TCP 重新发送请求,然后服务器通过 TCP 提供答案。请注意,这不仅适用于区域传输,也适用于任何较大的答案。典型的 DNS 答案数据包通常足够小,可以满足此限制,但最重要的是,即使您没有向 Internet 进行区域传输,您也必须允许 TCP 访问您的 DNS 服务器。
答案4
请参阅 RFC 5966。严格来说,该 RFC 适用于 DNS 软件实现者,但它解释了为什么运算符DNS 服务器也应该允许 TCP。