最近我电脑的 Windows 时间同步出了点怪事。明明我选的服务器是 time.windows.com
,但同步的时候老是弹错误,说:“Windows 在与 10.74.251.12 进行同步时出错。由于超时时间已过,该操作返回。”
这就奇了怪了,10.74.251.12
这明显是个内网 IP 地址,time.windows.com
怎么会跑去连这个呢?
初步检查:
我先是看了下自己的 hosts
文件,干干净净,没什么问题。然后试了下 ping time.windows.com
,结果能通。这就让我更纳闷了,既然网络和域名解析看起来都还行,那问题出在哪儿呢?
深入排查:
接下来,我用了几个命令想看看到底怎么回事:
-
nslookup time.windows.com
: 这个命令查了下 DNS 解析。结果显示time.windows.com
解析到的是twc.trafficmanager.net
,IP 是20.189.79.72
。这是个公网IP,看起来是正常的。服务器: PHICOMM.lan Address: 192.168.2.1 非权威应答: 名称: twc.trafficmanager.net Address: 20.189.79.72 Aliases: time.windows.com
-
w32tm /query /status
: 这个命令看了下 Windows Time 服务的状态。输出是:Leap 指示符: 3(未同步) 源: Local CMOS Clock 上次成功同步时间: 未指定
得,果然是没同步上,时间源都回退到主板的CMOS时钟了。
找到元凶:
前面这些都还只是现象,没找到根本原因。直到我用了下面这个命令:
w32tm /query /peers
输出结果让我恍然大悟:
#对等数: 1
对等: 10.74.251.12,0x9
状态: 运行中
...
看到没?Windows Time 服务配置的对等服务器(Peer)竟然就是那个出错的内网IP 10.74.251.12
! 这就解释了为什么 time.windows.com
的DNS解析是对的,但同步还是去找那个内网IP。显然是这个手动指定的对等配置优先级更高。
(我还试了 w32tm /query /configuration
想看完整配置,但提示“拒绝访问”,后来才想起来这些操作得用管理员权限的命令提示符。)
解决过程:
既然找到问题根源是这个错误的对等服务器配置,那就好办了。我开了个管理员权限的命令提示符,开始修正:
-
一开始我常规操作,想先停止服务,改配置,再启动:
net stop w32time
w32tm /config /manualpeerlist:"time.windows.com,0x9" /syncfromflags:manual /reliable:yes /update
结果第二步就报错了:“服务尚未启动。(0x80070426)”。这是因为/update
参数是通知正在运行的服务更新配置,服务都停了自然会失败。 -
调整了下顺序,这次就顺利了:
- 先停止服务:
net stop w32time
- 配置对等服务器列表(这次不带
/update
,配置会直接写注册表):w32tm /config /manualpeerlist:"time.windows.com,0x9" /syncfromflags:manual /reliable:yes
(提示:成功地执行了命令。) - 启动服务(服务启动时会读取新配置):
net start w32time
(提示:Windows Time 服务已经启动成功。) - 现在服务跑起来了,再通知它更新一下当前操作参数:
w32tm /config /update
(提示:成功地执行了命令。) - 然后强制重新同步:
w32tm /resync /rediscover
(这步提示“此计算机没有重新同步,因为没有可用的时间数据。”,估计是刚改完配置,服务还没完全准备好)w32tm /resync
(再用这个简单点的同步命令,提示:成功地执行了命令。)
- 先停止服务:
结果确认:
执行完上面一套操作后,我赶紧检查了下状态:
-
w32tm /query /status
:Leap 指示符: 0(无警告) 层次: 4 (次引用 - 与(S)NTP 同步) 引用 ID: 0x14BD4F48 (源 IP: 20.189.79.72) 上次成功同步时间: 2025/5/11 10:49:09 源: time.windows.com,0x9 ...
漂亮!“Leap 指示符”是0无警告,说明同步上了。“源”是
time.windows.com,0x9
,“引用 ID”也指向了之前nslookup
查到的公网IP20.189.79.72
。“上次成功同步时间”也更新了最新的时间戳。 -
w32tm /query /peers
:#对等数: 1 对等: time.windows.com,0x9 状态: 运行中 ...
对等服务器也正确显示为
time.windows.com,0x9
。
总结一下:
这次 Windows 时间同步失败的根本原因,就是 Windows Time 服务里面被错误地手动指定了一个内网IP 10.74.251.12
作为时间同步源。这个配置的优先级比系统设置里选的 time.windows.com
(通过DNS解析)要高,导致服务傻乎乎地一直去连那个有问题的内网IP。
排查这类问题,w32tm /query /peers
命令是找到实际配置的关键。而且,所有修改系统服务配置的操作,都必须在管理员权限的命令提示符下进行。
至于那个错误的内网IP是怎么进到配置里的,具体原因我也搞不清了,可能是以前不小心手动改的,也可能是连某些网络时被DHCP服务器下发了错误的NTP信息,或者是某些软件干的好事。总之,现在问题解决了,时间同步恢复正常了就好。