权威DNS返回REFUSED、NOTAUTH或答案不一致:Zone、View与ACL排查
先从父区获取实际委派 NS 和 glue,对每个 NS 的 IPv4、IPv6 地址分别发送带 +norecurse 的 SOA、NS 和目标 RRtype 查询,保存 RCODE、AA 位、SOA serial、ANSWER/AUTHORITY 和实际命中 IP。如果某节点不置 AA 或返回 NOTAUTH,查它是否加载了正确 zone。如果返回 REFUSED,核对 allow-query、view 匹配、源地址和目标区域类型。如果 serial 或答案不同,追踪 NOTIFY、IXFR/AXFR、从库刷新与 Anycast 单节点状态。
直接答案
先从父区获取实际委派 NS 和 glue,对每个 NS 的 IPv4、IPv6 地址分别发送带 +norecurse 的 SOA、NS 和目标 RRtype 查询,保存 RCODE、AA 位、SOA serial、ANSWER/AUTHORITY 和实际命中 IP。如果某节点不置 AA 或返回 NOTAUTH,查它是否加载了正确 zone。如果返回 REFUSED,核对 allow-query、view 匹配、源地址和目标区域类型。如果 serial 或答案不同,追踪 NOTIFY、IXFR/AXFR、从库刷新与 Anycast 单节点状态。
一、固定查询名、类型和网络路径
记录完整 FQDN、RRtype、查询源 IP、UDP/TCP、IPv4/IPv6、EDNS 选项和时间。A、AAAA、CAA、DNSKEY 可能受不同策略影响;只保存“dig 失败”不足以复现。
二、从父区确认真正的委派
用父区权威答案确定当前 NS 集,不要仅信任本地缓存或控制面显示。注册局委派已改但旧 NS 仍运行,会让手工查询和公网递归结果相反。
三、逐个NS和IP直接查询
一个 NS 名可能对应多个 A/AAAA,Anycast 地址还可落到多个 POP。分别查每个可见地址,禁用递归,避免递归缓存把权威层差异遮住。
四、用AA位判断答案是否权威
RFC 1035 中 AA 表示响应服务器对问题部分具有权威。返回了一个 IP 但没有 AA,可能是递归或缓存答案,不能证明 zone 在本机正常加载。
五、理解REFUSED而不是盲目重启
REFUSED 意味着服务器根据策略不执行操作。常见原因是 allow-query/ACL 未包含源地址、view 先匹配了错误客户端集、只允许内网查询,或把递归 ACL 与权威查询 ACL 混淆。
六、NOTAUTH首先检查zone是否被加载
NOTAUTH 不只是“记录不存在”。它可能表示查询到了不托管该 zone 的节点,区文件因语法、权限、签名或 journal 问题加载失败,或 secondary 从未成功获取区数据。
七、区分NXDOMAIN、NODATA和NOTAUTH
NXDOMAIN 表示查询名不存在;NOERROR 且 ANSWER 为空通常表示名存在但没有该 RRtype;NOTAUTH 是服务器权威身份问题。要同时保存 AUTHORITY 中的 SOA,它能帮助判断负回答所属区域。
八、检查zone加载日志和当前状态
不要只看磁盘上有区文件。查配置加载结果、语法检查、运行时 zone status 和最近日志。错误 owner name、遗漏圆点、无效 serial、无法读取文件都可使旧版继续服务或整个 zone 不可用。
九、view会让同一服务器返回不同结果
split DNS 可按源地址、TSIG key、目标地址或其他条件选择 view。监控节点、NAT 出口和真实客户端可能命中不同 view。对比 view 顺序、match-clients 和每个 view 内是否都声明了 zone。
十、ACL要区分查询、递归和区传送
allow-query、allow-recursion、allow-query-cache 和 allow-transfer 控制的对象不同。公网权威服务可拒绝递归但必须能回答自己的 zone。把“关闭开放递归”写成拒绝所有查询,就会对正常权威查询返回 REFUSED。
十一、比较SOA serial与关键RRset
对所有 NS 同时查 SOA serial、NS、DNSKEY 和一个业务 RRset。serial 不同说明同步进度不同;serial 相同但内容不同更危险,可能是同一 serial 被重用、view 不同或节点使用了不同数据源。
十二、追踪secondary的NOTIFY和IXFR/AXFR
检查 primary 是否发送 NOTIFY,secondary 是否接受,SOA refresh 查询是否到达,IXFR 或 AXFR 是否被 ACL、TSIG、防火墙或 TCP/53 阻断。转送失败后不要只手工复制区文件,应修复可持续的同步链路。
十三、检查SOA expire与从库过期
secondary 长时间无法联系 primary,超过 SOA expire 后可停止对 zone 权威回答。这会把“数据偏旧”升级为 NOTAUTH 或 SERVFAIL。对齐最后成功转送时间、expire 值和当前时钟。
十四、Anycast要能定位到具体节点
相同 Anycast IP 可在不同网络位置命中不同节点。使用节点标识查询、CHAOS 类识别(若安全允许)、服务端日志和多地监测建立“源地址→POP→版本→zone serial”映射。
十五、检查IPv4和IPv6路径差异
一个 NS 的 A 地址正常、AAAA 地址落到旧节点,会导致只有部分递归器失败。对每个协议族分别查连通性、RCODE、AA、serial 和答案,不要用 IPv4 成功代替 IPv6 验收。
十六、建立可重复的验收矩阵
十七、DNSSEC区域还要比对签名链
如果各权威节点的 SOA 或业务 RRset 不同,同时比对 DNSKEY、RRSIG 的 key tag、签名到期时间和父区 DS。某节点加载了新数据却没有对应签名,或仍使用已撤销的密钥,可使验证型递归器返回 SERVFAIL,而未验证的直查看似正常。验收不能只比较明文答案,还要从父区 DS 到子区 DNSKEY 和 RRset 逐层验证。
同时保存验证失败的 EDE 代码与精确时间,便于区分签名过期、无效区间和节点时钟偏差。
常见错误
- 只查一台 NS,就宣布整个权威集群正常。
- 把 REFUSED 当成网络超时,或把 NOTAUTH 当成 NXDOMAIN。
- 只看区文件,不查运行时 zone 是否成功加载。
- 忽略 view 匹配顺序和 NAT 后的真实查询源。
- Anycast 环境中无法把错误定位到单个 POP。
FAQ
1. REFUSED和SERVFAIL是一回事吗?
不是。REFUSED 通常是服务器因策略拒绝执行查询;SERVFAIL 表示服务器尝试处理但无法给出正常答案,可与 DNSSEC、上游失败或 zone 问题有关。
2. 直查NS有答案就能证明它是权威吗?
不能。应禁用递归并检查 AA 位、RCODE 和 AUTHORITY 部分。否则得到的可能是缓存答案。
3. 为什么不同地区查到不同serial?
可能是 secondary 同步延迟、Anycast POP 配置漂移、不同 view,或 IPv4/IPv6 落到不同节点。需同时记录查询源、命中 IP/POP 和时间。
4. 可以把allow-query暂时改成any吗?
公网权威 zone 的查询策略应符合服务设计,但不应为排障同时开放递归或区传送。先通过日志和 ACL 命中定位,如需测试则只放行受控源和最小范围。
5. SOA serial相同就代表各节点完全一致吗?
不一定。错误重用 serial、view 不同或不同后端数据源都可使 serial 相同而 RRset 不同。应对比关键 RRset、DNSKEY 和区数据摘要。
总结
处理权威 DNS 的 REFUSED、NOTAUTH 和答案不一致,核心是将“父区委派”、“服务器是否权威”、“查询是否被策略允许”和“各节点数据是否一致”分开证明。逐个 NS/IP 保存 RCODE、AA、serial、RRset 和命中 view,再回到 zone 加载、ACL、传送和 Anycast 节点修复,才能避免用重启或缓存清理掩盖真正根因。
来源资料
- RFC 1034: Domain Names—Concepts and Facilities
- RFC 1035: Domain Names—Implementation and Specification
- RFC 8499: DNS Terminology
- BIND 9 Administrator Reference Manual
> 推荐/广告:如需计算、网络或站点托管资源,可了解 边界云。该链接为统一推荐位,不构成本文技术结论的来源。