我们正在测试一个查询:
- FQDN: test.example.net
- 查询类型:AAAA
客户端 > DNS A > DNS B
简化的DNS查询流程:
- 客户端查询 test.example.net -t AAAA
- 查询转到 DNS A,然后 DNS A 将查询转发给 DNS B
- DNS B 向 DNS A 响应 2 个有序的 IPV6 地址
- DNS A 从 DNS B 接收 2 个有序的 IPV6 地址
预期的
- DNS A 向客户端回复 2 个有序的 IPV6 地址
怎么了
- DNS A 向客户端响应 2 个无序的 IPV6 地址
我们尝试过的事情:
- 关闭 DNS A 和 DNS B 上的缓存
我们注意到的事情:
- 当查询从 DNS A 转到 DNS B 时,事务 ID 会发生变化
- 当DNS A向客户端响应2个IPV6地址时,事务ID又变回原来的事务ID。
问题:
- 我们忽略了哪些选项/设置以确保客户端收到固定有序的查询响应?
- DNS A 收到来自 DNS B 的有序查询响应,但却没有将有序查询响应发送回客户端,原因可能是什么?
谢谢 BD
答案1
在 DNS 协议中,记录集中记录的顺序并不重要(因为放意味着)。出于某些目的(例如,帮助实现简单的基于 DNS 的负载平衡解决方案),记录被故意打乱顺序的情况相当常见。
实际上具有优先级概念的记录类型(例如MX
和SRV
)在其记录数据中有一个特定字段,用于指定每条记录的优先级,而不管记录在响应中的放置顺序如何。
至于事务 ID,该值应该仅在查询和响应之间保持不变。在您的示例中,您实际上有两个查询:客户端↔A 和 A↔B。
答案2
您可以使用选项“rrset-order”,它可以指定针对某个 fqdn“固定”查询响应。
DNS 的设计目的是使用随机排序的查询响应进行响应。