CD 与 AD 是什么
启用 DNSSEC 之后,响应里会出现两个与验证相关的关键标志:CD 表示客户端要求解析器不做验证,AD 表示这份响应已经通过验证。它们的缺失或语义被错误设置,会在启用 DNSSEC 的域名上造成有答案却被弃用的现象,典型表现是客户端拿到响应后仍然报解析失败。另有一类情况是启用了验证的解析器在验证失败时直接返回服务器故障码,这时抓包里根本没有可用答案,必须换到解析器视角核对验证状态。
基本信息
| 协议依据 | RFC 4035(DNSSEC 协议)、RFC 6840 |
|---|---|
| 抓包字段 | dns.flags.check_disable(CD)与 dns.flags.authenticated(AD) |
| CD 语义 | 客户端要求跳过验证 |
| AD 语义 | 响应已经通过验证 |
| 失败表现 | 验证失败的解析器可能直接返回服务器故障码 |
典型使用场景
- DNSSEC 域名排障:确认验证结果是成功、失败还是被跳过
- 中间解析器核查:确认 AD 位是否被上游或中间设备剥离
- 客户端行为分析:判断客户端是否主动要求跳过验证
- 变更验证:启用验证前后对比标志位的变化
- 故障归类:把验证失败与记录不存在区分开
标志位观察
标志位观察
dns.flags.check_disable == 1 # CD 位被置位
dns.flags.authenticated == 1 # AD 位被置位
# 启用验证的解析器在验证失败时可能直接返回服务器故障
# 此时抓包里没有可用答案,需要换到解析器视角核对标志位判读
| 标志状态 | 含义 | 异常表现 |
|---|---|---|
| CD 置位 | 客户端要求跳过验证 | 被错误置位会直接绕过验证 |
| AD 置位 | 响应已通过验证 | 被中间设备剥离会造成误判 |
| 两者都不置位 | 未启用或未要求验证 | 需结合配置预期判断是否正常 |
本地抓包常常看不到验证记录的细节,因为上游解析器已经把结果消化掉了;判断验证是否成功要以解析器视角的日志与状态为准。
不支持验证的中间解析器可能把 AD 位直接剥掉,仅凭该位缺失就断定域名未通过验证并不严谨。