无法从 Windows 连接到任何 ntp 服务器

无法从 Windows 连接到任何 ntp 服务器

我有三台 Windows 计算机,我正尝试将它们同步到 NTP 服务器。但所有计算机都无法同步。我已确认通过从 WSL 连接,NTP 服务器运行正常。

这是我尝试过的:

我已windows time在 Windows 服务中启用。

我试过了Control panel -> date and time -> internet clocks -> input server -> sync。失败了

我已经在提升的提示中尝试过了:

w32tm /resync /rediscover

此错误:The computer did not resync because no time data was available

我已尝试手动配置:

w32tm /config /manualpeerlist:<ip> /syncfromflags:manual

这报告成功但实际上并没有设定时间......

我尝试将其关闭然后再次打开:

net stop w32time
net start w32time
w32tm /config /update
w32tm /resync /rediscover

我也尝试过重新启动以及在网上找到的上述所有其他组合,但得到的结果相同。

我尝试使用pool.ntp.org并得到了相同的结果。

然后我尝试了telnet <ip> 123,它报告说服务器无法访问。

ping <ip>工作正常。

在 WSL(ubuntu)中,sudo ntpdate -q <ip>可以正常工作。

我已禁用所有机器上的防火墙。

答案1

您的网络之外很可能还有另一个防火墙,它试图无状态地阻止所有入站NTP 请求(可能作为某种 DDoS 预防),但也会导致阻止某些类型的 NTP 响应。

然后我尝试了telnet <ip> 123,它报告说服务器无法访问。

NTP 完全通过 UDP 运行;它不使用 TCP。

在 WSL(ubuntu)中,sudo ntpdate -q <ip>可以正常工作。

NTP 有两种模式:客户端-服务器模式和对称模式。它们以 UDP 端口来区分,这有点不寻常:客户端-服务器使用典型的模型,其中源端口号是随机选择的,而对称模式则使用 123 作为目标源端口(在其他协议中很少甚至从未见过该端口)。

如果您查看 Wireshark 中的实际数据包,您会看到:

  • ntpdate使用客户端-服务器模式,因此它从随机端口发送数据包;响应通过该随机端口到达您的系统。

  • Windows 使用对称模式,因此它从端口 123 发送数据包;这意味着来自服务器的响应被发送到你这边的端口 123,使它们看起来就像一个要求在无状态防火墙眼中。

众所周知,有几家 ISP 会阻止后者,例如,我发现论坛帖子称 AT&T 因阻止后者而臭名昭著。

我认为您无法改变 Windows 时间服务在这方面的工作方式;您唯一的选择可能是 a) 为您的 LAN 运行一个小型本地 NTP 服务器,然后使用未被阻止的模式同步到某些上游 NTP;或 b) 运行可通过 IPsec 或某种 VPN 访问的外部 NTP 服务器。


(有时这也取决于你的路由器——许多路由器以这样的方式实现 NAT,它强行改变 UDP 数据包的源端口,因此即使 Windows 确实从端口 123 发送数据包,执行阻止的 ISP 也可能永远不会看到它,这要归功于路由器的 NAT 隐藏了它,并且一切似乎都运行正常。

最重要的是,即使通常不重写 UDP 源端口的路由器,当两台计算机尝试与同一台服务器通信时,仍会出于必要而这样做,在这种情况下它似乎只对第二台计算机有效。)

相关内容