我有一个没有互联网的本地网络,并希望在那里保持所有计算机的时间同步。我不在乎绝对时间,它应该对所有人都一样。
我找到了几个关于这个的帖子。最有用的是:
服务器
我确实使用 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
重复此命令,我可以看到“when”列同时计数,并在达到 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 服务器的服务器,它正在发送时间。但是我确实有一个客户端无法从服务器接收时间信息。
我该怎么做才能让客户端运行?
问题已解决,系统现在可以正常工作。我为自己和任何其他需要设置离线 NTP 服务器(再次)的人做这个总结。实际问题似乎是广播模式的实验破坏了服务器上的 ntpd,它再次在另一台服务器重新启动时工作。为什么当我遵循上述给定的帖子时它不起作用,我不太确定。
背景
部分问题是我不了解 NTP 的工作原理以及我在做什么。手册页和服务器指南 16.04 都没有给出不同计算机一起工作的简化概述。首先,NTP 客户端和服务器具有误导性。它总是相同的程序,NTP 守护进程,“ntpd”。它必须安装在本地网络上的每台计算机上,时间同步才能工作。我还没有检查 Windows 客户端,但我确信在某个地方也有它们的版本(如果你有关于它的信息,请发表评论 - 内置函数将是首选)。离线系统只能在系统时钟上工作。使用多个系统时钟是有益的,不仅是主服务器,因为每个时钟都增加以减少时间漂移。换句话说,一个时钟将使所有计算机同步,但是当考虑更多时钟时,绝对时间会更加稳定和精确。从我读到的 4 应该是一个不错的数字。NTP 可以同时充当服务器和客户端。默认配置文件实际上并没有服务器角色的配置部分。作为简单模型,每个
ntpd
instance 是一个客户端,它通过定期轮询从某处获取时间信息。轮询另一个ntpd
或轮询本地板载时钟。当回答其他人的投票时,它成为服务器。例如,通过代理服务器连接到 Internet 的网络。该代理服务器将运行ntpd
以轮询多个 Internet NTP 服务器,从而将自己的时间同步给它们。当所有本地客户端轮询该代理服务器的(同步)时间并开始回答轮询时,它就变成了 NTP 服务器本身。离线情况就是这样,除了在线服务器被板载时钟取代。配置 对于设置,
/etc/ntp.conf
必须编辑文件。默认是相当丰富的东西。我删除了所有除了:该示例中的服务器具有 IP 192.168.1.111。对于网络上的所有 PC,此配置可以相同。仅在非笔记本电脑的客户端上注释掉本地时钟部分。该线路应保留在笔记本电脑和其他可能在一段时间内脱离网络运行的设备上。第一个服务器部分应在服务器上注释掉。
编辑后使用启动/停止脚本重新启动服务
用于检查运行
ntpd -p
它比问题中的版本短一点,并给出相同的输出。在时钟线之前有
*
一条表明它正在被使用。这里是工作服务器的输出:当列向上计数时,范围是>0。这里是一个工作客户端的输出:
如果您还 refid=
.INIT.
它不起作用。数字会明显不同。客户端不应显示 0.000 0.000 0.000 值。带有额外配置后备时钟的客户端的输出(注意它现在没有被使用 - 否*
):添加信息 默认配置描述了广播发送和广播接收选项。不要为正常操作激活它。无需启动系统并配置客户端和服务器。如果出现任何问题,不仅要重新启动服务,还要完全重新启动。甚至是一个 ubuntu 服务器。当系统没有运行时,我注意到
ps -e |grep ntp
应该有 2 个 'ntpd' 进程。该对可以持续启动和停止。运行版本在每台计算机上仅显示一个。默认配置文件中还有其他限制选项和日志记录选项可能有用。没有测试他们。希望这在某个时候变得有用。如果您有更正,请发表评论,我会尝试更新答案。
猫人
PS:非常感谢Ken Mollerup,他的评论让我对 NTP 系统有了更好的理解。
Ntpd 是服务器,ntpdate 是客户端。正确的配置应该启用 ntpd 工作,并且所有客户端都可以从中更新。我不同意在每台客户端计算机上安装 ntpd 的方式。在所有其他系统上安装 ntpd 作为客户端非常麻烦。
此外,您还可以从多台服务器获得平均时间。有时它可能有用,但在您的情况下我看不到必要性。如果服务器有时间漂移,更新的时间会逐渐失去精度。