适用场景:内网环境下,以 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 "HKLM\\SYSTEM\\CurrentControlSet\\Services\\W32Time\\TimeProviders\\NtpServer" /v Enabled /t REG_DWORD /d 1 /f
# 3. 设置 AnnounceFlags=5,确保未完全同步时也对外提供时间服务
reg add "HKLM\\SYSTEM\\CurrentControlSet\\Services\\W32Time\\Config" /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.com
- Stratum 层级为 2~4
- Last 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 端口开放 |
五、最佳实践建议
allow 172.16.0.0/12 # 允许指定网段设备同步本机时间



