本页内容
- 准备工作
- 设置系统时区
- 安装 Chrony
- 配置 Firewalld
- 将 Chrony 配置为 NTP 服务器
- 将 Chrony 配置为 NTP 客户端
- Chronyc 命令的基本用法
- 结论
NTP(Network Time Protocol,网络时间协议)是一种用于计算机网络上时间和时钟同步的网络协议。
Chrony 实现了 NTP(Network Time Protocol,网络时间协议),是 up 等其他应用的替代品。Chrony 可在类 Unix 操作系统上运行,以 GNU GPL v2 协议发布。Chrony 被一些 Linux 发行版用作默认的 NTP 服务器软件,也可用于多种 Linux 发行版。
在本指南中,我将向你展示如何在 AlmaLinux 9 服务器上安装 Chrony。我们会将 Chrony 安装为 NTP 服务器和 NTP 客户端。此外,你还将学习如何使用 chronyc 命令行来管理和监控 Chrony。
准备工作
在开始之前,请确保你具备以下条件:
- 一台 AlmaLinux 9 服务器 —— 本演示使用主机名为 alma9、IP 地址为 192.168.10.15 的服务器。
- Linux 客户端机器同样使用一台 AlmaLinux 机器,主机名为 node1,IP 地址为 192.168.10.20。
- 一个具有 root 管理员权限的非 root 用户。
设置系统时区
要在 Linux 上设置时区,你可以使用 timedatectl 工具。接下来将介绍如何在安装 Chrony NTP 服务器之前设置并验证系统时区。
首先,使用以下命令查看可用时区列表,并决定要使用的时区。
sudo timedatectl list-timezones
现在运行以下命令更改服务器上的默认时区。以下命令会将默认时区配置为 Europe/Amsterdam。
sudo timedatectl set-timezone Europe/Amsterdam
接下来,使用以下命令验证当前时区。
sudo timedatectl
在 Time zone(时区)部分,你可以看到当前的时区。

或者,你也可以通过查看 /etc/localtime 文件来检查默认系统时区。请确保该文件是正确时区的符号链接。
ls -lah /etc/localtime
安装 Chrony
Chrony 是 NTP 协议的一种实现,可用作 NTP 服务器和 NTP 客户端。接下来将介绍如何通过 systemctl 工具安装 Chrony 并管理 Chrony 服务。
首先,运行以下 dnf 命令以在 AlmaLinux 仓库中查找 chrony 软件包。你应该会看到默认的 baseos 仓库提供了 chrony,并已准备好安装。
sudo dnf search chrony

通过以下 dnf 命令安装 chrony。出现提示时,输入 y 确认并按 ENTER。
sudo dnf install chrony

安装完 Chrony 后,执行以下命令以启动并启用 chronyd 服务。chronyd 是 Chrony 的 systemd 服务,通过这些命令,chronyd 将会运行并在系统启动时自动启动。
sudo systemctl start chronyd
sudo systemctl enable chronyd
使用以下命令验证 chronyd 服务,以确保该服务正在运行。
sudo systemctl status chronyd
以下输出确认了 chronyd 正在运行,因为显示的输出信息为 active (running)。

配置 Firewalld
安装完 Chrony 后,你必须在 NTP 服务器上开放 NTP 端口。现在,你将通过 firewall-cmd 命令行将 NTP 服务添加到 firewalld。
如果你运行的是公共 NTP 服务器,请执行以下 firewall-cmd 命令以允许任何人访问你的 NTP 服务器安装。
sudo firewall-cmd --add-service=ntp --permanent
sudo firewall-cmd --reload
但是,如果你为本地网络运行 NTP 服务器,请执行以下 firewall-cmd 命令,通过 firewalld rich-rule 指定网络子网。
sudo firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.5.0/24' service='ntp' accept"
sudo firewall-cmd --reload
如果全部完成,使用以下命令验证 firewalld 规则列表。
sudo firewall-cmd --list-all
你应该看到 ntp 服务已添加到 firewalld 服务列表中。

将 Chrony 配置为 NTP 服务器
NTP 服务器是你的客户端可以同步系统时间的目标。要将 Chrony 设置为 NTP 服务器,你需要更改两项主要配置:
- 将 NTP pool 添加为来源:访问 https://www.ntppool.org/en/ 以获取可用作来源的 NTP 服务器。
- 允许内部网络:添加允许访问和使用你的 NTP 服务器的内部网络子网。这样你就可以为你的环境创建一个私有/本地的 NTP 服务器。
使用以下 nano 编辑器命令打开 chrony 默认配置文件 /etc/chrony.conf。
sudo nano /etc/chrony.conf
访问 https://www.ntppool.org/en/ 并选择可用作来源的公开 NTP 服务器。这主要取决于你的服务器所在位置,请选择就近的 NTP 服务器作为来源。
然后像下面这样添加到 server 参数:
# list servers server 0.nl.pool.ntp.org iburst server 1.nl.pool.ntp.org iburst server 2.nl.pool.ntp.org iburst server 3.nl.pool.ntp.org iburst
添加 allow 参数并指定你的网络子网。allow 参数内的任何网络子网都将被允许访问你的 NTP 服务器安装。
# allowed clients allow 192.168.10.0/24
此外,你可能还需要调整以下选项:
# Allow the system clock to be stepped in the first three updates # if its offset is larger than 1 second. makestep 1.0 3 # Enable hardware timestamping on all interfaces that support it. #hwtimestamp * # Specify the file containing keys for NTP authentication. keyfile /etc/chrony.keys # Get TAI-UTC offset and leap seconds from the system tz database. leapsectz right/UTC
完成后,保存并关闭编辑器。
现在运行以下 systemctl 命令以重启 chronyd 服务并应用更改。
sudo systemctl restart chronyd
chronyd 重启后,执行以下 chronyc 命令以验证当前的 NTP 服务器来源。chronyc 是 Chrony 提供的命令行工具,用于管理 NTP 服务器和客户端。
chronyc sources
如果一切顺利,你应该会看到最近的 NTP 服务器来源列表。

此外,你还可以通过添加 -v 选项(即 verbose 详细输出)来获取报告的详细版本。
chronyc sources -v

将 Chrony 配置为 NTP 客户端
在前面,你已经学习了如何使用 Chrony 创建 NTP 服务器。接下来你将学习如何将 Chrony 设置为 NTP 客户端。在下面的示例中,Chrony 软件包安装在主机名为 node1、IP 地址为 192.168.10.20 的客户端机器上。
要将 Chrony 设置为 NTP 客户端,你必须将你的 NTP 服务器添加到 Chrony 配置文件 /etc/chrony.conf 中的 server 参数。
首先,执行以下命令以确保 chronyd 服务在你的客户端机器上正在运行。
sudo systemctl status chronyd
如果正在运行,应显示以下输出:

现在使用 nano 编辑器打开 chrony 配置文件 /etc/chrony.conf。
sudo nano /etc/chrony.conf
将你的 NTP 服务器添加到 server 参数。你可以使用 NTP 服务器的 IP 地址或 fqdn。
额外的 iburst 参数允许 Chronyd 服务在启动后不久进行第一次时钟更新,而 prefer 参数将在其他没有 prefer 选项的服务器中优先选择该 NTP 服务器来源。
server 192.168.10.15 iburst prefer
现在运行以下 systemctl 命令以重启 chronyd 服务并应用更改。然后验证 chronyd,确保该服务正在运行。
sudo systemctl restart chronyd
sudo systemctl status chronyd

最后,输入以下命令以验证你客户端机器上的 NTP 服务器来源。
chronyc sources
chronyc sources -v
如果成功,你应该会看到你的 NTP 服务器被用作客户端机器上的 NTP 服务器来源。

Chronyc 命令的基本用法
Chronyc 是用于管理 Chrony 的命令行接口,无论是作为 NTP 服务器还是 NTP 客户端。在最后一个部分,你将学习一些用于管理 NTP 安装的基本 chronyc 命令。
tracking 参数将显示系统时钟的性能。
chronyc tracking
在 Reference ID(参考 ID)部分,你应该会看到当前已同步的 NTP 服务器来源。

使用 ntpdata 参数,你可以测量和检查 NTP 来源。
chronyc ntpdata
在 Remote address(远程地址)部分,你可以看到 NTP 服务器来源的 IP 地址。在 Remote port(远程端口)部分,你应该会看到当前使用的默认 NTP 服务器端口。最后,在 Local address(本地地址)部分,你应该会看到客户端机器的 IP 地址作为对应的参考 ID。

接下来,使用 activity 参数显示对等端上 NTP 服务器的数量。
chronyc activity
如果 NTP 服务器可达,你会看到 online 输出;如果服务器对等端离线,则会显示 offline 状态。

最后,你还可以通过 chronyc 命令行在 Chrony 上允许/拒绝网络子网。
使用 allow 参数允许子网访问和使用 Chrony NTP 服务器。
chronyc allow IP/subnet
要拒绝子网访问你的 Chrony NTP 服务器,请像下面这样使用 deny 参数:
chronyc deny IP/subnet
结论
做得好!你现在已在 AlmaLinux 9 服务器上成功安装了 Chrony。你还学习了如何使用 Chrony 设置 NTP 服务器,以及如何使用 Chrony 设置 NTP 客户端。此外,你还通过 timedatectl 配置了系统时区,并学习了一些用于管理 Chrony 安装的基本 chronyc 命令行。