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