Plainnotes

Debian 云主机时间同步失败的一种处理

2026-06-21 · 4 分钟系统

有台机器 timedatectl 一直显示 System clock synchronized: no。chrony 起得来,但 chronyc sources 里所有源都是 ?。

先排除配置问题:换源、加 iburst、放宽 maxdistance,都没用。用 nc -u -v 打 123 端口没有回应,抓包也只有发出去的包,没有回来的——机房把 UDP 123 过滤了。这种情况在便宜的小机房不算罕见,尤其是默认安全组只放 TCP 的时候。

没有 NTP 也得让时间大致对,不然 TLS 握手会因为时间偏差失败。做法是用两个 HTTPS 源交叉校验:

curl -sI https://www.cloudflare.com | grep -i '^date:'
curl -sI https://www.google.com    | grep -i '^date:'

把两个 Date 头解析成时间戳,分别和本机时间比,取两个差值的平均;超过 5 秒才 date -s 修正,避免来回抖。写成一个 oneshot service 加每小时一次的 timer。

要清楚这只是“大致对”:HTTP Date 只精确到秒,往返延迟没扣,实际误差在几百毫秒到一两秒。对证书校验(容忍几分钟偏差)完全够用;对 TOTP、Kerberos 这种要求 30 秒内误差的场景不够。