NTP 同步失败,但可以在 Windows 10 上访问 NTP 服务器

NTP 同步失败,但可以在 Windows 10 上访问 NTP 服务器

我无法使我的时钟在 Windows 10 中同步。

当在控制面板中请求同步时,或者通过执行w32tm /resync我的计算机发送一些 NTPv3 数据包pool.ntp.org(我手动设置了该服务器,但使用哪个服务器并不重要)但没有得到响应。

但是,如果我w32tm /monitor /computers:pool.ntp.org这样做,它就会起作用,并且我可以在 Wireshark 中看到我的计算机发送 NTPv1 数据包并得到响应。

但是,如果我将计算机连接到手机的移动热点,时间同步就可以使用 NTPv3。此外,与我的 Windows 10 位于同一网络上的另一台 Linux 计算机也可以毫无问题地同步(我看到它使用 NTPv4)。

我努力了:

  • 重新启动 Windows 时间服务
  • 重置 Windows 时间服务
  • 在路由器防火墙中打开123端口
  • 更改 DNS 设置(我使用 DNS-over-TLS)

但还没有让它工作。

我的路由器采用双 NAT 配置(即互联网 - 另一个我无法控制的路由器 - 我的路由器 - 我的电脑),这可能会导致 NTP 问题,但我不明白我的 Linux 笔记本电脑如何同步。

编辑1:

带响应的 NTP 数据包 带响应的 NTP 数据包

无响应的 NTP 数据包 无响应的 NTP 数据包

答案1

正如评论中所讨论的那样,区别Windows 中的 W32time 服务以“对称”模式使用 NTP 端口号,其中目标和来源端口号为 123,即使它表现为纯粹的客户端并且未设置为对称对等体(它具有该功能)。

这意味着无状态防火墙无法区分入站回复和入站查询,因为它们都“到达”端口 123,并且如果 ISP 有一个阻止您托管 NTP 服务器的过滤器,它也会阻止您使用在此模式下工作的 NTP 客户端。

Linux NTP 软件通常遵守协议规范,并在客户端/服务器模式下使用临时源端口,就像大多数其他 UDP 软件一样(123→123 仅用于对称模式)。同样,该w32tm工具之所以有效,是因为其监视器/条形图选项使其使用绑定到临时端口的常规套接字生成自己的 NTP 查询。

  • 如果您有一个始终在线的 Linux 或 BSD 系统,那么您可以将该系统用作您的内部 NTP 服务器(只需很少的设置就可以使 Chrony 或 ntpd 作为中等质量的服务器工作)。

    这也应该适用于 WSL2,因为它的内核时钟并不严格与主机时钟绑定(据我记得)——应该可以在 WSL2 内部运行 Chrony 作为你的 NTP 服务器,并告诉它不要尝试更新 RTC。

  • 如果您有可以通过 VPN 的地方,您可能能够使用 VPN 连接进行 NTP。

  • 第三方 Windows NTP 客户端也应该可以工作 - 特别是如果本地端口 123 已被 W32time 占用,那么他们别无选择,只能使用另一个本地端口。例如,网络时间看起来可能会有用。

  • 非 NTP 协议的第三方客户端也可能有效,因为它们不使用相同的 UDP 端口。其准确性不如 NTP,但对于 PC 来说可能已经足够了。例如,NIST 发布了其尼什泰梅客户端可以使用 NTP 以及较旧的 RFC-868 协议。

相关内容