时间不是小事:日志排序、证书校验、双因素认证、计费全都靠它。 普通晶振一个月能漂几分钟——「不配 NTP 也能用」只是还没到出问题的时候。
上一节讲告警,这一节讲「告警与日志能对上时间的前提」。 这是本书里「最不起眼但最不能省」的一节。
一、时间不准的四个后果
一、日志排不出先后:几十台设备的日志汇总时,时间差几秒就理不清故障链条。 二、证书校验失败:HTTPS 与 IPsec 证书有有效期,偏差超过几分钟就报「未生效」或「已过期」。 三、双因素认证失效:TOTP 一次性密码是按时间算的,偏差超 30 秒就通不过。 四、计费出错:按时间计费的业务直接算错。
四条里第一条最要命:故障排查的本质是「排先后」,而先后靠时间。时间不准,整件事就没法做。
二、时钟漂移有多快
普通晶振精度约 50 ppm,也就是百万分之五十。 换算成每天:50 乘 86400 除以 100 万,约 4.3 秒。
10 ppm:每天漂 0.9 秒,一个月 26 秒。50 ppm:每天 4.3 秒,一个月 130 秒。 100 ppm:每天 8.6 秒,一个月 259 秒。
每天几秒,一个月就是几分钟。 而证书校验与双因素认证只容忍几十秒到几分钟——所以「一个月不管它」就已经越线了。
三、NTP 的层级
stratum 0:原子钟、GPS。stratum 1:直连 0 层的服务器。 stratum 2:从 1 层同步,公网 NTP 大多是这一层。 stratum 15 是上限,16 视为不可用。
层级越大越不准,因为每一层都会引入误差。 所以「随便找个公网 NTP」和「用 stratum 1」的精度差一个量级——但对内网设备来说,stratum 2 的精度已经远超需要。
四、配置三条规矩
一、至少配两个 NTP 源,一个挂了还有另一个。而且两个源最好来自不同的上游,否则同时失效。 二、内网自己搭一层 NTP 服务器,别让所有设备都去访问公网。 一是公网源会封你,二是「谁能改你的时间,谁就能伪造你的日志」。 三、加认证,否则任何人伪造一个 NTP 应答就能改你的时间。 而改了时间就等于改了所有的审计记录。
第三条最容易被跳过,因为它麻烦。 但它是「时间这个基础」的最后一环——时间对了但可以被随意改,那还不如不准。
五、动手 Demo:时间不准会出什么事,NTP 怎么配
这段列出时间不准的四个后果与 NTP 的层级,再按 10、50、100 ppm 三种晶振精度算每天与每月漂移多少秒。
for ppm in (10, 50, 100):
day = ppm * 86400 / 1000000.0
P(u" %d ppm:每天漂 %.1f 秒,一个月 %.0f 秒。" % (ppm, day, day * 30))
实跑输出:
--------------------------------------------------------------------
时间不准会出什么事,NTP 怎么配
--------------------------------------------------------------------
**时间看起来是小事,但它是「日志、证书、计费、审计」的共同基础。**
**时间不准的四个具体后果**:
1. **日志排不出先后**:几十台设备的日志汇总时,**时间差几秒就完全理不清故障链条。**
2. **证书校验失败**:HTTPS/IPsec 证书有有效期,
**时间偏差超过几分钟就会报「证书未生效」或「已过期」。**
3. **双因素认证失效**:TOTP 一次性密码是「按时间算」的,**偏差超 30 秒就通不过。**
4. **计费出错**:按时间计费的业务直接算错。
**算一下时钟漂移有多快**:普通晶振精度约 50 ppm,也就是每天误差 50×10⁻⁶×86400 秒:
10 ppm:每天漂 0.9 秒,一个月漂 26 秒。
50 ppm:每天漂 4.3 秒,一个月漂 130 秒。
100 ppm:每天漂 8.6 秒,一个月漂 259 秒。
**每天漂几秒,一个月就是几分钟。**
**所以「不配 NTP 也能用」是错觉——只是还没到出问题的时候。**
**NTP 的分层(stratum)**:
· **stratum 0**:原子钟、GPS。
· **stratum 1**:直连 0 层的服务器。
· **stratum 2**:从 1 层同步,**公网 NTP 大多是这一层**。
· **stratum 15 为上限**,16 视为不可用。
**配置三条规矩**:
1. **至少配两个 NTP 源**,一个挂了还有另一个。
2. **内网自己搭一层 NTP 服务器**,
别让所有设备都去访问公网——**一是公网源会封,二是被改时间就等于被攻击。**
3. **加认证(NTP autokey 或对称密钥)**,**否则任何人伪造一个 NTP 应答就能改你的时间。**
「ppm 乘 86400 除以一百万」这个换算法要会:ppm 是「每秒差多少微秒」, 乘上一万就是每天的秒数。这条换算在算晶振、算时钟、算采样率时都用得上。
「一个月漂 130 秒」这个数字正好卡在「证书还有效、双因素已失效」之间: 这说明「不准」不是慢慢变糟,而是会在某一个阈值上突然出问题。 所以「一直没出事」不代表没问题。
最后「加了认证的时间才是可信的时间」这一句要展开:NTP 本身没有任何认证机制, 一个伪造的应答就能让设备把时间跳到十年后——而这会让所有证书失效、所有日志错乱。 所以 NTP 认证不是「高级功能」,是安全基线。
30 秒实验
- 看你设备上的时间与手机差多少秒。
- 查一下配了几个 NTP 源。
- 用 w32tm 或 ntpq 看当前与上游的偏差。
常见误区
- 以为时间差几秒无所谓。证书与双因素只容忍几十秒。
- 以为晶振不会漂。普通晶振一个月能漂两分钟。
- 以为 NTP 不用认证。伪造应答可以随意改你的时间。
自测三问(点开对答案)
1. 时间不准会导致哪四类问题? —— 日志排不出先后、证书校验失败、双因素认证失效、计费出错。 2. 50 ppm 的晶振一天会漂多少秒? —— 约 4.3 秒,一个月约 130 秒。 3. 为什么 NTP 要加认证? —— NTP 本身无认证,伪造应答即可篡改时间,进而破坏日志与证书。下一节:基础都齐了,看具体的排查命令。
- ☐ (本节完,下一节 03.07.06 故障排查)