Nil*_*ils 10 domain-name-system bind tcp sles10
我已经在多宿主服务器上的 SLES10(当前绑定 9.6)上设置了一个 DNS 服务器。该服务器可以从所有内部网络进行查询,并为所有内部网络提供答案。我们有两个独立的 DNS“主”区域。这些区域中的每一个都由许多权威的 Windows-DNS 服务器提供服务。
现在我的 linux-server 是这些区域之一(私有内部区域)的辅助 DNS 服务器,并充当另一个区域(公共内部区域)的转发器。
直到最近,这种设置都没有问题。现在我得到 - 在查询公共内部区域时(例如通过hostlinux 客户端上的命令)错误消息
;; 截断,在 TCP 模式下重试
一个wireshark-dump揭示了这个原因:第一个查询在UDP模式下发出,答案不适合UDP(由于权威NS的列表太长),然后在TCP模式下重试,提供正确答案。
现在的问题是: 我可以将绑定配置为在 TCP 模式下查询转发器而不先尝试 UDP 吗?
更新:尝试使用 ASCII 艺术...
+--------------+ +--------------+ +-----------------+
| W2K8R2 DNS | | SLES 10 DNS | | W2K8R2 DNS |
| Zone private +---+ All internal +---+ Zone public |
| internal 2x | | Zones | | internal 30+ x |
+--------------+ +-+----------+-+ +-----------------+
| |
+--+---+ +--+---+
|Client| |Client|
+------+ +------+
Run Code Online (Sandbox Code Playgroud)
首先,我不会称其为错误,而只是一条信息性消息。
其次,DNS 服务器将始终回答 UDP 查询(至少 BIND,我找不到禁用 UDP 的选项)并且客户端将始终(?)首先尝试发送 UDP 查询(例如,resolv.conf 中没有选项可以更改它)也不在 JVM 中)-如果它们适合 UDP 数据包(请求通常会这样做)
如果您有特定的用例,您可以指定使用 TCP,例如在 shell 脚本中使用 'dig +tcp' 或 'host -T' 进行解析,并且您可以使用系统调用 'sethostent/gethostbyname/endhostent'(参见 man page) 在其他情况下强制 TCP。
如果您真的想尝试阻止 UDP,我能看到的唯一选项是使用 iptable 规则,但我不确定该设置是否有效。我预计 DNS 解析只会失败。