我们已经建立了一条通往合作公司的隧道。他们的安全策略的一部分要求我们的 DNS 查询只能通过 TCP 进行(UDP 不会被路由)。
我们能够使用dig +tcp
并验证查询是否被正确解析,但是我们自己的 AD 集成(Server 2008)DNS 服务器使用 UDP 进行转发查询,这将超时并导致 SERVFAIL 返回到原始客户端。
条件转发器的设置不提供协议选择:
RFC 1123 指出
发送非区域传输查询的 DNS 解析器或服务器必须首先发送 UDP 查询。
...但在 5966 年已被替换为
解析器应该首先发送 UDP 查询,但如果有充分理由认为通过 UDP 发送响应会被截断,则也可以选择发送 TCP 查询
如果我使用的是 Server 2008(最后一个 RFC 是 2010 年的),那么这不是一个好兆头。有人知道有什么方法可以强制我的转发器仅使用 TCP(或至少首先使用 TCP)吗?如果我必须将一个转发器设置为中介,在任何其他 DNS 实现中是否可行?
答案1
无法在 Microsoft DNS 服务器中关闭 UDP(检查dns命令请参阅文档。
对 UDP 数据包的这种限制似乎不合理,并且确保他们的防火墙足够灵活,可以接受例外,即允许您的服务器通过 UDP 端口 53 发送请求。
每当 RFC 说“应该”时,你最好按照它说的去做,以避免遇到未指定/不可预测的行为。正确的方法是只使用 TCP后收到了带有截断响应的 UDP。
RFC 1035(关于首选方法):
UDP 不适用于区域传输,但它是 Internet 中标准查询的推荐方法。
RFC 2181(关于 UDP 截断响应):
如果设置了 TC,则响应中可能会留下无法完全容纳的部分 RRSet。当 DNS 客户端收到设置了 TC 的回复时,它应该忽略该响应,然后使用允许更大回复的机制(例如 TCP 连接)再次查询。
他们最好有一个不允许 UDP 53 的充分理由(极不可能)。