NTP服务器用于解决网络设备间时间不同步问题,确保日志准确、事务有序,并为时间敏感应用提供统一可靠的时间基准。
网络时间协议 (NTP) 是互联网上用于同步计算机时钟的关键协议,在 CentOS 系统上部署一个可靠、准确的 NTP 服务器,对于确保企业内网、服务器集群或任何依赖精确时间的系统环境至关重要,本指南将详细介绍在 CentOS 7 或 CentOS 8/Stream 上配置 NTP 服务器的标准方法。
- 时间一致性: 确保网络中所有服务器、工作站、网络设备(如路由器、交换机)和应用程序拥有高度一致的时间戳。
- 日志关联: 故障排查、安全审计时,精确的时间戳是关联不同系统日志事件的基础。
- 安全协议: Kerberos 认证、TLS/SSL 证书验证等安全机制严重依赖准确的时间。
- 分布式系统: 数据库集群、负载均衡、批处理作业等需要严格的时间同步以避免数据冲突或逻辑错误。
- 法规遵从: 某些行业法规要求系统时间必须可审计且准确。
CentOS 上的 NTP 实现选择
CentOS 主要支持两种 NTP 实现:
-
ntpd
(来自ntp
包):- 传统的、功能完备的 NTP 守护进程。
- 历史悠久,稳定可靠,配置复杂但灵活。
- 适用于需要精细控制或特定高级功能的场景。
-
chronyd
(来自chrony
包):- 现代推荐方案 (尤其适用于 CentOS 7+):
- 设计更轻量,启动更快,对间歇性网络连接(如虚拟机、笔记本电脑)适应性更强。
- 能更好地处理不稳定的网络延迟和时钟漂移。
- 默认配置通常更简单,安全性配置(如
-m
选项)更符合现代需求。 - 通常作为 CentOS 7 及更高版本的默认安装选项。
本指南将重点介绍 chronyd
的配置,因其是当前 CentOS 版本的推荐和默认选择。 也会简要提及 ntpd
的配置要点。
安装 Chrony (推荐方法)
-
检查是否已安装:
rpm -q chrony
如果未安装,输出会提示
package chrony is not installed
。 -
安装 Chrony:
sudo yum install chrony # CentOS 7 sudo dnf install chrony # CentOS 8/Stream
-
启动并启用开机自启:
sudo systemctl start chronyd sudo systemctl enable chronyd
-
检查服务状态:
sudo systemctl status chronyd
确保状态显示为
active (running)
。
配置 Chrony NTP 服务器
-
编辑主配置文件:
sudo vi /etc/chrony.conf
-
关键配置项:
- 指定上游 NTP 服务器池/源 (必需):
# 使用 CentOS 提供的 NTP 源池 (推荐) pool 2.centos.pool.ntp.org iburst # 或者使用公共 NTP 池 (如亚洲区) # pool asia.pool.ntp.org iburst # 或者指定具体的可靠 NTP 服务器 # server ntp1.example.com iburst # server ntp2.example.com iburst
pool
: 使用 DNS 轮询负载均衡一组服务器。server
: 指定单个服务器。iburst
: 初始启动时快速发送多个包以加速同步。
- 允许客户端访问 (必需):
# 允许特定网段 (192.168.1.0/24) 的客户端同步 allow 192.168.1.0/24 # 或者允许所有客户端 (谨慎使用,仅在安全内网考虑) # allow all
安全最佳实践: 使用
allow
指令精确限制可访问 NTP 服务的客户端 IP 范围,避免不必要的allow all
。 - 启用本地时间源 (可选,适用于无稳定外部网络):
# 如果服务器无法访问外部 NTP 源,启用本地硬件时钟作为备用源 (层级 10) # local stratum 10
仅在必要时启用,并理解这会降低时间精度。
- 记录测量统计 (可选):
# 启用日志记录 logdir /var/log/chrony # 记录测量统计 (有助于监控和调试) # log measurements statistics tracking
- 其他重要选项 (通常保持默认):
makestep
: 处理大的时间偏差(如makestep 1.0 3
表示前三次更新允许步进调整超过1秒)。rtcsync
: 告诉内核系统时间由 chronyd 定期同步到 RTC (硬件时钟)。driftfile
: 记录系统时钟频率漂移的文件路径 (/var/lib/chrony/drift
)。
- 指定上游 NTP 服务器池/源 (必需):
-
保存并关闭文件。
-
重启 Chronyd 使配置生效:
sudo systemctl restart chronyd
配置防火墙 (Firewalld)
允许 NTP 服务 (端口 UDP/123) 的入站访问:
sudo firewall-cmd --permanent --add-service=ntp # CentOS 7/8/Stream sudo firewall-cmd --reload
验证 Chrony 同步状态
-
查看时间源和同步状态:
chronyc sources -v
- 检查
^*
或^+
标记,表示当前选中的同步源。 - 查看源的状态 (
S
列)、层级 (Stratum
)、精度 (Poll
)、到达时间 (Reach
)、最后更新时间 (LastRx
) 和偏移量 (Offset
)。Reach
值 (八进制) 接近 377 表示连接良好。
- 检查
-
查看跟踪信息:
chronyc tracking
- 查看
Reference ID
(当前同步源的 ID/IP)、Stratum
(层级)、Ref time
(上次更新时间)、System time
(当前系统时间偏移量)、Root delay
(到源的总延迟)、Root dispersion
(累积误差)、Leap status
(闰秒状态) 等关键指标。System time
的偏移量应很小 (通常在毫秒级)。
- 查看
-
快速检查状态:
chronyc activity
查看在线源 (
Online
) 和离线源 (Offline
) 的数量。
配置 NTP 客户端 (指向此服务器)
在需要同步时间的客户端机器 (可以是另一台 CentOS、Windows、网络设备等) 上,将其 NTP 服务器地址配置为您刚搭建的 CentOS NTP 服务器的 IP 地址或主机名。
-
CentOS 客户端 (使用 chrony):
编辑/etc/chrony.conf
,注释掉或删除原有的pool/server
行,添加:server your_ntp_server_ip iburst
重启
chronyd
并验证 (chronyc sources -v
)。 -
Windows 客户端:
在“设置”->“时间和语言”->“日期和时间”->“其他设置”->“Internet 时间”->“更改设置”中,输入您的 NTP 服务器地址并点击“立即更新”。
使用 ntpd
(传统方法 – 备选)
-
安装:
sudo yum install ntp # CentOS 7 sudo dnf install ntp # CentOS 8/Stream
-
配置 (
/etc/ntp.conf
):- 指定上游源 (
server/pool
指令,同上)。 - 关键安全配置 (限制访问):
# 允许本地查询 (如 ntpq, ntpdc) restrict 127.0.0.1 restrict ::1 # 允许特定网段客户端同步 (nomodify 防止修改配置) restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap # 拒绝其他所有访问 (默认策略) restrict default kod nomodify notrap nopeer noquery
nomodify
: 禁止客户端修改配置。notrap
: 禁止使用ntpdc
控制消息陷阱。nopeer
: 禁止建立对等体关系。noquery
: 禁止ntpq/ntpdc
查询 (对纯客户端不需要)。kod
: 对违规访问发送 KoD (Kiss-o’-Death) 包。
- 其他选项 (
driftfile
,logfile
等)。
- 指定上游源 (
-
启动并启用:
sudo systemctl start ntpd sudo systemctl enable ntpd
-
防火墙: 同样需要允许 UDP/123 (
sudo firewall-cmd --permanent --add-service=ntp
)。 -
验证:
ntpq -pn
- 查看
remote
(源地址)、refid
(源的参考源)、st
(层级)、t
(类型)、when
(上次查询秒数)、poll
(轮询间隔)、reach
(八进制可达性)、delay
(延迟)、offset
(偏移)、jitter
(抖动)。 表示当前同步源。
- 查看
监控与维护
- 定期检查状态: 使用
chronyc sources -v
或ntpq -pn
监控同步状态和源的健康状况。 - 查看日志:
/var/log/messages
(chrony/ntpd 日志通常记录在此) 或 Chrony 的专用日志 (如果配置了logdir
和log
指令)。 - 保持系统更新:
sudo yum update
/sudo dnf update
确保 NTP 软件包获得安全补丁和更新。 - 硬件时钟同步: 确保
hwclock --systohc
(或 Chrony 的rtcsync
) 在关机/重启时正确将系统时间写入硬件时钟 (RTC)。 - 考虑冗余: 对于关键环境,部署多个 NTP 服务器,并让它们相互同步或指向不同的上游源。
常见问题排查
chronyc sources
显示 或x
: 源不可达或配置错误,检查网络连接、防火墙规则、上游源地址是否正确。chronyc tracking
显示大的System time
偏移: 初始同步可能需要时间 (iburst
帮助加速),如果持续很大,检查网络延迟、服务器负载、硬件时钟问题。- 客户端无法同步: 检查客户端配置 (指向正确的服务器 IP)、客户端防火墙 (允许 UDP/123 出站)、服务器防火墙 (允许客户端 IP 的 UDP/123 入站)、服务器配置 (
allow
指令是否包含客户端 IP)。 clock not synchronized
: 服务未运行 (systemctl status chronyd/ntpd
)、配置错误、网络问题或上游源不可用。
在 CentOS 上配置一个健壮的 NTP 服务器是维护整个 IT 基础设施时间准确性的基石,遵循本指南,选择推荐的 chronyd
实现,进行精确的访问控制 (allow
/restrict
),并定期监控状态,您将能够建立一个可靠、安全且符合 E-A-T 原则的时间同步服务,精确的时间不仅是技术需求,更是保障系统安全、日志有效性和业务连续性的关键要素。
引用说明:
- Chrony 项目官方文档: https://chrony.tuxfamily.org/documentation.html (权威技术参考)
- NTP 项目官方文档: http://www.ntp.org/documentation.html (权威技术参考)
- CentOS Wiki / 官方文档: 关于特定 CentOS 版本的服务管理 (
systemctl
)、包管理 (yum
/dnf
)、防火墙 (firewalld
) 的使用说明。(https://wiki.centos.org/, https://docs.centos.org/) - NTP Pool Project: https://www.ntppool.org/ (公共 NTP 服务器池信息)
- RFC 1305 (NTPv3) / RFC 5905 (NTPv4): 网络时间协议的核心技术标准定义。(https://datatracker.ietf.org/doc/rfc1305/, https://datatracker.ietf.org/doc/rfc5905/) (最高权威标准)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8580.html