- 什么是 NTP? - 基础概念
- 两种主要模式:客户端/服务器 vs. 对等体 - 你需要哪种?
- 配置 NTP 客户端(同步到公共服务器) - 最常见的个人/服务器场景
- 配置 NTP 服务器(为局域网内其他设备提供时间) - 企业级场景
- 常用命令和故障排查
- 现代替代方案:Chrony - 强烈推荐的新工具
什么是 NTP?
NTP (Network Time Protocol) 是一种用于在计算机网络中同步计算机时间的协议,它的设计目标是提供高精度和可靠的时间服务,误差可以控制在毫秒甚至微秒级别。

- 为什么需要它? 计算机的时钟并不完美,会因为温度、电压等因素产生漂移,如果没有统一的时间,会导致日志文件时间戳混乱、数据库事务顺序错误、分布式系统任务调度失败、安全认证(如 Kerberos)出等问题。
- 工作原理:NTP 客户端从 NTP 服务器请求时间,并根据服务器返回的时间戳和往返时间,计算出时间差和延迟,然后逐步调整本地时钟。
两种主要模式:客户端/服务器 vs. 对等体
在配置之前,你需要明确你的角色:
-
客户端/服务器 模式:
- 客户端:从指定的一个或多个 NTP 服务器同步时间,这是最常见的模式,适用于绝大多数个人电脑、服务器和物联网设备。
- 服务器:连接到一个或多个外部高精度时间源(如 GPS 原子钟、公共 NTP 池),然后将时间分发给局域网内的其他客户端,适用于企业或小型网络。
-
对等体 模式:
- 两台或多台 NTP 服务器之间互为对等体,它们之间相互同步时间,形成一个时间源集群,这种模式适用于构建高可用的内部时间服务器,普通用户一般用不到。
配置 NTP 客户端(同步到公共服务器)
这是最常用的配置,让你的 Linux 系统保持准确。

A. 安装 NTP 软件
现代 Linux 发行版通常使用 chrony 或 ntp,我们先介绍传统的 ntp。
# 对于 Debian/Ubuntu sudo apt update sudo apt install ntp # 对于 CentOS/RHEL/Fedora sudo yum install ntp # 对于 CentOS 7 及以下 sudo dnf install ntp # 对于 CentOS 8/RHEL 8/Fedora
B. 配置 NTP 客户端
编辑 NTP 的主配置文件 /etc/ntp.conf。
sudo vim /etc/ntp.conf
你需要做的核心修改是:
- 注释或删除默认的 server 行:文件中可能已经有
server 0.centos.pool.ntp.org这样的行,你可以将它们注释掉(行首加 )。 - 添加公共 NTP 服务器池:这是最推荐的方式,公共 NTP 池(如
pool.ntp.org)会自动将你路由到地理位置上最近的、响应最好的服务器。
# 使用公共 NTP 池,推荐使用中国的服务器池 # 中国 NTP 服务器池 (推荐) server 0.cn.pool.ntp.org server 1.cn.pool.ntp.org server 2.cn.pool.ntp.org server 3.cn.pool.ntp.org # 全球公共 NTP 池 # server 0.pool.ntp.org # server 1.pool.ntp.org # server 2.pool.ntp.org # server 3.pool.ntp.org # 你也可以使用特定服务商的 NTP 服务器,如阿里云、腾讯云等 # server ntp1.aliyun.com # server ntp2.aliyun.com
提示:使用 pool.ntp.org 时,它默认会提供 4 个服务器,这很好,但如果你的机器在防火墙后面或需要更高的稳定性,可以指定 iburst 选项,让它在首次同步时快速发送多个包。

server 0.cn.pool.ntp.org iburst
C. 启动并启用 NTP 服务
# 启动 NTP 服务 sudo systemctl start ntpd # 设置开机自启 sudo systemctl enable ntpd # 检查服务状态 sudo systemctl status ntpd
D. 验证同步状态
等待几分钟让 NTP 客户端与服务器同步后,使用以下命令检查。
# 查看同步摘要信息 ntpq -p # 输出示例: # remote refid st t when poll reach delay offset jitter # ============================================================================== # 0.cn.pool.ntp.org .POOL. 16 p - 64 0 0.000 0.000 0.000 # 1.cn.pool.ntp.org .POOL. 16 p - 64 0 0.000 0.000 0.000 # 2.cn.pool.ntp.org .POOL. 16 p - 64 0 0.000 0.000 0.000 # 3.cn.pool.ntp.org .POOL. 16 p - 64 0 0.000 0.000 0.000 # ntp1.aliyun.com .POOL. 16 p - 64 0 0.000 0.000 0.000 # ntp2.aliyun.com .POOL. 16 p - 64 0 0.000 0.000 0.000 # ntp3.aliyun.com .POOL. 16 p - 64 0 0.000 0.000 0.000 # ntp4.aliyun.com .POOL. 16 p - 64 0 0.000 0.000 0.000 # +37.75.16.5 17.113.19.23 3 u 64 64 1 223.712 41.234 0.000 # 120.25.115.20 133.243.238.163 3 u 62 64 1 214.872 -12.567 0.000
解读 ntpq -p 的输出:
remote: 对端 NTP 服务器的地址或域名。refid: 该服务器同步的上游时间源。st: Stratum (层级),层级越小,离时间源越近,层级 0 是原子钟,层级 1 是连接原子钟的服务器,我们通常连接的是层级 2 或 3。t: Type.u表示 unicast (单播),p表示 pool。when: 上次请求后经过的秒数。poll: 同步间隔(秒)。reach: 一个八进制数,表示最近 8 次尝试是否成功。377(二进制11111111) 表示全部成功。delay: 网络延迟,单位毫秒。offset: 时间偏差,单位毫秒,这是你的时钟与 NTP 服务器时间的差值。这个值越小越好,如果太大,说明时间不同步。jitter: 时间抖动,单位毫秒,表示时间稳定性的波动,值越小越好。
offset 值在几十毫秒以内,reach 值不为 0,说明同步是正常的。
配置 NTP 服务器(为局域网提供时间)
假设你的服务器 IP 是 168.1.100。
A. 安装和配置
安装步骤与客户端相同,配置 /etc/ntp.conf 时,需要做以下修改:
sudo vim /etc/ntp.conf
-
设置上游时间源:你的服务器也需要一个准确的时间源,像客户端一样,添加公共 NTP 池。
# 上游时间源 server 0.cn.pool.ntp.org iburst server 1.cn.pool.ntp.org iburst
-
限制客户端访问(重要!):默认情况下,NTP 服务器会响应所有请求,为了安全和性能,你应该限制只有你的局域网可以同步时间。
# 允许局域网内所有客户端同步时间 # 192.168.1.0/24 表示 192
