如何在没有互联网访问的情况下在 ubuntu 上设置本地 ntp 服务器?

如何在没有互联网访问的情况下在 ubuntu 上设置本地 ntp 服务器?

我尝试了几个关于如何在 ubuntu 上设置本地 ntp 服务器的指南,但似乎都没有正常工作。由于某种原因,我的服务器在时间上严重漂移,我必须让它们的时间保持接近,因为我运行需要这样做的数据库。

  • 我有 8 台 ubuntu 14.04 LTS 服务器,都没有互联网访问
  • 我想在一台(或更多,如果更好)服务器上运行 ntp 服务器,并让所有其他服务器连接到 ntp 服务器来设置时间

目前,我的服务器(ip .24)运行此 /etc/ntp.conf:

server 127.127.1.0 prefer
fudge  127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
broadcastdelay 0.008

# Give localhost full access rights
restrict 127.0.0.1

# Give machines on our network access to query us
restrict 192.168.178.0 mask 255.255.255.0 nomodify notrap

broadcast 192.168.178.0

关于“客户”:

# Point to our network's master time server
server 192.168.178.24 iburst
fudge 192.168.178.24  stratum 10

restrict default ignore
restrict ::1
restrict 127.0.0.1
restrict 192.168.178.24 mask 255.255.255.255 nomodify notrap noquery

driftfile /var/lib/ntp/drift

minpoll 4
maxpoll 5

注意:我已使用 Multi-Tabbed Putty 同时向所有 ntp 客户端发送以下命令。 我已停止除服务器之外的所有 ntp 服务,用于sudo ntpdate 192.168.178.24让它们获取日期,然后重新启动 ntp 服务。此操作成功。命令完成后,所有服务器都显示相同的日期。但大约 10 分钟后,我的服务器显示以下时间:

Fr 30. Sep 11:16:53 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016 (server .24) 
Fr 30. Sep 11:16:50 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016
Fr 30. Sep 11:17:05 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016
Fr 30. Sep 11:15:33 CEST 2016

如何让它们正确同步到 ntp 服务器?我如何才能缩短轮询时间?看来我的服务器很快就不同步了,所以我需要它们再次检索“正确”的时间……

我所说的“正确”时间是指所有服务器的时间都相同。它不一定是精确的世界时间(如果你这么称呼的话)。


编辑:我尝试了建议的配置设置。据我所知,我的服务器/客户端配置应该是这样的。与此同时,我发现我的 .24 服务器实际上正在向更糟糕的时间漂移​​。.20 服务器是最准确的,我现在使用 .20 服务器来托管 ntp 服务器。对困惑感到抱歉。

服务器配置:

# Use the local clock
server 127.127.1.0 prefer
fudge  127.127.1.0
driftfile /var/lib/ntp/drift
broadcastdelay 0.008

# Give localhost full access rights
restrict default

# Give machines on our network access to query us
restrict 192.168.178.0 mask 255.255.255.0 nomodify notrap

broadcast 192.168.178.0

对于客户:

# Point to our network's master time server
server 192.168.178.20 iburst

restrict default

driftfile /var/lib/ntp/drift

minpoll 4
maxpoll 5

服务器上的 ntpq -as 和 ntpq -pe:

ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
  1 41906  963a   yes   yes  none  sys.peer    sys_peer  3
  2 41907  8811   yes  none  none    reject    mobilize  1

ntpq -c pe
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*LOCAL(0)        .LOCL.           5 l   60   64  377    0.000    0.000   0.000
 192.168.178.0   .BCST.          16 u    -   64    0    0.000    0.000   0.000

类似这样的输出有五次(这些服务器会随着时间而漂移):

ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
  1 62104  9024   yes   yes  none    reject   reachable  2


ntpq -c pe
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 hadoop20.xx LOCAL(0)         6 u   27   64  377    0.151  63591.8 33407.0

对于两个(最有可能?)工作客户:

ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
  1  7757  963a   yes   yes  none  sys.peer    sys_peer  3

ntpq -c pe
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*hadoop20.xx LOCAL(0)         6 u   18   64  377    0.183    7.883   3.015

编辑2:

我在所有客户端上使用了sudo service ntp stopsudo ntpdate 192.168.178.20,等待 ntpdate 完成sudo service ntp start。仍然只有 2 个成功客户端和 5 个拒绝客户端。

拒绝的客户端显示此输出。delay+offset值看起来很高,因为失败的客户端会随时间漂移。也许他们不相信服务器会更新时间,因为延迟/偏移量太高了?

ntpq -c as
ind assid status  conf reach auth condition  last_event cnt
===========================================================
  1 20981  905a   yes   yes  none    reject    sys_peer  5

ntpq -c pe
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 hadoop20.xx LOCAL(0)         6 u   34   64    3    0.166  18665.9 16201.3

我也尝试过使用这个https://askubuntu.com/a/256004答案是,它工作了大约 30 秒,然后状态再次变为“拒绝”! 也一样ntpdate -s 192.168.178.20。这很可能与 ntp 客户端拒绝服务器的时间有关。有没有办法强制他们更改时间?

答案1

不要这样做。说真的。千万不要。人们一直认为 NTP 的设计目的是让一堆机器都拥有相同的时间。事实并非如此。它的设计非常巧妙,可以让许多机器都拥有最接近正确的时间,这不是一回事。

如果你有权访问窗口,你可以构建一个还算不错的 stratum-1 服务器大约 50 英镑,或者 100 英镑一个好的。你最好先构建一个类似的东西,然后让其他客户使用它。正确的时间戳比仅仅自洽的时间戳要好得多,尤其是对于取证而言。

但如果你绝对必须做你正在做的事情,那么你需要意识到你正在扭曲 ntpd,这意味着理解你在做什么。

在服务器上

server 127.127.1.0 prefer
fudge  127.127.1.0 stratum 10

方法 ”使用本地无纪律时钟,就好像它是权威的“,这就是你想要的。不过,我不确定你为什么要强制它到 10 层;考虑放弃stratum 10,让驱动程序提供其默认的 0 层。在客户端

server 192.168.178.24 iburst
fudge 192.168.178.24  stratum 10

完全没有意义。 fudge 127.127.x.y是为强制使用各种本地时钟驱动程序而保留的。 给它任何其他地址都没有意义。fudge从客户端删除线路,然后将它们指向服务器。 您还使用封闭网络,因此请放弃所有安全措施,直到您使其正常工作:

restrict default

如果这仍然不起作用,我们需要在至少十分钟不间断运行后,查看服务器和行为不佳的客户端上ntpq -c as的输出。ntpq -c pe

编辑:你在下面的评论中写道“我认为偏移/抖动确实很高,因为失败的客户端会随时间漂移“。

我想你可能是对的。 这位小伙子的博客表明他也有同样的经历:客户端时钟太差,以至于让本地服务器误ntpd以为服务器不可靠。他写道

巨大抖动的原因终于清楚了!我们的时钟漂移得如此之快,以至于通过几次测量,偏移量就会增加几秒钟

鉴于您的客户端中时间最快偏离的客户端无法同步(将服务器标记为“拒绝”),我认为您看到了相同的效果。他的解决方案是手动adjtimex调整内核时钟(调整值tick),直到系统时钟不再那么不稳定,此时 ntpd 才有机会识别服务器是否正常,并与其同步。您可能应该先在最差的客户端上尝试一下,看看是否有帮助。

答案2

我可以按照下面列出的步骤获得可接受的时间差异:

脚步

  1. 在两台设备上安装 chrony

    sudo apt install chrony
    
  2. 假设服务器 IP 地址为 192.168.1.87客户端配置(/etc/chrony/chrony.conf)如下:

    server 192.168.1.87 iburst

    keyfile /etc/chrony/chrony.keys

    driftfile /var/lib/chrony/chrony.drift

    log tracking measurements statistics

    logdir /var/log/chrony

  3. 服务器配置(/etc/chrony/chrony.conf),假设您的客户端 IP 是 192.168.1.14

    keyfile /etc/chrony/chrony.keys

    driftfile /var/lib/chrony/chrony.drift

    log tracking measurements statistics

    logdir /var/log/chrony

    local stratum 8

    manual

    allow 192.0.0.0/24 allow 192.168.1.14

  4. 在两台计算机上重启 chrony

    sudo systemctl stop chrony

    sudo systemctl start chrony

5.1 检查客户端

sudo systemctl status chrony

 `**output**:

            июн 24 13:26:42 op-desktop systemd[1]: Starting chrony, an NTP client/server...

            июн 24 13:26:42 op-desktop chronyd[9420]: chronyd version 3.2 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SECHASH +SIGND +ASYNCDNS +IPV6 -DEBUG)

            июн 24 13:26:42 op-desktop chronyd[9420]: Frequency -6.446 +/- 1.678 ppm read from /var/lib/chrony/chrony.drift

            июн 24 13:26:43 op-desktop systemd[1]: Started chrony, an NTP client/server.

            июн 24 13:26:49 op-desktop chronyd[9420]: Selected source 192.168.1.87`

5.1chronyc tracking 输出

        Reference ID    : C0A80157 (192.168.1.87)
        Stratum         : 9
        Ref time (UTC)  : Thu Jun 24 10:50:34 2021
        System time     : 0.000002018 seconds slow of NTP time
        Last offset     : -0.000000115 seconds
        RMS offset      : 0.017948076 seconds
        Frequency       : 5.491 ppm slow
        Residual freq   : +0.000 ppm
        Skew            : 0.726 ppm
        Root delay      : 0.002031475 seconds
        Root dispersion : 0.000664742 seconds
        Update interval : 65.2 seconds
        Leap status     : Normal

答案3

您可以完全放弃 NTP,在“服务器”上手动设置时间并发出此命令:

ssh [email protected] "date -s \"$(date "+%F %T")\""

将其循环遍历所有“客户端”IP,就完成了!

解释:本地时间将通过 SSH“复制”到远程机器。

相关内容