DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

BIND rndc reload 成功却仍返回旧记录:检查区域是否启用了动态更新

BIND 手改区域文件后 reload 成功却仍返回旧记录时,核对动态区域、journal 和 view,选择授权更新入口或受控 freeze/thaw,恢复数据与动态写入。

手动改了 BIND 区域文件,也增加了 SOA serial,rndc reload 提示 server reload successful,查询仍返回旧记录。若 rndc zonestatus 显示 dynamic: yes,应停止直接编辑该文件,先确认区域由谁通过动态更新维护。

动态区域的最新数据可能还在 named 内存和 journal 中,磁盘区域文件不是可以随时覆盖的完整现状。下面针对 BIND 9 的动态主区域,按 9.20 的管理命令规则说明;secondary、自动签名或平台接管的区域须继续遵循对应管理流程。

先确认查的是同一服务、同一区域

以下是只读检查示例,区域、view 和服务器需换成实际值:

rndc zonestatus example.com IN internal
dig @ns1.example.com example.com. SOA +norecurse
dig @ns1.example.com api.example.com. A +norecurse

internal 是示例 view。没有 view 区分时按实际配置省略;同一区域在多个 view 中存在时,不能只写一个区域名便假定查中了目标。rndc 也需连接实际运行该区域的 named,而不是另一台宿主服务。

zonestatus 可显示文件名、include 文件、当前 serial、是否支持动态更新及签名状态。对照这些信息与实际部署路径。FreeBSD jail、chroot 或容器内的路径,要从目标服务所见的目录解释,不能只修改宿主机上同名文件。

若区域不是动态更新,继续核对文件路径、权限、语法错误、正确的 primary、view 和发布日志。若权威服务器已返回新数据而递归缓存仍旧,处理的是缓存分支,不需要冻结区域。

journal 记录不能靠删除来清空

动态变更会写进 journal,named 随后才把区域完整内容写回磁盘。journal 通常为区域文件旁的 .jnl,配置也可以指定其他位置;它是二进制数据,不应手工修改。

服务重启还会重放 journal。直接改区域文件后再重启,有时看似生效,也可能与动态数据、后续写回发生冲突。不能据此把“重启所有 DNS”作为正常发布流程,更不能删除 .jnl 来强迫文件成为唯一数据来源。

rndc sync 可以同步 journal 到区域文件,但不会停止动态更新;同步后立即编辑,仍可能与新的写入竞争。因此它适合按设计查看同步后的数据,不能替代手工编辑前的冻结。

正常变更优先走动态更新入口

若记录由 DHCP、管理平台或自动化维护,优先在原入口调整。直接使用动态更新客户端时,也必须采用该区域允许的身份、TSIG 密钥和更新策略。rndc 的管理权限不等于某个记录的更新权限,不能为绕过授权把 allow-update 改为任意地址。

还要核对自动化的记录所有权:手工更新某个记录后,原管理方下一次同步可能重新写回。先统一管理责任,比把动态更新永久关闭更可靠;关闭更新会影响 DHCP 注册及其他原有流程。

必须改文件时,安排目标区域的冻结窗口

确认有管理权限、能暂停相关写入,并保存当前配置及变更记录后,可以按受控窗口冻结目标区域。下面是有 view 区分时的操作结构示例:

rndc freeze example.com IN internal

只有确认冻结成功后,才处理该区域文件。freeze 会把 journal 变更同步到文件,冻结期间该区域拒绝动态更新,客户端可能重试或失败。不要省略区域名,否则会冻结所有动态区域。

先备份冻结后同步出的最新文件、相关 journal 和配置,再修改记录,并按项目规则更新 SOA serial。之前已经手动改过、却未加载的文件,应先另存待应用差异;冻结同步不能作为保留那些未生效修改的保证。

检查准确的候选文件,下面路径仅为示例:

named-checkzone example.com /etc/bind/zones/example.com.zone

检查通过并确认变更范围后,再重新加载并恢复动态更新:

rndc thaw example.com IN internal

thaw 会从磁盘重新加载区域,并在加载完成后重新允许动态更新。它对现有 journal 的处理还与 ixfr-from-differences 有关,不能假定更新历史永远保留。复杂 DNSSEC、inline signing 或平台自动生成的数据,不应跳过原管理工具直接套用这组命令。

同时检查记录与动态写入恢复

核对 thaw 的结果、日志和区域状态,再查询各权威服务器的 SOA 与目标记录。之后确认原动态更新客户端恢复正常、secondary 得到正确数据,再观察递归缓存和业务访问。

加载失败时不要假定区域已经恢复动态写入。按已保存的同步后数据恢复正确文件、保留当前有效 serial 的发布关系,重新检查并 thaw;需要回退已发布的内容时,应生成可被 secondary 接受的新 serial,不能简单覆盖较小的旧版本号。恢复 DNS 查询和恢复动态更新都通过,才算这次维护完成。