![Windows NTP 客户端未与 Linux 服务器同步](https://linux22.com/image/775603/Windows%20NTP%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%9C%AA%E4%B8%8E%20Linux%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%8C%E6%AD%A5.png)
我正在尝试同步本地网络上三台计算机的时间。虽然与世界/互联网的漂移/误差尽可能小是件好事,但这不是我的专长。我主要关心的是三台计算机之间尽可能同步。
为了实现这一点,我已将两台 Ubuntu 计算机中的一台 (192.168.1.50) 设置为 ntp 服务器。我通过编辑 ubuntu ntp 服务器配置文件/etc/ntp.conf
并添加以下内容来完成此操作:
server 127.127.1.0 iburst
fudge 127.127.1.0 stratum 10
然后,我检查另一台 Ubuntu 计算机 (192.168.1.71) 是否与其同步。首先,我server controlstation prefer iburst
在末尾添加了/etc/ntp.conf
,并使用 重新启动了时间服务sudo service ntp restart
。之后,我可以通过运行 来检查这两台计算机是否正确同步时间ntpdate -q 192.168.1.50
:
server 192.168.1.50, stratum 2, offset 0.001271, delay 0.02599
8 Mar 11:06:36 ntpdate[17648]: adjust time server 192.168.1.50 offset 0.001271 sec
这似乎工作正常,并且 0.001271 偏移量对于我的目的来说是可以接受的。接下来是对 windows (192.168.1.201) 执行相同操作。首先我检查计算机是否确实不同步:
w32tm /stripchart /computer:192.168.1.50
12:10:01, d:+00.0010124s o:-00.4908814s [ *| ]
12:10:03, d:+00.0005757s o:-00.4907188s [ *| ]
这是有道理的,因为 Windows 客户端迄今为止已同步到time.windows.com
:
w32tm /query /status
Leap Indicator: 0(no warning)
Stratum: 4 (secondary reference - syncd by (S)NTP)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0386977s
Root Dispersion: 8.2445365s
ReferenceId: 0x33917B1D (source IP: 51.145.123.29)
Last Successful Sync Time: 3/8/2022 12:13:23 PM
Source: time.windows.com,9
Poll Interval: 10 (1024s)
我更改了时间服务器w32tm /config /update /manualpeerlist:192.168.1.50,0x8 /syncfromflags:MANUAL
并强制重新同步w32tm /resync
:
Sending resync command to local computer
The command completed successfully.
然后,再次检查了 ubuntu ntp 服务器和这台 windows 机器之间的时间差:
w32tm /stripchart /computer:192.168.1.50
Tracking 192.168.1.50 [192.168.1.50:123].
The current time is 3/8/2022 12:22:01 PM.
12:22:01, d:+00.0005075s o:-00.4568042s [ *| ]
12:22:03, d:+00.0010415s o:-00.4566323s [ *| ]
12:22:05, d:+00.0009737s o:-00.4569219s [ *| ]
这表明 Windows ntp 客户端显然未与 ubuntu ntp 服务器同步。但是,如果我检查状态:
w32tm /query /status
Leap Indicator: 0(no warning)
Stratum: 3 (secondary reference - syncd by (S)NTP)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0314761s
Root Dispersion: 8.2468633s
ReferenceId: 0xC0A80132 (source IP: 192.168.1.50)
Last Successful Sync Time: 3/8/2022 12:20:37 PM
Source: 192.168.1.50,8
Poll Interval: 10 (1024s)
很明显,源是正确的(192.168.1.50),并且它在查询之前已经同步。
答案1
这些 Windows 机器是否加入了 Active Directory 域?
如果是这样,默认组策略配置将覆盖您尝试的任何手动 NTP 配置。
您可以在组策略中为客户端计算机配置自定义 NTP 配置,但完全不建议对 AD 客户端工作站使用自定义 NTP,因为这很容易导致客户端和域控制器之间出现漂移,并且如果超过神奇的 5 分钟标记,Kerberos 就会崩溃,您的登录将开始失败
最佳做法是让您的 PDC 角色域控制器执行 NTP 到互联网,然后您的所有客户端都通过 PDC 和其他域控制器进行接收
配置状态输出实际上并没有显示任何错误或理由表明它没有与 NTP 服务器同步 - 是什么让您认为它没有同步?
值得注意的是,NTP 不会不断地重新同步,它会在特定窗口进行轮询,随着时间的推移,该窗口会逐渐减慢速度以维持负载,目前它表示每 1024 秒将轮询/同步其时间,间隔刚好超过 16 分钟。
还需要注意的是,主板上的 CPU 时钟和 CMOS 时钟/晶体的频率都会有非常轻微的差异,这一切都是导致您首先出现时间漂移的原因,456ms 的差异虽然看起来并不是那么出色,但仍然在非常可以接受的范围内,除非您处理非常时间敏感的问题(比如需要小于 1 秒的精度)或基于实时内核的问题 - 您很可能首先不会使用 Windows ;)
答案2
还要注意的是,大多数 NTP 实现都会尽最大努力不让运行它们的机器的时钟步进。相反,它们会尝试加快时钟速度,最终赶上时间源。这是为了避免时钟在时间上向前或向后跳跃,因为有些应用程序不太喜欢这样。而且,小于 0.5 秒肯定低于步进时钟的阈值,所以我敢打赌机器会在一天左右的时间内赶上 NTP 服务器。还请记住,NTP(也不是 PTP)不提供两台机器的绝对同步,它总是在容差范围内。我不记得可以实现的容差,但 NTP 大约是毫秒,PTP 大约是微秒/纳秒。