在 /etc/systemd/timesyncd.conf 中设置多个 NTP 服务器

Dea*_*rip 5 ntp systemd-timesyncd

timesyncd.conf(5)手册页指出 NTP 的设置是以空格分隔的 NTP 服务器主机名或 IP 地址列表。

我们的网络中有两个内部 NTP 服务器,都在同一子网 (10.10.10 0/24) 上。在 Ubuntu 18.04 服务器上,如果我将 NTP 设置为 NTP="10.10.10.100 10.10.10.101",timesyncd 将不会与这些时间服务器同步。如果我只是将 NTP 设置为其中之一(NTP=10.10.10.100 或 NFS=10.10.10.101),时间会按预期同步。

有没有其他人看到同样的行为?或者这是一个应该(或已经)提交的错误?

附录:我尝试使用多个“NTP=”行而不是一行。代替:

NTP="10.10.10.100 10.10.10.101"
Run Code Online (Sandbox Code Playgroud)

我把它改成:

NTP=10.10.10.100
NTP=10.10.10.101
Run Code Online (Sandbox Code Playgroud)

重新启动 systemd-timesyncd 后,状态现在显示正在同步到第一个时间服务器的时间。

$ systemctl status systemd-timesyncd.service

? systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           ??disable-with-time-daemon.conf
   Active: active (running) since Fri 2018-06-22 14:41:36 MDT; 3s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 2774 (systemd-timesyn)
   Status: "Synchronized to time server 10.10.10.100:123 (10.10.10.100)."
    Tasks: 2 (limit: 2322)
   CGroup: /system.slice/systemd-timesyncd.service
           ??2774 /lib/systemd/systemd-timesyncd

Jun 22 14:41:36 bpsubuntu18.sling.com systemd[1]: Starting Network Time Synchronization...
Jun 22 14:41:36 bpsubuntu18.sling.com systemd[1]: Started Network Time Synchronization.
Jun 22 14:41:36 bpsubuntu18.sling.com systemd-timesyncd[2774]: Synchronized to time server 10.10.10.100:123 (10.10.10.100).
Run Code Online (Sandbox Code Playgroud)

作为附加测试,我在两个好的之前添加了一个虚假的时间服务器行:

NTP=10.10.10.99
NTP=10.10.10.100
NTP=10.10.10.101
Run Code Online (Sandbox Code Playgroud)

再次重新启动服务,并使用 tcpdump 观察端口 123 流量后,我看到在无法从伪造的 NTP 服务器获取时间后,timesyncd 使用了下一个。

那么手册页不正确吗?或者解析空格分隔的列表不是一个错误?

我还想为我第一次发布时键入 NFS 而不是 NTP 道歉。被我正在做的另一项任务分散了注意力......

Chr*_*rdt 8

这是 timesyncd 的设计。TL;DR 一次只能使用一个。

详细信息:如果您仔细查看timesyncd 手册页,您会在有关多个 NTP 服务器的部分中看到这一点:

...直到找到一个响应...

如果您深入挖掘,您会发现诸如timesyncd: 一次仅与一个 NTP 服务器对话的问题systemd-timesyncd 手册应说明它使用 SNTP 而不是 NTP

因此,它将从有效的 NTP= 列表中取出第一个,如果所有都失败,请尝试使用 FallbackNTP= 中的列表。

如果您想要真正的跨服务器检查以获得更好的同步,您应该查看 NTPd (<18.04) / Chrony (>=18.04) 引用 systemd 问题:

是的,systemd-timesyncd 实现了 SNTP,而不是 NTP,因此多服务器支持不是重点。如果您想要完整的 NTP 实现,请使用 ntpd 或 chrony。