目录
- NTP 基础概念
- 什么是 NTP?
- NTP 的工作模式
- NTP 层级结构
- 环境准备
- 系统要求
- 检查当前时间同步状态
- 安装 NTP 服务
- 基于 RHEL/CentOS/Fedora
- 基于 Debian/Ubuntu
- 配置 NTP 服务器
- 备份原始配置文件
- 编辑主配置文件 (
/etc/ntp.conf) - 配置文件详解 (
/etc/ntp.conf) - 配置内部时钟源(可选)
- 启动并启用 NTP 服务
- 配置防火墙
- 验证 NTP 服务器状态
- 查看 NTP 服务状态
- 使用
ntpq命令监控对等体 - 使用
ntpdc命令监控详细信息
- 配置客户端(同步到该服务器)
- 高级与安全配置
- 限制客户端访问 (
restrict指令) - 使用
pool替代server - 使用
leapfile处理闰秒
- 限制客户端访问 (
- 排错指南
NTP 基础概念
什么是 NTP?
网络时间协议是一种用于在计算机网络中同步计算机时钟的协议,它可以使网络中的所有设备时间保持高度一致(精确到毫秒甚至纳秒级别)。

NTP 的工作模式
- 服务器/客户端模式:最常用的模式,客户端向一个或多个 NTP 服务器发送时间请求,并根据服务器返回的时间来调整自己的本地时钟。
- 对等体模式:两台或多台 NTP 服务器之间相互同步,形成一个对等体关系,共同提高时间源的稳定性和准确性。
NTP 层级结构
NTP 使用层级结构(称为 Stratum)来组织时间源。
- Stratum 0 (0级):最高层级,是精确的时间源,如原子钟、GPS 钟等,这些设备不通过网络,而是直接连接到服务器。
- Stratum 1 (1级):直接连接到 Stratum 0 设备的 NTP 服务器,它们是网络上最权威的时间服务器。
- Stratum 2 (2级):从 Stratum 1 服务器同步时间的服务器。
- Stratum 3 (3级):从 Stratum 2 服务器同步时间的服务器。
- ...以此类推。
理论上,层级越高,时间延迟越大,精度越低,在实际部署中,我们通常将服务器配置为 Stratum 2 或 Stratum 3。
环境准备
系统要求
- 一台稳定运行的 Linux 服务器(推荐 RHEL/CentOS 7+, Ubuntu 18.04+)。
- 具有管理员 (
root) 权限。
检查当前时间同步状态
在配置之前,先检查系统是否已经运行了其他时间同步服务(如 chronyd,在 CentOS 7+/RHEL 7+ 和 Ubuntu 16.04+ 中是默认服务)。
# 检查 chronyd 服务状态 (CentOS/RHEL 7+, Ubuntu 16.04+) systemctl status chronyd # 检查 ntpd 服务状态 (旧版系统) systemctl status ntpd
如果你的系统正在使用 chronyd,建议先禁用它,以避免冲突。

# 对于 CentOS/RHEL 7+ systemctl stop chronyd systemctl disable chronyd # 对于 Ubuntu systemctl stop systemd-timesyncd systemctl disable systemd-timesyncd
安装 NTP 服务
基于 RHEL/CentOS/Fedora
使用 yum 或 dnf 包管理器安装。
sudo yum install ntp # 适用于 CentOS 6/7 # 或者 sudo dnf install ntp # 适用于 Fedora 及 CentOS 8/9
基于 Debian/Ubuntu
使用 apt 包管理器安装。
sudo apt update sudo apt install ntp
配置 NTP 服务器
备份原始配置文件
在修改任何配置文件前,养成备份的好习惯。
sudo cp /etc/ntp.conf /etc/ntp.conf.bak
编辑主配置文件 (/etc/ntp.conf)
使用你喜欢的文本编辑器(如 vi, nano)打开配置文件。

sudo vi /etc/ntp.conf
配置文件详解 (/etc/ntp.conf)
一个典型的 NTP 服务器配置文件包含以下几个部分:
a. 指定上游时间源 这是配置的核心,告诉你的 NTP 服务器应该向谁同步时间,你可以使用公共 NTP 池或指定的服务器。
# 使用公共 NTP 池(推荐) # server 0.centos.pool.ntp.org iburst # server 1.centos.pool.ntp.org iburst # server 2.centos.pool.ntp.org iburst # server 3.centos.pool.ntp.org iburst # 或者使用更通用的公共池 server 0.pool.ntp.org iburst server 1.pool.ntp.org iburst server 2.pool.ntp.org iburst server 3.pool.ntp.org iburst
server: 指定 NTP 服务器的地址或域名。iburst: 当 NTP 服务启动时,它首先会以一个快速、连续的包 burst 模式发送请求,以快速同步时间,之后恢复正常轮询间隔,这能大大加快初始同步速度。
b. 允许客户端访问
默认情况下,NTP 服务器会拒绝所有客户端的请求,你需要使用 restrict 指令来允许来自特定网络的客户端。
# 默认策略:拒绝所有客户端查询 restrict default ignore # 允许本地环回地址(127.0.0.1)进行查询 restrict 127.0.0.1 # 允许来自局域网的客户端同步时间 # 将 192.168.1.0/24 替换为你的局域网网段 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap noquery
restrict: 定义访问控制规则。168.1.0 mask 255.255.255.0: 指定允许的 IP 地址范围。nomodify: 客户端不能修改服务器的时间。notrap: 客户端不能使用ntpd的 trap 机制。noquery: 客户端不能发送ntpq和ntpdc的查询,这是一个很好的安全实践,可以防止 DDoS 攻击。
c. 指定本地时钟 如果你的服务器连接了本地硬件时钟(如 GPS 授时卡或原子钟),你需要在这里声明它。
# 假设你的服务器连接了一个 GPS 时钟,设备为 /dev/gps0 # server 127.127.20.1 # fudge 127.127.20.1 time1 0.0 refid GPS
server 127.127.x.y: 特殊的 IP 地址,表示本地时钟源。x: 时钟类型(20代表 GPS,22代表 PPS 信号)。y: 设备号(0代表/dev/gps0)。
fudge: 对本地时钟源的参数进行调整。time1: 时间偏移量。refid: 时钟源的参考 ID。
d. 其他可选配置
# 指定 driftfile,用于记录时钟频率偏差,以便在无网络时进行补偿 driftfile /var/lib/ntp/drift # 指定日志文件 logfile /var/log/ntp.log # 忽略某些时钟源,防止它们被用作同步源 # disable auth
启动并启用 NTP 服务
安装并配置完成后,启动 NTP 服务并设置为开机自启。
# 启动服务 sudo systemctl start ntpd # 设置开机自启 sudo systemctl enable ntpd # 检查服务状态 sudo systemctl status ntpd
确保看到 active (running) 状态。
配置防火墙
如果你的服务器启用了防火墙(如 firewalld 或 ufw),需要开放 NTP 服务的 UDP 端口 123。
对于 firewalld (CentOS/RHEL 7+)
# 添加 permanent 规则,使其永久生效 sudo firewall-cmd --permanent --add-service=ntp # 重新加载防火墙 sudo firewall-cmd --reload
对于 ufw (Ubuntu/Debian)
# 开放 123/udp 端口 sudo ufw allow 123/udp # 重新加载防火墙(可选,通常不需要) sudo ufw reload
验证 NTP 服务器状态
查看 NTP 服务状态
sudo systemctl status ntpd
查看日志输出,确认服务已正常运行。
使用 ntpq 命令监控对等体
ntpq 是 NTP 的标准查询工具,用于监控 NTP 服务器和客户端的状态。
ntpq -p
输出示例:
remote refid st t when poll reach delay offset jitter
==============================================================================
+ntp1.ams1.nl.ni 193.79.237.14 2 u 13 64 377 14.521 -1.234 0.456
*ntp2.lon.uk.ni 193.78.240.14 2 u 12 64 377 25.123 2.456 0.789
+ntp3.par.fr.ni 193.78.240.18 2 u 14 64 377 30.456 -0.123 1.012
remote: 对等体的主机名或 IP。refid: 该对等体所同步的时间源 ID。st: Stratum 层级。t: 类型(u代表 unicast,l代表 local, etc.)。when: 上次请求后经过的秒数。poll: 轮询间隔(秒)。reach: 到达计数器(八进制)。delay: 网络延迟。offset: 本地时钟与对等体时钟的时间差,这是最重要的指标,它应该趋近于 0。jitter: 时间抖动,值越小越稳定。
关键符号:
- 当前被系统同步的主要对等体。
- 一个被认可的、可用的对等体。
x: 一个被拒绝的对等体。- 一个没有达到
minclock(通常是3)的对等体。
使用 ntpdc 命令监控详细信息
ntpdc 提供了比 ntpq 更底层的监控信息。
ntpdc -c peers ntpdc -c sysinfo
配置客户端(同步到该服务器)
在局域网内的其他 Linux 客户机上,你可以将它们配置为同步到你刚刚搭建的 NTP 服务器。
-
在客户端上安装 NTP(如果未安装)。
-
编辑客户端的
/etc/ntp.conf可以非常简单:# 将你的 NTP 服务器 IP 地址填入 server 192.168.1.100 iburst # 其他可选配置 restrict default ignore restrict 127.0.0.1 driftfile /var/lib/ntp/drift
-
启动并启用客户端的
ntpd服务。sudo systemctl stop chronyd # 如果存在 sudo systemctl disable chronyd sudo systemctl start ntpd sudo systemctl enable ntpd
-
验证客户端:在客户端上运行
ntpq -p,你应该能看到你的服务器 IP 地址,offset值会逐渐变小。
高级与安全配置
限制客户端访问
在 /etc/ntp.conf 中,通过精细的 restrict 指令来控制客户端权限。
# 默认拒绝所有 restrict default ignore # 允许本地查询 restrict 127.0.0.1 # 允许特定网段进行查询和同步,但不能修改服务器 restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap nopeer # 允许另一个受信任的服务器进行完全同步(对等体模式) restrict 10.0.0.5 nomodify
nopeer: 防止客户端与服务器形成对等体关系,避免时间回拨等问题。
使用 pool 替代 server
对于上游时间源,使用 pool 指令通常比 server 更好,因为它可以自动处理故障转移和负载均衡。
# 使用 pool 指令 pool 0.pool.ntp.org iburst pool 1.pool.ntp.org iburst
使用 leapfile 处理闰秒
为了正确处理闰秒,可以下载官方的 leapsecond 文件。
# 在 /etc/ntp.conf 中添加 leapfile /etc/ntp.leapseconds # 然后下载 leapsecond 文件 sudo wget -P /etc/ https://www.ntp.org/files/leap/leap-seconds.list
排错指南
- 服务无法启动:检查
/var/log/messages或/var/log/daemon.log中的错误信息,常见原因包括配置文件语法错误、端口 123 被占用。 - 客户端无法同步:
- 检查客户端和服务器之间的网络连通性 (
ping,telnet <server_ip> 123)。 - 检查服务器防火墙是否允许 UDP 123 端口。
- 检查服务器
/etc/ntp.conf中的restrict规则是否正确。 - 在客户端上检查
ntpq -p的输出,查看offset和reach值。
- 检查客户端和服务器之间的网络连通性 (
- 时间同步很慢或不稳定:
- 检查上游时间源的质量,尝试更换公共池。
- 检查网络延迟和抖动。
- 确保服务器和客户端的硬件时钟没有问题。
配置一个 NTP 服务器是一个相对直接但非常重要的系统管理任务,通过以上步骤,你应该能够成功搭建一个为你的局域网提供精确时间同步的服务器,关键点在于:
- 选择可靠的上游时间源。
- 正确配置防火墙和访问控制 (
restrict)。 - 验证配置,确保服务器和客户端都正常工作。
对于新部署的系统,也可以考虑使用 chrony,它是 NTP 的一个现代替代品,对网络不稳定的环境适应性更强,同步速度也更快,但对于大多数传统需求,ntpd 依然是一个非常稳定和可靠的选择。
