我有一个树莓派连接到没有互联网接入的本地网络。我已将一台计算机配置为充当时间服务器(Windows 时间服务)。时间服务器的 IP 为 192.168.6.1,树莓派的 IP 为 192.168.6.83。
我一直在阅读有关 NTP 以及如何配置 NTP 的内容。我的配置文件(/etc/ntp.conf)如下所示:
tinker panic 0
server 192.168.6.1 prefer true iburst
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp.log
minpoll 4
maxpoll 5
“ntpq -pn”命令的输出是:
remote refid st t when poll reach delay offset jitter
===============================================================================
192.168.6.1 192.168.6.82 3 u 23 64 3 0.652 1836879 2.136
有一个很大的偏移量,但如果我理解正确的话,这应该不重要,因为配置文件中的“tinkerpanic 0”行。
我知道服务器工作正常,因为我可以使用以下命令同步正确的时间:
sudo sntp -s 192.168.6.1
我希望树莓派与服务器同步,无论偏移量是多少。它应该自动进行。我希望树莓派在启动时同步,然后保持同步。
我知道这个帖子的事这里但这使用了似乎已贬值的 ntpdate 。
答案1
为了能够与 Windows NTP 同步,请添加
tos maxdist 30
结束/etc/ntp.conf
并重新启动 NTP 服务。
从为什么我需要进行调整来强制 VMware ESXi 5 与 Windows NTP 服务器同步时间
(斜体字引文略有改动)
默认情况下,未同步的 Windows 服务器选择 10 秒分散时间,并在保持同步的每个轮询间隔上添加分散时间。 ALinux ntpd默认情况下,不接受任何根离散度大于1.5秒的NTP回复。
除此之外,您还必须对 Windows 进行更改。
答案2
经过更多的尝试和错误,我找到了问题的解决方案。大多数功劳归功于@Rui F Ribeiro,他的回复为我指明了正确的方向(后来他因不正确而删除了该回复)。因为这确实导致了我发布它的解决方案。
Windows 时间服务默认实现 Simple-NTP (SNTP),而不是 NTP。因此,ntp
守护程序将无法与 SNTP 服务通信。
使用命令同步sudo sntp -s 192.168.6.1
是SNTP的一种实现方式,因此可以设置时间。
我的问题的解决方案是使用 NTP 服务(在 Windows 上),可以找到这里(链接指向教程)。
该程序使用linux语法在windows上实现NTP协议。当安装该服务的计算机连接到互联网时,该服务可以开箱即用。我希望即使 Windows 计算机无法到达时间服务器也能够同步时间。因此,我必须编辑 ntp.conf 文件以包含以下行:
# add the Local clock
server 127.127.1.0
# Set stratum to a high level so that the clock is accepted
fudge 127.127.1.0 stratum 5
这使得树莓派能够与 Windows 计算机同步(可能连接到互联网,也可能未连接到互联网)。