摘要
- ZONEVERSION 在生成 DNS 回答的同一份权威响应中携带区域版本,避免事后另查 SOA 时丢失时间上的对应关系。
- 这个值只描述一次观察到的回答;它不是区域内容摘要,不代表所有权威节点已经收敛,报文本身也需要独立的完整性保护。
设想两个值班工程师从不同网络位置直查同一个 anycast 地址。问题完全相同,两个响应也都是 NOERROR,但一个给出新地址,另一个仍是旧地址。两份响应都带有 ZONEVERSION:前者的 SOA 序列号是 4120,后者是 4119。
真正有价值的不是“4120 比 4119 大”这一眼判断,而是每个序列号与它所描述的答案同处一份报文。如果几秒钟后再单独查询 SOA,两次请求可能都被路由到已经更新的站点。届时日志会留下两个 4120,却再也无法证明旧地址当时由哪个区域版本生成。
这是解释机制的假设场景,不是某个运营商事故,也不代表任何实现已经支持 RFC 9660。它说明 ZONEVERSION 的核心用途:为一次回答保留同时发生的版本证据。
边界也同样重要。4119 不能解释差异原因,4120 不能证明新区内容正确;任一单点都不能代表整个权威服务集群。
请求没有写入期望版本
ZONEVERSION 是 EDNS 选项,代码为 19。查询方在 OPT 伪记录中放入该选项,OPTION-LENGTH 必须为零,不能附带版本数据。它不是“请给我版本 4120”,也不是“切换到最新版本”,只是询问服务器愿不愿意说明这次回答来自哪个版本。
报文形状很严格:长度非零,或者同一查询里出现两个 ZONEVERSION,都属于无效请求;理解该机制的权威服务器按规范返回 FORMERR。这时首先应修复探针,而不是把错误码解释成区域故障。可靠调查必须能重放原始查询字节。
即使请求正确,服务器也不是必答。它需要理解选项、对相关包围区域具备权威性,并选择响应。没有返回选项只能说明“这次交换没有提供回答—版本关联”,不能推出服务器陈旧或区域异常。
这还是逐跳控制信息。转发者不能盲目转交请求,再把上游的值粘进自己的回答。版本描述的是生成当前响应的权威端;一旦这个对应关系被中间层改写,数字就失去原意。
LABELCOUNT 决定数字属于哪个区域
响应数据依次包含一字节 LABELCOUNT、一字节 TYPE 和由 TYPE 定义的 VERSION。LABELCOUNT 从原始 QNAME 的最右侧数标签,零代表根区。对于 host.branch.example,计数 2 指向 branch.example,计数 1 则指向 example。
因此,“serial=4120”本身不是完整证据。必须保留原始 QNAME、标签总数、LABELCOUNT 和推导出的包围区域。计数不能超过 QNAME 的标签数。
该机制不只服务于普通正面回答。父区生成向下委派时,可以报告父区版本;权威服务器生成 NXDOMAIN 或 NODATA 时,可以报告产生否定回答的区域;在仍能确认相关权威区域的某些 SERVFAIL 中也可返回。一次响应可涉及多个包围区域或多个类型,但同一个 TYPE 与 LABELCOUNT 组合最多一个值。
运营系统若把这些全部压成“当前版本”一列,就会丢掉作用域。最小键应当是 QNAME、推导区域、类型和版本,并绑定原始响应、服务器与观察位置。
SOA-SERIAL 熟悉,但绝不是全局版本号
RFC 9660 当前定义的公开类型是 TYPE 0 SOA-SERIAL。VERSION 直接复制相关区域 SOA 的四字节无符号 SERIAL,加上前两个字段,响应选项长度为 6。
熟悉不等于可以随意比较。序列号只在同一区域内有意义。RFC 1982 规定的是 32 位环形算术,回绕之后数值更小的序列号可能更新;相距特定范围的两个值甚至没有定义好的先后关系。简单使用整数大于号,足以把正常回绕误报为回退。
序列号也不是内容哈希。运维错误可能让不同区域内容使用同一 SERIAL,同一版本下的回答也可能因查询条件或策略不同而变化。所以调查必须同时比较回答 RRset、Authority 区、标志、TTL 和 DNSSEC 验证结果。
需要验证完整区域内容时,应进入 RFC 8976 的 ZONEMD 机制。ZONEVERSION 回答“这次响应声称来自哪个版本”,ZONEMD 回答“完整区域内容是否匹配预期摘要”。二者互补,不能互相替代。
Anycast 把“哪台服务器”变成测量问题
一个 anycast 地址背后可以有多个服务实例,不同探测位置可能到达不同站点。一次成功响应只说明这一条路径在这一时刻看到了什么。
证据采集应先列出权威 NS、可见地址、anycast 前缀、预期站点与有意义的网络观察点。每次直查都应关闭递归,保存源/目的地址、传输方式、时间、QNAME、RCODE、AA 位、完整回答、TTL、选项字节与验证结果。跨时间重复同一问题,才能区分持续的站点差异与一次偶发路径。
RFC 5001 的 NSID 可以提供额外线索,但其内容与唯一性由运营者定义,也不会因出现就自动受认证。NSID 不能替代真实端点、路径与观察位置。
若三个位置持续看到 4120 和相同答案,第四个位置持续看到 4119 和旧地址,可以合理地说“被测范围内存在一个有边界的服务差异”。还不能直接说原因是落后 secondary。下一步要核对 journal、区域传输、签名生成、实例装载状态与路由落点。
DNSSEC 没有签住这个 EDNS 值
DNSSEC 能验证回答中的签名 RRset,却不会用 RRSIG 覆盖 ZONEVERSION 的 EDNS 字节。在不安全路径上,中间人可以修改或剥离版本选项,同时让签名数据本身继续通过验证。
所以“回答 RRset 验证通过”和“回答—版本组合有受保护的保管链”是两句话。重要诊断可使用经过认证并加密的传输,或 TSIG、SIG(0),并记录端点或密钥身份和实际验证结果。这些措施保护报文交换,不证明区域设计正确或集群完成发布。
OPT 也不是区域数据。ZONEVERSION 不能像普通 RR 一样缓存、传送或重新拼装。缓存可以按 TTL 继续使用回答,但不能把昨天的选项拿来给今天的回答充当来源证明。
来源
- IETF,RFC 9660:DNS Zone Version(ZONEVERSION)选项
- IETF Datatracker,RFC 9660 文档记录
- IANA,DNS 参数注册表
- IETF,RFC 6891:DNS 扩展机制
- IETF,RFC 1034:域名概念与设施
- IETF,RFC 1035:域名实现与规范
- IETF,RFC 1982:序列号算术
- IETF,RFC 4786:Anycast 服务运行
- IETF,RFC 5001:DNS 名称服务器标识 NSID
- IETF,RFC 8976:DNS 区域消息摘要 ZONEMD
- IETF,RFC 9499:DNS 术语
- IETF,RFC 8945:TSIG
- IETF,RFC 2931:DNS 请求与事务签名
- IETF,RFC 4033:DNS 安全介绍与要求
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
