首页/系统/Linux 运维命令速查/场景:改 DNS 后的生效链检查
网络命令82 条

场景:改 DNS 后的生效链检查

换了 DNS 记录或 DNS 服务器后「还是老结果」:从本机缓存 → 中间缓存 → 权威逐层清/验证,顺序不能乱。

Linux 运维命令速查系统更新于 2026-10-13

改 DNS 为什么不生效

换了记录或换了 DNS 服务器后仍解析到旧地址,原因是缓存分布在多个层次:本机解析服务、应用或浏览器、本地 DNS 服务器、中间递归服务器。排查要按层次自内向外验证,先清本机缓存并重查,再逐层向公共 DNS 与权威服务器对照,才能判断问题卡在哪一层。

基本信息

典型场景解析记录变更后仍返回旧结果,或切换 DNS 后行为不符合预期
排查组合清本机缓存 + 按层次对照查询 + 直接询问权威服务器
关键概念记录的有效期决定中间缓存能保留多久
适用范围Linux 服务器;应用层与浏览器缓存需单独处理

典型使用场景

  • 切换负载均衡后端或迁移站点后,部分机器仍访问旧地址
  • 更换 DNS 服务器后某台机器解析异常
  • 验证新记录是否已经全网可见
  • 排查「本机能解析、容器里不能解析」的层间差异
  • 确认上游解析服务是否返回了非预期记录

清本机与验证

清本机与验证
resolvectl flush-caches                    # 系统解析服务缓存
resolvectl query app.example.com           # 清后立即重查
systemctl is-active systemd-resolved       # 确认解析服务在运行
getent hosts app.example.com               # 系统真实解析(含本地静态条目)
sudo systemctl restart nscd 2>/dev/null    # 老系统用独立缓存服务时重启它

逐层对照

逐层对照
dig +short app.example.com                 # 本机默认 DNS 的结果
dig +short @1.1.1.1 app.example.com        # 公共 DNS 的结果
dig +short @ns1.example.com app.example.com  # 权威服务器:最终真相
dig app.example.com | grep -E 'ANSWER|Query time'   # 看应答段与耗时
for i in 1 2 3; do dig +short @ns1.example.com app.example.com; sleep 5; done   # 多查几次确认稳定

缓存层次对照

层次位置清理或验证方式
应用缓存进程内部与连接池重启或让应用重新解析
浏览器缓存终端侧清理浏览器缓存或换终端验证
本机解析缓存系统解析服务或独立缓存服务清缓存命令或重启对应服务
本地 DNS 服务器机房或内网递归联系管理员刷新或调整有效期
权威服务器域名托管侧直接查询它确认最终记录
记录的有效期未到之前,中间递归服务器保留旧值属于正常行为,验证新记录是否生效应当直接询问权威服务器。

排查顺序

  • 先确认现象范围:单机还是全网、全部域名还是个别域名
  • 清本机缓存后重查,排除本机层面的干扰
  • 对比公共 DNS 与权威服务器的结果,判断是上游还是本地问题
  • 老系统注意独立的缓存服务,容器里则要单独看它的解析配置
  • 结论写清是哪一层缓存导致的,便于后续调整有效期策略
清缓存只影响执行命令的那台机器,全网生效取决于记录的有效期与权威记录本身,这一点在跨部门沟通时最容易产生误解。

易错点

  • 记录有效期没到时中间缓存保留旧值属正常现象,把正常行为当成故障会白折腾
  • 只清本机缓存就期待全网生效,忽略了递归与本地 DNS 服务器这一层
  • 忽略应用自身的解析缓存与长连接,地址换了连接仍指向旧节点
  • 老系统使用独立缓存服务时清错地方,命令执行了但结果没变化

数据来源与参考

  • man 1 resolvectl(systemd 手册)
  • man 1 dig(BIND 9 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌