我们已经建立了一条通往合作伙伴公司的隧道。他们的部分安全策略坚持我们的 DNS 查询仅是 TCP(不会路由 UDP)。
我们能够使用dig +tcp
并验证查询是否正确解析,但我们自己的 AD 集成 (Server 2008) DNS 服务器使用 UDP 转发查询,这将超时并在 SERVFAIL 中重新返回给原始客户端。
条件转发器的设置不提供协议选择:
RFC 1123 说
发送非区域传输查询的 DNS 解析器或服务器必须首先发送 UDP 查询。
...但这已在 5966 年被
解析器应该首先发送一个 UDP 查询,但如果它有充分的理由预期如果通过 UDP 发送响应将被截断,则可以选择发送 TCP 查询
如果我使用的是 Server 2008(上一个 RFC 是从 2010 年开始),这可不是什么好兆头。有谁知道我可以强制我的转发器仅使用 TCP(或至少首先)?是否有可能在任何其他 DNS 实现中,以防我必须设置一个作为中介?
无法在 Microsoft DNS 服务器中关闭 UDP(查看dnscmd文档)。
这种对 UDP 数据包的限制似乎是不合理的,并且确保他们的防火墙足够灵活,可以接受允许您的服务器通过 UDP 端口 53 发送请求的例外情况。
每当 RFC 说“应该”时,您最好遵循它所说的以避免遇到未指定/不可预测的行为。正确的方法是仅在收到带有截断响应的 UDP后才使用 TCP。
RFC 1035(关于首选方法):
RFC 2181(关于 UDP 截断响应):
他们最好有一个很好的理由不允许 UDP 53(极不可能)。