为什么选择 Chrony?
- 快速同步:对于不稳定的网络环境(如虚拟机、网络延迟高的环境),Chrony 能比 NTPd 更快地同步时间。
- 低资源占用:对系统资源(CPU、内存)的占用非常小。
- 高精度:即使在系统时间漂移较大时,也能保持高精度同步。
- 支持虚拟化:在虚拟机中表现优异,能更好地处理时间跳跃问题。
场景说明
我们将配置一个内部 NTP 服务器,该服务器从外部权威时间源同步时间,然后为局域网内的其他设备(如服务器、PC)提供时间同步服务。

拓扑结构:
局域网内的客户端 <---> CentOS NTP服务器 (chrony) <---> 外部权威时间源 (如 pool.ntp.org)
第一步:安装 Chrony 软件包
在大多数 CentOS 系统中,chrony 已经是默认安装的,如果没有,可以使用 yum 或 dnf 进行安装。
# 对于 CentOS 7 和 8/9 sudo yum install chrony -y # 或者对于 CentOS 8/9 sudo dnf install chrony -y
安装完成后,chrony 服务通常是自动启动并设置为开机自启的。
# 检查 chrony 服务状态 sudo systemctl status chronyd # 如果未启动,则启动并设置为开机自启 sudo systemctl start chronyd sudo systemctl enable chronyd
第二步:配置 Chrony 服务器
chrony 的主配置文件是 /etc/chrony.conf,我们需要编辑这个文件来定义我们的时间源和客户端访问规则。

sudo vi /etc/chrony.conf
配置上游时间源(同步外部时间)
找到文件中类似 pool 或 server 的行,这些行定义了你的服务器从哪里获取时间,默认配置通常已经包含了 pool.ntp.org,你可以保留或根据需要修改。
推荐配置:
为了提高稳定性和准确性,建议使用多个不同的时间源,你可以注释掉默认的 pool.ntp.org,并添加以下内容:
# 使用中国的 NTP 服务器池,延迟较低 pool cn.pool.ntp.org iburst # 使用官方的 NTP 服务器池 pool 0.centos.pool.ntp.org iburst pool 1.centos.pool.ntp.org iburst pool 2.centos.pool.ntp.org iburst pool 3.centos.pool.ntp.org iburst # iburst 选项在初始同步时发送一连串请求,可以快速同步时间
配置局域网客户端访问(允许其他设备同步)
这是将服务器作为内部 NTP 服务器最关键的一步,你需要添加 allow 和 local stratum 指令。
allow [IP地址/网段]:允许哪个或哪些网段的客户端连接。local stratum 10:当服务器成功同步到上游源后,它会将自己伪装成一个 Stratum 10 的服务器,这个数字必须高于上游源(如果你的上游源是 Stratum 1 或 2,10 是安全的),以确保客户端不会尝试越过你的服务器去连接上游源。
示例配置:

假设你的局域网网段是 168.1.0/24,在配置文件末尾添加或修改以下内容:
# 允许 192.168.1.0/24 网段的所有客户端访问 allow 192.168.1.0/24 # 当同步到上游源后,允许本地服务器作为时间源 # stratum 10 是一个较高的值,确保客户端优先使用此服务器 local stratum 10
其他常见 allow 规则:
allow 192.168.1.50:只允许单个 IP 地址。allow 10.0.0.0/8:允许整个0.0.0网段。allow all:(不推荐用于生产环境) 允许任何客户端访问,可能会带来安全风险。
保存并关闭配置文件
在 vi 中,按 Esc,然后输入 wq 保存退出。
第三步:重启 Chrony 服务并检查配置
修改配置后,需要重启 chronyd 服务使其生效。
sudo systemctl restart chronyd
检查服务状态
sudo systemctl status chronyd
你应该看到 Active: active (running) 的字样。
查看同步状态
这是验证配置是否成功的关键步骤,使用 chronyc 命令行工具进行查看。
# 查看当前时间同步源信息 chronyc sources # 查看同步源的详细统计信息 chronyc sourcestats # 查看系统时间和同步状态 chronyc tracking
chronyc sources 的输出示例:
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* pool.ntp.org 2 6 37 17 -1723us[-1730us] +/- 15ms
+ 202.112.29.82 2 6 37 17 +346us[ +346us] +/- 22ms
+ 120.25.115.20 2 6 37 17 +756us[ +756us] +/- 18ms
- 120.197.27.25 2 6 37 17 -2876us[-2883us] +/- 21ms
^*:表示当前正在使用的主同步源。Stratum:显示源的时间层级,你的服务器在同步到这些源后,自己的Stratum会是3(源Stratum + 1)。
chronyc tracking 的输出示例:
Reference ID : C0A80101 (192.168.1.1) <-- 如果你的服务器已经同步到另一个NTP服务器,这里会显示其IP
Stratum : 3 <-- 你的服务器的层级
Ref time (UTC) : Tue Oct 26 08:30:00 2025
System time : 0.000000000 seconds slow of NTP time
Last offset : +0.000000000 seconds
RMS offset : 0.000000000 seconds
Frequency : 0.000 ppm fast
Residual freq : +0.000 ppm
Skew : +0.001 ppm
Root delay : 0.000000000 seconds
Root dispersion : 0.000000000 seconds
Update interval : 16.8 seconds
Leap status : Not in sync
Stratum为3表示你的服务器已经成功同步。Leap status为Not in sync是正常的,表示它正在等待更稳定的状态,如果长时间保持此状态,请检查网络连接和上游源。
第四步:配置防火墙(非常重要)
如果你的服务器启用了防火墙(firewalld),必须开放 NTP 服务的端口(udp/123),否则客户端无法连接。
# 添加 permanent 规则,使其在防火墙重启后依然有效 sudo firewall-cmd --permanent --add-service=ntp # 重新加载防火墙,使规则立即生效 sudo firewall-cmd --reload # 验证规则是否已添加 sudo firewall-cmd --list-all | grep ntp
第五步:客户端配置(可选)
你的 CentOS NTP 服务器已经配置完成,局域网内的其他设备(Windows, Linux, macOS, 路由器等)只需将其 NTP 服务器地址设置为你这台 CentOS 服务器的 IP 地址即可。
在另一台 CentOS/RHEL 客户端上:
-
安装
chrony(如果尚未安装)。 -
编辑
/etc/chrony.conf文件,将server指令指向你的 NTP 服务器。# 删除或注释掉其他 server 或 pool 行 # server 0.centos.pool.ntp.org iburst # 添加你的内部 NTP 服务器 server 192.168.1.100 iburst # <-- 替换为你的服务器IP
-
重启
chronyd服务。 -
使用
chronyc sources检查是否成功同步到你的服务器。
故障排查
-
客户端无法连接:
- 检查客户端和服务器之间的网络是否通畅(
ping)。 - 检查服务器防火墙是否开放了
udp/123端口。 - 检查服务器
/etc/chrony.conf中的allow规则是否正确包含了客户端的 IP。 - 在服务器上运行
chronyc clients查看有哪些客户端已连接。
- 检查客户端和服务器之间的网络是否通畅(
-
服务器无法同步到上游源:
- 检查服务器是否能访问外网(
ping pool.ntp.org)。 - 检查
/etc/chrony.conf中的server或pool地址是否正确。 - 检查是否有网络策略或代理阻止了 NTP 流量。
- 检查服务器是否能访问外网(
通过以上步骤,你就成功地在 CentOS 上搭建了一个稳定可靠的内部 NTP 服务器。
