chrony 同步失败显示 “No suitable source” 但 ntpdate 能同步的原因对比

11次阅读

chrony显示“No suitable source”是其严格评估后主动拒绝所有NTP源,而ntpdate无视质量强制单次校正;本质差异在于chrony追求稳定建模,ntpdate仅暴力步进。

chrony 同步失败显示 “No suitable source” 但 ntpdate 能同步的原因对比工具,不关心源质量、不维护状态、也不拒绝“勉强可用”的服务器。

chrony 的“No suitable source”意味着什么

这不是连接失败,而是 chrony 经过一系列严格评估后,主动放弃所有候选服务器。它会检查:

  • 网络往返延迟是否稳定(抖动过大则丢弃)
  • 偏移量是否在合理范围内(例如超过 1 秒且持续波动,可能被标记为不可靠)
  • 服务器是否返回有效 stratum、poll interval 和 leap indicator
  • 本地时钟漂移率是否异常(如突然大幅跳变,chrony 会暂停同步以保护时钟模型)
  • 是否启用了 offline 模式或配置了 burst/iburst 但未生效

ntpdate 为什么“总能成功”

ntpdate(已废弃,仅作对比)不做任何质量判断:

  • 只要 udp 包能发出去、收到一个响应(哪怕只有一次),就直接计算偏移并强制设置系统时间
  • 完全忽略延迟抖动、服务器 stratum、同步历史或本地时钟状态
  • 不区分 unsynchronizedstep 状态,也不等待多轮测量
  • 例如:对一个公网 NTP 服务器 ping 延迟 200ms 且波动 ±80ms,chrony 会拒用;ntpdate 照样执行一次校正并退出

常见导致 chrony 拒绝但 ntpdate 成功的场景

这些情况暴露的是环境问题,而非工具缺陷:

  • 防火墙或中间设备干扰:NTP 请求/响应被限速、截断或修改(如 TTL 被改、字段清零),chrony 检测到协议异常而丢弃;ntpdate 只看是否回包,不验字段
  • 局域网内使用非标准 NTP 服务:比如某嵌入式设备实现的简易 NTP server 缺少 leap indicator 或返回固定 stratum 0,chrony 拒绝,ntpdate 不care
  • chrony 配置过于保守:如 maxdistance 0.1(最大容许偏移 100ms),而实际网络偏移达 300ms;ntpdate 无此限制
  • 系统启动初期时钟严重偏差:chrony 默认启用 makestep 但需满足条件(如启动后首次同步才允许大步调),若未触发或被禁用,就卡在“no suitable source”;ntpdate 总是强制 step

如何排查和解决 chrony 的“No suitable source”

别绕路用 ntpdate,应让 chrony 正常工作:

  • 运行 chronyc tracking 查看当前同步状态和估计误差
  • chronyc sources -v 看每个源的状态码^* 表示选中,^- 表示淘汰,? 表示无响应,x 表示异常)
  • 检查 chronyc sourcestats 中的 OffsetStd DevSkew —— 若 Std Dev 过高(>100ms)或 Skew 爆表,说明网络或源质量差
  • 临时放宽策略:在 /etc/chrony.conf 中添加 makestep 1 -1(允许任意偏移立即步进),再重启 chronyd
  • 确认防火墙放行 UDP 123,且无 ICMP 限速影响 chrony 的路径 MTU 探测

本质上,ntpdate 的“成功”只是掩盖了网络或配置问题;chrony 的“No suitable source”反而是它在认真履职。修复底层条件,chrony 才能发挥其高精度、低扰动、抗抖动的优势。

text=ZqhQzanResources