我们已经build立了一个合作伙伴公司的隧道。 他们的安全策略的一部分坚持,我们的DNS查询只有TCP(UDP不会路由)。
我们可以使用dig +tcp并validation查询是否正确parsing,但是我们自己的AD集成的(Server 2008)DNS服务器使用UDP作为转发的查询,这将在一个SERVFAIL中超时并重新返回到原始客户端。
有条件的转发器的设置没有规定协议select: 
RFC 1123说
发送非区域传输查询的DNSparsing器或服务器务必首先发送UDP查询。
…但这已被5966年取代
一个parsing器应该首先发送一个UDP查询,但可以select发送一个TCP查询,而不是如果它有很好的理由期望如果通过UDP发送的响应将被截断
如果我在Server 2008(最后一个RFC是从2010),这不是一个好兆头。 有谁知道一种方法,我可以强迫我的货代只使用TCP(或至less第一)? 是否有可能在任何其他的DNS实现,以防万一我必须设置一个中介?
有没有办法在Microsoft DNS服务器中closuresUDP(检查dnscmd文档)。
对UDP数据包的这种限制似乎是不合理的,并且确保他们的防火墙足够灵活,可以接受你的服务器被允许通过UDP端口53发送请求的exception。
每当RFC说“应该”,你最好遵循它所说的,以避免陷入未指定/不可预知的行为。 正确的方法是在收到截断响应的UDP 之后才使用TCP。
RFC 1035 (关于首选方法):
UDP不适用于区域传输,但对于Internet中的标准查询是推荐的方法。
RFC 2181 (关于UDP截断resposes):
在设置了TC的情况下,不完全适合的部分RRSet可能留在响应中。 当DNS客户端收到TC集的回复时,应忽略该回应,并使用TCP连接等机制重新进行查询,该机制将允许更大的回复。
他们最好有一个很好的理由不允许UDP 53(极不可能)。