凌峰创科服务平台

Centos如何配置NTP服务器?

为什么选择 Chrony?

  • 快速同步:对于不稳定的网络环境(如虚拟机、网络延迟高的环境),Chrony 能比 NTPd 更快地同步时间。
  • 低资源占用:对系统资源(CPU、内存)的占用非常小。
  • 高精度:即使在系统时间漂移较大时,也能保持高精度同步。
  • 支持虚拟化:在虚拟机中表现优异,能更好地处理时间跳跃问题。

场景说明

我们将配置一个内部 NTP 服务器,该服务器从外部权威时间源同步时间,然后为局域网内的其他设备(如服务器、PC)提供时间同步服务。

Centos如何配置NTP服务器?-图1
(图片来源网络,侵删)

拓扑结构: 局域网内的客户端 <---> CentOS NTP服务器 (chrony) <---> 外部权威时间源 (如 pool.ntp.org)


第一步:安装 Chrony 软件包

在大多数 CentOS 系统中,chrony 已经是默认安装的,如果没有,可以使用 yumdnf 进行安装。

# 对于 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,我们需要编辑这个文件来定义我们的时间源和客户端访问规则。

Centos如何配置NTP服务器?-图2
(图片来源网络,侵删)
sudo vi /etc/chrony.conf

配置上游时间源(同步外部时间)

找到文件中类似 poolserver 的行,这些行定义了你的服务器从哪里获取时间,默认配置通常已经包含了 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 服务器最关键的一步,你需要添加 allowlocal stratum 指令。

  • allow [IP地址/网段]:允许哪个或哪些网段的客户端连接。
  • local stratum 10:当服务器成功同步到上游源后,它会将自己伪装成一个 Stratum 10 的服务器,这个数字必须高于上游源(如果你的上游源是 Stratum 1 或 2,10 是安全的),以确保客户端不会尝试越过你的服务器去连接上游源。

示例配置:

Centos如何配置NTP服务器?-图3
(图片来源网络,侵删)

假设你的局域网网段是 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
  • Stratum3 表示你的服务器已经成功同步。
  • Leap statusNot 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 客户端上:

  1. 安装 chrony(如果尚未安装)。

  2. 编辑 /etc/chrony.conf 文件,将 server 指令指向你的 NTP 服务器。

    # 删除或注释掉其他 server 或 pool 行
    # server 0.centos.pool.ntp.org iburst
    # 添加你的内部 NTP 服务器
    server 192.168.1.100 iburst  # <-- 替换为你的服务器IP
  3. 重启 chronyd 服务。

  4. 使用 chronyc sources 检查是否成功同步到你的服务器。


故障排查

  • 客户端无法连接:

    • 检查客户端和服务器之间的网络是否通畅(ping)。
    • 检查服务器防火墙是否开放了 udp/123 端口。
    • 检查服务器 /etc/chrony.conf 中的 allow 规则是否正确包含了客户端的 IP。
    • 在服务器上运行 chronyc clients 查看有哪些客户端已连接。
  • 服务器无法同步到上游源:

    • 检查服务器是否能访问外网(ping pool.ntp.org)。
    • 检查 /etc/chrony.conf 中的 serverpool 地址是否正确。
    • 检查是否有网络策略或代理阻止了 NTP 流量。

通过以上步骤,你就成功地在 CentOS 上搭建了一个稳定可靠的内部 NTP 服务器。

分享:
扫描分享到社交APP
上一篇
下一篇