首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制转发器DNS请求到TCP模式。

强制转发器DNS请求到TCP模式。
EN

Server Fault用户
提问于 2012-01-10 09:59:49
回答 2查看 16.7K关注 0票数 10

我已经在SLES10上设置了一个DNS服务器(目前绑定9.6)在多主机服务器上。可以从所有内部网络查询此服务器,并为所有内部网络提供答案。我们有两个独立的DNS“主”区域。每个区域都由多个权威的Windows-DNS服务器提供服务。

现在,我的linux服务器是这些区域之一(私有内部区域)的辅助DNS服务器,并充当另一个区域(公共内部区域)的转发器。

直到最近,这种设置还没有出现问题。现在,我开始查询公共内部区域(例如,通过linux客户机上的host命令)来查询错误消息。

;;被截断,在TCP模式下重试。

wireshark转储揭示了原因:第一个查询在UDP模式下,答案不适合UDP (由于权威NS的长列表),然后在TCP模式下重新尝试,提供正确的答案。

现在的问题是:我是否可以将绑定配置为在TCP模式下查询转发器而不首先尝试UDP?

更新:试着用ASCII-艺术.

代码语言:javascript
复制
+--------------+   +--------------+   +-----------------+
| W2K8R2 DNS   |   | SLES 10 DNS  |   | W2K8R2 DNS      |
| Zone private +---+ All internal +---+ Zone public     |
| internal 2x  |   |   Zones      |   | internal 30+ x  |
+--------------+   +-+----------+-+   +-----------------+
                     |          |
                  +--+---+   +--+---+
                  |Client|   |Client|
                  +------+   +------+
EN

回答 2

Server Fault用户

回答已采纳

发布于 2012-01-10 11:11:12

首先,我不认为这是一个错误,仅仅是一条信息消息。

其次,DNS服务器将始终回答UDP查询(BIND,至少我找不到禁用UDP的选项),客户端总是(?)尝试首先发送UDP查询(例如,在resolv.conf中没有任何选项来更改该查询,也没有JVM中的选项)--如果它们适合于UDP数据包(请求通常是这样的)

如果您有特定的用例,您可以指定使用TCP,例如在shell脚本中使用'dig + TCP‘或'host -T’来解决问题,在其他情况下可以使用系统调用‘setho支架/gethostbyname/endhostent’(参见手册页)强制使用TCP。

如果您真的想阻止UDP,我看到的唯一选项是使用iptable规则,但我不确定该设置是否有效。我希望DNS解析会简单地失败。

票数 9
EN

Server Fault用户

发布于 2012-01-10 10:20:01

绑定服务器应该使用EDNS (参见RFC 6891)来允许UDP数据包超过512个字节。

代码语言:javascript
复制
options {
    edns-udp-size 4096;
    max-udp-size 4096;
};

这应该允许通过UDP检索大型NS集,而无需为其他较小的查询设置TCP连接的开销。

但是,请注意,这些实际上是默认值。如果没有使用EDNS,那么要么是某些东西阻塞了它,要么是接收EDNS选项的服务器不支持它。

另外,请注意,host不支持EDNS。您的转发器->服务器查询已经在使用EDNS,这是完全可能的,您只是在尝试使用本地客户端时看不到它。

尝试使用dig +bufsize=4096 @server hostname A而不是使用host

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/348399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档