Windows W32Time 作为 NTP 服务器 + Linux Chrony 客户端高精度同步配置指南
适用场景:内网环境下,以 Windows 自带 W32Time 服务作为中心时间源,Linux 主机通过 Chrony 客户端实现毫秒级时间同步,满足三级等保时钟一致性要求。
问题背景:W32Time 的 NTP 实现与标准存在差异,默认配置下 Chrony 会拒绝其响应,表现为 chronyc sources -v 显示 ^?、系统状态为 Not synchronised。
验证结果
- ✅ Windows 时间源 Stratum = 3(同步自 ntp.aliyun.com)
- ✅ Linux 客户端同步成功,
chronyc sources -v显示^* - ✅ 系统时间偏差稳定在毫秒级
- ✅ 配置经生产环境验证有效
一、Windows 服务端配置(启用 W32Time NTP 服务器模式)
操作前提:以管理员身份运行 CMD 命令行。
1.1 配置上游时间源并启用 NTP 服务
# 1. 配置上游可靠时间源(阿里云 NTP),标记本机为可靠时间服务器
w32tm /config /syncfromflags:manual /manualpeerlist:"ntp.aliyun.com" /reliable:yes /update
# 2. 启用 NTP 服务器功能(核心配置,默认关闭)
reg add "HKLMSYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpServer" /v Enabled /t REG_DWORD /d 1 /f
# 3. 设置 AnnounceFlags=5,确保未完全同步时也对外提供时间服务
reg add "HKLMSYSTEMCurrentControlSetServicesW32TimeConfig" /v AnnounceFlags /t REG_DWORD /d 5 /f
# 4. 重启 W32Time 服务使配置生效
net stop w32time && net start w32time
# 5. 强制立即与上游时间源同步
w32tm /resync
1.2 配置防火墙允许 NTP 流量(UDP 123)
方式 1:PowerShell 命令(管理员权限)
# 允许内网设备访问 UDP 123 端口,仅适用于 Private/Domain 网络
New-NetFirewallRule -DisplayName "W32Time NTP Server" -Direction Inbound -Protocol UDP -LocalPort 123 -Action Allow -Profile Private,Domain
方式 2:CMD 命令(管理员权限)
netsh advfirewall firewall add rule name="W32Time NTP Server" dir=in action=allow protocol=UDP localport=123 profile=private,domain
1.3 验证 Windows NTP 服务状态
执行以下命令检查配置结果:
w32tm /query /status
验证标准:
Source字段显示为ntp.aliyun.comStratum层级为 2~4Last Successful Sync Time为近期时间
二、Linux 客户端配置(Chrony 同步 Windows NTP 服务器)
适用系统:银河麒麟 V10 及其他主流 Linux 发行版
2.1 完整配置 /etc/chrony.conf
# 核心配置:指向 Windows W32Time 服务器 IP,添加 trust 参数兼容非标准 NTP 响应
server 172.22.212.23 iburst trust minpoll 4 maxpoll 6 offset 0.0
# 放宽 maxdistance 限制(W32Time 常返回 >3 秒 dispersion,默认 3 秒会被拒绝)
maxdistance 16.0
# 大偏移修正策略:前 3 次同步若偏移 >1 秒,直接步进调整(避免平滑调整耗时过长)
makestep 1.0 3
# 记录时钟漂移文件路径
driftfile /var/lib/chrony/drift
# 同步系统时间到硬件时钟(RTC),防止重启后时间偏差
rtcsync
# 配置日志路径及日志类型(用于调试、监控和等保审计)
logdir /var/log/chrony
log measurements statistics tracking
关键参数说明:
| 参数 | 作用 |
|---|---|
trust | 跳过对 NTP 包字段的严格校验,适配 W32Time 非标准实现 |
maxdistance 16.0 | 允许更大的时间分散度,避免 W32Time 响应被 Chrony 拒绝 |
makestep 1.0 3 | 解决大偏移同步僵局,快速修正时间差 |
2.2 应用配置并重启服务
# 重启 Chrony 服务
sudo systemctl restart chronyd
# 设置开机自启
sudo systemctl enable chronyd
# 强制立即同步时间(适用于首次配置或大偏移场景)
sudo chronyc -a makestep
三、同步状态验证
3.1 查看 NTP 源状态
chronyc sources -v
成功标志:输出中目标 Windows 服务器前显示 ^*,示例如下:
^* 172.22.212.23 3 6 377 12 +12ms[ +10ms] +/- 45ms
^*:表示当前正在使用的同步源Reach = 377:最近 8 次同步请求均成功响应
3.2 查看系统同步详情
chronyc tracking
成功标志:
Reference ID : AC16D417 (172.22.212.23)
Stratum : 4
Leap status : Normal
四、常见问题与解决方案
| 问题现象 | 根本原因 | 解决方案 |
|---|---|---|
chronyc sources -v 显示 ^? | W32Time 响应因字段不标准被 Chrony 拒绝 | 在 server 行添加 trust 参数,设置 maxdistance 16.0 |
chronyc tracking 显示 Stratum : 0 | 启用了 local stratum 或无有效同步源 | 注释掉 chrony.conf 中 local 相关配置,检查 NTP 服务器连通性 |
| 初始时间偏移 >30 秒无法同步 | Chrony 默认不允许大偏移步进调整 | 配置 makestep 1.0 3 并执行 chronyc -a makestep |
| Linux 客户端无法连接 NTP 服务器 | Windows 防火墙未放行 UDP 123 端口 | 检查并重新配置防火墙入站规则,确保 UDP 123 端口开放 |
五、最佳实践建议
- 禁止手动修改系统时间:依赖 NTP 自动同步,避免时间跳跃影响数据库、Ceph 等集群应用运行。
- 定期检查时间源健康度:在 Windows 服务器执行
w32tm /query /status,确保不回退到Local CMOS Clock(Stratum=16)。 - 内网层级架构扩展(可选):将已同步的 Linux 主机配置为二级 NTP 服务器,供其他内网设备同步,减轻 Windows 服务器压力。
# 在 Linux 客户端的 chrony.conf 中添加以下配置 allow 172.16.0.0/12 # 允许指定网段设备同步本机时间 - 日志监控与审计:定期查看
/var/log/chrony/measurements.log,监控时间偏移和延迟趋势,及时发现网络或服务器异常,满足等保日志留存要求。
附录:核心原理说明
trust参数:专为非标准 NTP 服务器设计,跳过对 NTP 包中root dispersion、refid等字段的严格校验,适配 W32Time 等特殊实现。maxdistance参数:默认值为 3 秒,W32Time 因算法差异常返回超过 3 秒的root dispersion,需显式放宽阈值才能正常同步。makestep参数:解决 “大偏移僵局”——Chrony 优先使用平滑调整(slew)修正时间,但偏移过大时调整速度极慢,makestep可强制步进调整。









