我无法使我的时钟在 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:
答案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 协议。