我有一个没有互联网的本地网络,想让那里的所有计算机的时间保持同步。我不在乎绝对时间,它应该对所有计算机都相同。
我找到了几篇关于此的帖子。最有用的是:
服务器
我确实设置了 IP 为 192.168.1.123 的服务器,它似乎运行正常:守护进程“ntpd”正在运行,我已经在 etc/ntp.conf 中添加了以下行
# this sets the source to local time
server 127.127.1.0
fudge 127.127.1.0 stratum 8
# this makes the ntpd deamon to send out its time on the local net.
broadcast 192.168.255.255
我使用 ntpq 命令验证了这一点:
ntpq -c lpeer
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.255.255 .BCST. 16 B - 64 0 0.000 0.000 0.000
“BCST”表示其在进行更多广播,并且 IP 显示其向本地网络上的所有计算机进行广播(B 类网络,因此为 2x 255)。
客户
在客户端,我还安装了 ntp,并使用默认的 /etc/ntp.conf,并添加了以下行
server 192.168.1.123 iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 8
其中 192.168.1.123 是服务器广播的本地 IP,另一行应该告诉客户端(笔记本电脑)在网络连接关闭时使用自己的时钟。我重新启动了客户端上的服务并运行 ntpq 来检查连接
ntpq -c lpeer
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.1.123 .INIT. 16 u 1 64 0 0.000 0.000 0.000
LOCAL(0) .LOCL. 8 l 6 64 1 0.000 0.000 0.000
重复此命令,我可以看到“何时”列同时计数,并在达到 64 秒时再次从 0 开始。我确实预计 64 秒后会变成这样:
ntpq -c lpeer
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.1.123 .INIT. 16 u 1 64 0 0.000 0.000 0.000
LOCAL(0) .LOCL. 8 l 6 64 1 0.000 0.000 0.000
请注意服务器 IP 前的“*”。但它确实不是大约 1 小时后,我得到的结果是
ntpq -c lpeer
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.1.123 .INIT. 16 u 1 64 0 0.000 0.000 0.000
*LOCAL(0) .LOCL. 8 l 63 64 377 0.000 0.000 0.000
我认为这告诉我,配置了 2 个 NTP 源,但由于远程源不工作/不可用/无论如何它都没有被使用并且使用后备情况本地时钟,但我不确定这种解释是否正确。
我尝试过
我等了 1 个多小时,我ntpd
用 重启了几次sudo /etc/init.d/ntp restart
,然后重启了。此外,我注释掉了本地时钟部分,这样唯一的服务器就是server 192.168.1.123
。我无法让那个“*”出现。我还看到 ntp.conf 中有一段内容说
#if you want to listen to time broadcasts on you local subnet,
#de-comment the next lines. Please do this only if you trust
#everybody on the network!
#disable auth
#broadcastclient
我尝试取消注释并重新启动服务,但仍然没有出现星号。不过,我对最后一部分感到疑惑,因为这部分确实出现在我在 ntp 配置上看到的任何其他帖子或互联网结果中。本地设置中有几个,大多数似乎仅通过服务器地址就可以找到。从客户端到服务器的 ping 没问题。没有防火墙等。
问题
我没有主意了。我想我有一个完全正常工作的 ntp 服务器,它正在发送时间。但我有一个客户端无法从服务器接收时间信息。
我该怎么做才能让客户端运行起来?
答案1
问题已解决,系统现在可以正常工作。我为自己和其他需要(再次)设置离线 NTP 服务器的人做了这个总结。实际问题似乎是广播模式的实验破坏了服务器上的 ntpd,它在另一台服务器重启后再次正常工作。我不太清楚为什么当我按照上述帖子操作时它不起作用。
背景
部分问题在于我不了解 NTP 的工作原理以及我正在做什么。手册页和服务器指南 16.04 都没有提供不同计算机协同工作的简化概述。首先,NTP 客户端和服务器具有误导性。它始终是同一个程序,即 NTP 守护进程“ntpd”。它必须安装在本地网络上的每台计算机上才能使时间同步工作。我还没有检查 Windows 客户端,但我确信某个地方也有它们的版本(如果您有相关信息,请发表评论 - 最好有内置功能)。离线系统只能在系统时钟上工作。使用多个系统时钟(而不仅仅是主服务器)是有益的,因为每个时钟都会增加以减少时间漂移。换句话说,一个时钟会使所有计算机同步,但当考虑更多时钟时,绝对时间会更稳定和精确。从我读到的内容来看,4 应该是一个不错的数字。NTP 可以同时充当服务器和客户端。默认配置文件实际上没有用于服务器角色的配置部分。作为简单模型,每个ntpd
实例都是一个客户端,它通过定期轮询从某个地方获取时间信息。要么轮询另一个ntpd
,要么轮询本地板载时钟。当它回答来自其他服务器的轮询时,它就变成了服务器。例如,通过代理服务器连接到互联网的网络。该代理服务器将运行ntpd
以轮询多个互联网 NTP 服务器,从而向它们发送自己的时间。当所有本地客户端轮询该代理服务器以获取其(同步)时间并且它开始回答轮询时,它本身就变成了 NTP 服务器。我们的离线情况正是如此,只是在线服务器被板载时钟取代。
配置
为了进行设置,/etc/ntp.conf
必须编辑文件。默认文件非常多。我删除了所有内容,除了:
# this is the IP or name of the local networks NTP server. This line
# should be commented out on the server
server 192.168.1.111
# this enables checking the local clock. Do not change that IP values!
server 127.127.1.0
fudge 127.127.1.0 stratum 10
# this lines are required to run the ntpq -p command to verify the
# function of the system
restrict 127.0.0.1
restrict ::1
该示例中的服务器 IP 为 192.168.1.111。此配置对于网络上的所有 PC 都相同。仅在非笔记本电脑的客户端上注释掉本地时钟部分。笔记本电脑和其他可能在一段时间内不联网运行的设备上应保留此行。应在服务器上注释掉第一个服务器部分。
编辑后使用启动/停止脚本重新启动服务
sudo /etc/init.d/ntp restart
用于检查运行
ntpd -p
它比问题中的版本短一点,但输出相同。*
时钟线之前有一个,表示正在使用。以下是工作服务器的输出:
remote refid st t when poll reach delay offset jitter
==============================================================================
*LOCAL(0) .LOCL. 2 1 6 64 377 0.000 0.000 0.000
当列正在计数时,范围是任何 >0。以下是工作客户端的输出:
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.1.111 LOCAL(0) 3 u 31 64 377 0.206 -5.900 0.654
如果您仍使用 refid=,.INIT.
则不起作用。数字显然会有所不同。客户端不应显示 0.000 0.000 0.000 值。具有额外配置的回退时钟的客户端的输出(请注意,它现在未被使用 - 没有*
):
remote refid st t when poll reach delay offset jitter
==============================================================================
*192.168.1.111 LOCAL(0) 3 u 31 64 377 0.206 -5.900 0.654
LOCAL(0) .LOCL. 8 l 6 64 1 0.000 0.000 0.000
附加信息
默认配置描述了广播发送和广播接收选项。不要激活此选项以实现正常操作。启动系统和配置客户端和服务器时不需要此选项。如果出现任何问题,不仅要重新启动服务,还要完全重新启动。即使是 ubuntu 服务器。当系统没有运行时,我注意到应该有ps -e |grep ntp
2 个“ntpd”进程。该对可以一致地启动和停止。正在运行的版本在每台计算机上仅显示一个。默认配置文件中还有其他限制选项和日志记录选项可能有用。没有测试它们。
希望这在将来有用。如果您有更正,请发表评论,我会尝试更新答案。
猫人
PS:非常感谢肯·莫勒普,他的评论使我对 NTP 系统有了更好的理解。
答案2
Ntpd 是服务器,ntpdate 是客户端。正确的配置应该使 ntpd 能够工作,并且所有客户端都可以从中更新。我不同意在每台客户端计算机上安装 ntpd 的方式。在所有其他系统上安装 ntpd 作为客户端非常麻烦。
此外,您还可以从多台服务器获得平均时间。有时这可能很有用,但我认为您不需要它。如果服务器有时间漂移,更新后的时间将逐渐失去精度。