隔离网络上的单个 NTP 服务器

San*_*nto 9 linux ntp time

我在一个隔离的网络上有两台 linux 机器(A 和 B)。它们必须是时间同步的。机器 A 是间歇性供电的,必须为时间服务,因为它连接到权威时间源 (GPS)。机器 B 仅在机器 A 上电时才上电,但它是嵌入式 linux 设备,其电源状态会经常变化。两台机器都无法访问其他系统。这是一个封闭的网络。

我知道这对 NTP 来说是一项艰巨的任务,因为 NTP 通常希望与多个服务器有联系。我无法让它在机器 B 上正常工作。机器 A 与 GPS 同步得很好,机器 B 可以到达机器 A 甚至进行时间查询,但机器 A 不受信任(也许是它本身?)。在机器 A 启动了一个小时后,情况突然发生了变化,机器 B 开始工作。然而,当机器 A(因此机器 B)出现故障时,机器 B 再次无法找到良好的时间同步。

这是一些 ntpdate 信息。请注意,即使机器 A 的层数为 1,操作也会失败,最后输出相同。

10.10.10.1:服务器掉线:层数太高
服务器 10.10.10.1,端口 123
16层,精度-19,飞跃11,信任000
refid [10.10.10.1],延迟 0.02614,分散 0.00000
传输 4,在过滤器 4
参考时间:00000000.00000000 2036 年 2 月 7 日星期四 6:28:16.000
原始时间戳:d3a9bdc4.27ebb350 Thu, Jul 12 2012 21:19:00.155
传输时间戳:bc17c803.b42dfffe 2000 年 1 月 1 日星期六 0:25:39.703
滤波器延迟:0.02625 0.02614 0.02618 0.02625 
         0.00000 0.00000 0.00000 0.00000 
过滤器偏移量:39544160 39544160 39544160 39544160
         0.000000 0.000000 0.000000 0.000000
延迟 0.02614,分散 0.00000
偏移量 395441600.451568

 1 月 1 日 00:25:39 ntpdate [677]:找不到适合同步的服务器

我的猜测是机器 A 只是不相信自己的服务时间。经过 51 分钟(可能发生得更早,我不知道)的正常运行时间并将其时钟与 GPS 同步后,机器 A 开始正确提供时间,而机器 B 接收到它。我需要早点发生。就像,如果可能的话,在几秒钟内。

使用以下配置(以及大量等待),它最终成功。

机器A ntp.conf:

服务器 127.127.28.0 更喜欢真正的 minpoll 4 maxpoll 4
fudge 127.127.28.0 层 1 time1 0.420 refid GPS 

机器B ntp.conf:

服务器 10.10.10.1 更喜欢真正的 minpoll 4 maxpoll 4

ntpq -c 在机器 B 上对等,没有很好的时间修复:

     轮询到达延迟偏移抖动时的远程重新定义
================================================== ============================
 10.10.10.1 .步骤。16 u 9 16 0 0.000 0.000 0.000

ntp1 -c 在机器 B 上对等,并及时修复:

     轮询到达延迟偏移抖动时的远程重新定义
================================================== ============================
*10.10.10.1 SHM(0) 2 u 7 16 17 0.669 2.597 1.808

所以,现在问题变成了:我如何让机器 A 快速信任自己?

机器 B 之前和之后机器 A 的一些调试输出决定机器 A 足以使用..

前..

~ # ntpq -c rv
associd=0 状态=c418leap_alarm,sync_uhf_radio,1 个事件,no_sys_peer,
version="ntpd 4.2.6p4@1.2324 Fri Feb 24 15:01:45 UTC 2012 (1)",
处理器=“armv7l”,系统=“Linux/2.6.35.14”,leap=11,stratum=2,
精度=-19,rootdelay=0.000,rootdisp=44.537,refid=SHM(0),
reftime=d3ab0053.43b44780 2012 年 7 月 13 日星期五 20:15:15.264,
时钟 = d3ab0062.e7e03154 2012 年 7 月 13 日星期五 20:15:30.905,peer=34819,tc=4,
mintc=3,偏移=0.000,频率=0.000,sys_jitter=3.853,
clk_jitter=36.492,clk_wander=0.000

后...

~ # ntpq -c rv
associd=0 状态=0415leap_none,sync_uhf_radio,1 个事件,clock_sync,
version="ntpd 4.2.6p4@1.2324 Fri Feb 24 15:01:45 UTC 2012 (1)",
处理器=“armv7l”,系统=“Linux/2.6.35.14”,leap=00,stratum=2,
精度=-19,rootdelay=0.000,rootdisp=41.278,refid=SHM(0),
reftime=d3ab0063.43b37856 2012 年 7 月 13 日星期五 20:15:31.264,
时钟 = d3ab006d.9ee53ec2 2012 年 7 月 13 日星期五 20:15:41.620,peer=34819,tc=4,
mintc=3,偏移=0.000,频率=43.896,sys_jitter=0.762,
clk_jitter=36.953,clk_wander=0.000

Bil*_*hor 9

NTP 应该可以正常工作。查看启动时快速同步的一些选项。查看系统 B的burstiburst选项。查看trueGPS 时钟源的选项。

考虑使用硬件时钟作为两个系统上的备份时间源。设置一个更高的层系统 B. 像下面这样的东西应该可以工作:

server  127.127.1.0
fudge   127.127.1.0 stratum 8
Run Code Online (Sandbox Code Playgroud)

观察 的输出ntpq -c peers以查看何时获得可信赖的时钟源。通常ntp,在信任某个可信时间源之前,它需要一些来自可信时间源的响应。这由每行的第一个字符表示。

虽然 NTP 喜欢更多的来源,但一个层级内的任何奇数个时间来源都应该可以很好地工作。由于您只有两台服务器和一个 GPS 时钟,因此源的优先级(层)应该从 GPS、服务器 A 上的时钟、服务器 B 上的时钟增加。将每个层之间的层增加三到四级将确保优先级得到尊重。

编辑:如果你在服务器 A 上有 busybox NTP 服务器,那么安装完整的 ntp 服务器包可能是值得的。了解服务器 A 发生的情况应该对解决您的问题大有帮助。在服务器 B 信任它之前,您至少需要一个可信的时间源。如果ntpq -c peers不起作用,那么您可以尝试ntpdc peers。这两个命令都允许您查询其他主机。一个peerstats日志也可能是有用的。

在服务器 B 上使用 ntpclient 作为记录的busybox ntp howto来记录发生的事情

如果服务器没有长时间停机,时钟应该合理地接近正确的时间。如果您需要同步两个系统,那应该就足够了。GPS最终将使时间与现实世界同步。

'ntpd -q' 同步快速,但退出(ntpdate 行为)。它需要跟随一个ntpd没有退出选项的命令才能进行连续同步。

EDIT2:我检查了我的服务器,发现其中一台服务器关闭了一秒钟。在解决这个问题时,我玩了设置。iburst非常快速地获得信任的服务器。 true如果没有多个其他受信任的来源,则确保时钟驱动程序受信任。时钟花了一分钟多一点的时间才被本地信任并可以远程信任。

测试时,您应该能够在ntpd同步后重新启动该过程并测试设置的工作速度。在上述情况下,服务器 B 可能需要重新启动以测试它的同步速度。在监视ntpd更改时,我使用如下一行:

while ntpq -c peers localhost; do sleep 10; done
Run Code Online (Sandbox Code Playgroud)

主机名和睡眠时间根据需要进行调整。在某些情况下,我会ntpq在循环中链接两个或多个命令行。这样做时,我使用 echo 和/或 date 命令来提供数据集更改位置的指示。