使用 NTP 保持 Ubuntu 时钟与另一台机器同步

使用 NTP 保持 Ubuntu 时钟与另一台机器同步

目标

将机器 A(Ubuntu 18.04)的时钟与机器 B(在本地网络上运行 NTP 服务器的 Ubuntu 16.04 - 时间比实际时间早约 10 分钟)的时钟同步。

我的研究

我是 NTP 新手,对可用的软件包和命令有些困惑:ntpd、ntpq、timesyncd、timedatectl 等。显然其中一些会交互,而另一些会冲突。如能帮助我解决这些问题,我将不胜感激。

我尝试过

在机器 A 上:

$ sudo apt-get install ntp

ntp.conf:

server 192.168.12.20 # NTP server (machine B)
server 127.127.1.0
fudge 127.127.1.0 stratum 10

driftfile /var/lib/ntp/ntp.drift

leapfile /usr/share/zoneinfo/leap-seconds.list

然后运行:

$ sudo service ntp stop
$ sudo ntpd -gq
11 Mar 14:35:50 ntpd[11344]: ntpd [email protected] (1): Starting
11 Mar 14:35:50 ntpd[11344]: Command line: ntpd -gq
11 Mar 14:35:50 ntpd[11344]: proto: precision = 0.128 usec (-23)
11 Mar 14:35:50 ntpd[11344]: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): good hash signature
11 Mar 14:35:50 ntpd[11344]: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): loaded, expire=2019-12-28T00:00:00Z last=2017-01-01T00:00:00Z ofs=37
11 Mar 14:35:50 ntpd[11344]: leapsecond file ('/usr/share/zoneinfo/leap-seconds.list'): expired less than 75 days ago
11 Mar 14:35:50 ntpd[11344]: Listen and drop on 0 v6wildcard [::]:123
11 Mar 14:35:50 ntpd[11344]: Listen and drop on 1 v4wildcard 0.0.0.0:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 2 lo 127.0.0.1:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 3 eth0 192.168.12.193:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 4 wlan0 10.1.11.171:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 5 lo [::1]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 6 eth0 [fd06:b21a:9c69::242]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 7 eth0 [fd06:b21a:9c69:0:3411:70bb:5786:e9f9]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 8 eth0 [fd06:b21a:9c69:0:f474:e414:7210:dc9e]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 9 eth0 [fe80::37ed:4c5:7941:3e6%3]:123
11 Mar 14:35:50 ntpd[11344]: Listen normally on 10 wlan0 [fe80::2e44:748b:5ae0:f2dd%7]:123
11 Mar 14:35:50 ntpd[11344]: Listening on routing socket on fd #27 for interface updates
11 Mar 14:46:14 ntpd[11344]: ntpd: time set +617.018832 s
ntpd: time set +617.018832s

此时日期正确设置为机器A的日期:

$ date
Wed Mar 11 14:46:33 CET 2020

但是,重新启动服务后...

$ sudo service ntp start

几秒钟后,时钟恢复原样:

$ date
Wed Mar 11 14:36:41 CET 2020

同行(显示意外的188.IP):

$ ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*_gateway        188.67.52.171    4 u  131  128  377   10.171  -11.526  16.139

答案1

该偏移意味着您与远程时间相差不到 12 毫秒。您的 NTP 服务器未提供您想要的时间,或者您正在同步到您不希望同步的内容。

Refid 是对方用作参考的代码。IP 地址表示 NTP 服务器。您不拥有的 IP 可能是公共 NTP 服务,来自 NTP 池或其他。检查主机 192.168.12.20和所有 NTP 服务器上的 NTP 配置。

如果您打算保持与“真实世界”时间的 10 分钟偏差,您无法做到这一点,也无法与互联网时间同步。相反,可以使用自定义时区或 libfaketime 之类的垫片来伪造应用程序获取的时间。


127.127.1.0在现代 ntpd 中毫无用处。绝对不适用于不提供时间服务的客户端配置。删除这两行。

在 ntpd 确定漂移后,即使没有服务器,它也会继续校准时钟。添加未校准的本地时钟表明本地时钟适合提供时间,1) 您不是从客户端主机提供时间 2) 如果与您想要的时间相差 10 分钟则不准确。认为此功能更适合插入参考时钟的 NTP 设备。而不是商品服务器。

来自 NTP 支持 wiki 的引文不守纪律的本地时钟

一般情况下不应再使用无纪律的本地时钟。ntp-4.2.2 及更高版本的用户应考虑孤儿模式作为保持一组孤立的服务器同步的手段。无纪律的本地时钟不是叶节点(即仅客户端) ntpd 实例的备份。


仅一个 NTP 服务器无法纠正 falseticker 错误。理想情况下,部署至少 4 个 NTP 服务器,并在所有客户端上使用它们。


时间同步守护进程确实会相互冲突。两个东西争相设置不同的时钟是不好的。只安装和使用 chrony、ntpd、systemd-timesyncd 中的一个。一些 systemd 单元(至少是 Red Hat 的)会阻止同时运行这两个单元,但不要依赖这一点。

答案2

我最终使用了ntpdatechrony

sudo apt-get install -y ntpdate chrony

首先我使用以下命令运行立即更新ntpdate

sudo ntpdate 192.168.12.20

然后我在/etc/chrony/chrony.conf

#pool ntp.ubuntu.com        iburst maxsources 4
#pool 0.ubuntu.pool.ntp.org iburst maxsources 1
#pool 1.ubuntu.pool.ntp.org iburst maxsources 1
#pool 2.ubuntu.pool.ntp.org iburst maxsources 2

server 192.168.12.20 minpoll 0 maxpoll 5 maxdelay .05

并启动chrony守护进程:

/etc/init.d/chrony start

它似乎运行良好,运行时偏移小于 1 毫秒。

相关内容