第 18 章 使用 chrony 套件配置 NTP
因为许多原因,保持准确的时间非常重要。例如在网络中,需要准确的数据包和日志的时间戳。在 Linux 系统中,NTP
协议是由在用户空间运行的守护进程实现的。
用户空间守护进程更新内核中运行的系统时钟。系统时钟可以通过使用不同的时钟源来维护系统的时间。通常, 使用 时间戳计数器(TSC)。TSC 是一个 CPU 寄存器,它计算从上次重置的循环数。它非常快,分辨率很高,且不会被中断。
在守护进程 ntpd
和 chronyd
之间有一个选择,分别来自 ntp 和 chrony 软件包中的软件仓库。
本章论述了 chrony 套件的使用。
18.1. chrony 套件简介
Chrony 是网络时间协议(NTP)的一种实现。您可以使用 Chrony:
-
要将系统时钟与
NTP
服务器同步, - 将系统时钟与参考时钟同步,如ASCII 接收器.
- 要将系统时钟与手动时间输入同步,
-
作为
NTPv4(RFC 5905)
服务器或对等服务器,为网络中的其他计算机提供时间服务。
Chrony 在各种条件下表现良好,包括网络间连接、高度拥塞的网络、温度变化(普通计算机时钟对温度敏感)以及不持续运行或在虚拟机上运行的系统。
通过互联网镜像同步的两天机器之间的准确性通常在几毫秒之内,而对于 LAN 中的机器则为几十微秒。硬件时间戳或硬件参考时钟可以提高同步到子微秒级别的两台计算机之间的准确性。
Chrony 包括 chronyd
、一个在用户空间运行的守护进程和 chronyc (可用来监控 chronyd
性能并在运行时更改各种操作参数的命令行程序)。
18.1.1. ntpd 和 chronyd 之间的区别
chronyd
可以优于 ntpd
:
-
chronyd
可以正常工作,其中对时间参考的访问是间歇性的,而ntpd
需要定期轮询时间引用才能正常工作。 -
即使网络在较长时间内拥塞,chronyd
也能
表现良好。 -
chronyd
通常可以更快准确地同步时钟。 -
chronyd
能够快速适应时钟速率的突然变化,例如,由于碳粉电器温度的变化,ntpd
可能需要很长时间才能再次下降。 -
在默认配置中,
chrony
d 从不调整时钟在系统启动时同步的时间,以便不设置其他正在运行的程序。ntpd
也可以配置为从不调整时间,但是它必须使用不同的调整时钟的方法,这种方法存在一些缺点,包括对时钟准确性的负面影响。 -
chronyd
可以调整较大范围内 Linux 系统上的时钟速率,即使在时钟中断或不稳定的机器上运行。例如,在某些虚拟机上: -
chronyd
比较小,使用较少的内存,仅在需要时才会唤醒 CPU,这更有利于节能。
chronyd
可以执行 ntpd
不能执行的操作:
-
chronyd
支持隔离的网络,其中唯一的调整时间方法是手动输入。例如,管理员看一下时钟。chronyd
可以检查在不同更新中更正的错误,以估算计算机获得或丢失时间的速率,并随后使用此估算来调整计算机时钟。 -
chronyd
支持降低实时时钟的增益或丢失率,例如维护关闭计算机时间的时钟。当系统引导时,它可以使用实时时钟调整时间值来设置系统时间。这些实时时钟设施目前仅在 Linux 系统上可用。 -
chronyd
支持 Linux 上的硬件时间戳,允许在本地网络上进行非常准确的同步。
ntpd
可以执行 chronyd
不能执行的操作:
-
ntpd
支持NTP
版本 4(RFC 5905)的所有工作模式,包括广播、多播和多播客户端和服务器。请注意,广播和多播模式本质上也不如普通服务器和客户端模式准确且安全性较低,因此通常应避免使用。 -
ntpd
支持自动密钥协议(RFC 5906),用于通过公钥加密对服务器进行身份验证。请注意,该协议已被证明不安全,并可能替换为网络时间安全(NTS)规范的实施。 -
ntpd
包含许多参考时钟的驱动程序,而chronyd
依赖于其他程序(如 gpsd )使用共享内存(SHM)或 Unix 域套接字(SOCK)从参考时钟访问数据。
18.1.2. 在 NTP 守护进程之间选择
除由不支持 chrony 的工具管理或监控的系统外,chrony 应该 首选所有系统,或者具有硬件参考时钟且无法与 chrony 一起使用的系统。
执行使用 Autokey
协议验证数据包的系统只能与 ntpd
一起使用,因为 chronyd
不支持这个协议。Autokey
协议存在严重的安全问题,因此应避免使用此协议。使用对称密钥的身份验证(由 chronyd
和 ntpd
支持),而不是 Autokey
。Chrony 支持 SHA256 和 SHA512 等更强大的哈希功能,而 ntpd
只能使用 MD5 和 SHA1。