从零搭建NTP 时间同步服务器(基于 Rocky Linux 9 与 Ubuntu 22.04)

时间同步是现代 IT 基础设施的基石,它确保了日志审计、数据库事务和分布式系统的一致性。本教程将引导您在 VMWare 虚拟机环境中,使用 chrony 搭建一个稳定、高可用的 NTP 服务器,并对每一个关键配置指令进行深入解析。

实验环境:

  • NTP 服务器: Rocky Linux 9 (IP: 10.0.0.12)
  • NTP 客户端: Ubuntu 22.04 (IP: 10.0.0.13)

一、NTP 核心理论与 Stratum 深度解析

1. Stratum 层级结构

NTP 采用分层模型 (Stratum) 来表示时钟源的精度。数字越小,精度越高。您的本地服务器将作为 Stratum 3 时间源为内网客户端服务。

2. 同步原理:四步握手与平滑调整

NTP 使用经典的四步握手计算时间偏差 (θ\thetaθ) 和网络延迟 (δ\deltaδ)。系统采用 平滑调整 (Slewing) 机制,通过缓慢改变系统时钟频率来消除偏差,避免时间跳变对系统日志和文件时间戳造成混乱。


二、NTP 服务器配置与深度解析(Rocky Linux 9 - 10.0.0.12)

步骤 1:安装 chrony

sudo dnf install chrony -y

【命令含义】 使用 DNF (Dandified YUM) 包管理器安装 chrony 软件包。
【为什么】 chrony 是现代 Linux 发行版(如 RHEL/Rocky)推荐的 NTP 客户端/服务器程序,它比传统 ntpd 更轻量、响应更快,尤其适用于网络波动或虚拟机环境。

步骤 2:配置 chrony.conf 核心参数解析

编辑 /etc/chrony.conf。

sudo vi /etc/chrony.conf
A. 上游时间源配置
pool 2.rocky.pool.ntp.org iburst

【命令含义】 将 2.rocky.pool.ntp.org 指定为上游时间同步源,并使用 iburst 选项。
【为什么】 Rocky 服务器必须先和高精度公网时间源同步,才能向内网提供准确时间。iburst 告诉 chrony 在启动时快速发送一串 NTP 包,以加速首次时间同步,更快进入稳定状态。

B. 客户端授权配置 (开启服务器模式)
allow 10.0.0.0/24

【命令含义】 允许 IP 地址范围 10.0.0.0/24 内的所有客户端通过 NTP 协议连接并同步时间。
【为什么】 这是将 chronyd 从“仅客户端”模式转变为“同时作为服务器”的关键。没有这条指令,客户端将无法连接。

C. 【排错关键】 强制 IP 绑定
bindaddress 10.0.0.12

【命令含义】 强制 chronyd 进程在提供 NTP 服务时,显式绑定并监听 IP 地址 10.0.0.12。
【为什么】 在 VMWare 或复杂网络环境中,chronyd 有时无法自动确定要监听哪个外部 IP,导致它只监听本地环回地址 (127.0.0.1),从而无法被客户端访问。此指令解决了 netstat 中端口不监听的根本问题。

D. 后备时钟配置
local stratum 10

【命令含义】 当所有配置的外部时间源都不可用时,使用本地时钟作为 Stratum 10 的时间源。
【为什么】 提供了容错机制。即使服务器与互联网断开,它仍能向内网客户端提供一个一致的后备时间,避免内网时间发散。

步骤 3:配置系统安全策略(Firewalld 与 SELinux)

A. Firewalld 配置(开放 UDP 123)
# 永久添加 NTP 服务规则
sudo firewall-cmd --zone=public --add-service=ntp --permanent

# 重新加载规则,使之立即生效
sudo firewall-cmd --reload

【命令含义】 开放 UDP 端口 123。--permanent 使规则永久保存;--reload 立即应用新规则,无需重启系统。
【为什么】 NTP 协议使用 UDP 123 端口进行通信。防火墙必须明确允许客户端数据包通过此端口到达 chronyd 服务。

B. SELinux 策略(防止服务被阻断)
sudo setenforce 0

【命令含义】 将 SELinux 的模式从 Enforcing (强制执行) 临时改为 Permissive (宽松)。
【为什么】 在 RHEL/Rocky 系统上,SELinux 策略可能阻止 chronyd 进程进行网络操作,即使 Firewalld 端口已开放。临时禁用用于排查和确保服务正常运行。

步骤 4:启动服务与验证服务器自身状态

sudo systemctl enable --now chronyd

【命令含义】 设置 chronyd 开机自启,并立即启动服务。
【为什么】 确保配置生效后服务能立即运行,并保持持久化。


四、NTP 客户端配置与验证(Ubuntu 22.04 - 10.0.0.13)

步骤 1:安装 chrony

sudo apt install chrony -y

步骤 2:配置客户端指向本地服务器

编辑 /etc/chrony/chrony.conf。

  1. 注释掉所有公网源。
    # pool ntp.ubuntu.com 
    
  2. 添加本地服务器:
    server 10.0.0.12 iburst
    
    【为什么】 客户端现在只信任 10.0.0.12 作为时间源,避免了同步到公网,确保了时间同步源的可控性和准确性。

步骤 3:重启服务并最终验证

sudo systemctl restart chrony

验证状态:

chronyc sources

** 最终成功验证结果:**

MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^** 10.0.0.12                     3   6       7     0 -1310ns[  +21ms] +/- 101ms

解读: ^* 标志和 Stratum 3 确认了客户端已成功同步到本地 Stratum 2 的 Rocky 服务器

、

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐