一、 作为客户端:同步网络时间
方案1:Chrony(生产环境首选)
适用于 CentOS/RHEL 8+、Ubuntu 18.04+(Ubuntu 25.10+ 默认使用)。精度高,适应网络波动。
1. 安装与启动
# CentOS/RHEL/Rocky
sudo yum install chrony -y
sudo systemctl enable --now chronyd
# Ubuntu/Debian
sudo apt install chrony -y
sudo systemctl enable --now chrony
2. 修改NTP服务器(可选)编辑配置文件(路径注意区分):
RedHat系:/etc/chrony.conf
Ubuntu/Debian:/etc/chrony/chrony.conf 或 推荐在 /etc/chrony/sources.d/ 下新建 .sources 文件。
# 将原有的 pool/server 替换为国内快速服务器(以Ubuntu为例)
sudovim /etc/chrony/sources.d/custom.sources
添加以下内容:
# 阿里云NTP服务
server ntp.aliyun.com iburst
# 腾讯云NTP服务
server time1.tencentyun.com iburst
# 支持NTS加密的公共池(Ubuntu 26.04+)
server time.cloudflare.com iburst nts
3. 重启并验证
# RedHat系
sudo systemctl restart chronyd
# Ubuntu
sudo systemctl restart chrony
# 查看同步源(有*号表示已同步)
chronyc sources -v
# 查看系统时钟详细状态
chronyc tracking
方案2:systemd-timesyncd(轻量级)
适用于 Ubuntu 18.04~24.04(默认)或需要极简场景。注意:Ubuntu 25.10+ 已不再预装,若安装它会自动禁用Chrony。
1. 启用自动同步
sudo timedatectl set-ntp true
2. 修改NTP服务器
sudovim /etc/systemd/timesyncd.conf
在 [Time] 部分修改:
[Time]
NTP=ntp.aliyun.com
FallbackNTP=pool.ntp.org
3. 重启服务并查看状态
sudo systemctl restart systemd-timesyncd
timedatectl status
# 确认显示 "System clock synchronized: yes"
方案3:临时手动同步(ntpdate/chronyd)
仅适用于一次性校正,不适合长期运行。
方法A:使用ntpdate(传统)
sudo apt install ntpdate # Ubuntu
sudo yum install ntpdate # CentOS
sudo ntpdate ntp.aliyun.com
方法B:使用Chrony一次性查询/设置
# 仅查询时间差,不修改
chronyd -Q'server ntp.aliyun.com iburst'
# 立刻同步时间(必须停止本地chronyd服务)
sudo systemctl stop chrony
sudo chronyd -q'server ntp.aliyun.com iburst'
sudo systemctl start chrony
✅ 推荐做法:Chrony运行中,直接使用以下命令强制立即同步:
sudo chronyc makestep
二、 作为服务器:搭建内网NTP时钟源
在内网环境中,若服务器无法访问公网,需配置一台服务器作为内网NTP Server,其他机器指向它。
在NTP Server端配置(以Ubuntu 26.04为例)
1. 安装Chrony
sudo apt update
sudo apt install chrony -y
2. 配置允许客户端访问创建配置文件片段 /etc/chrony/conf.d/local-ntp-server.conf:
sudovim /etc/chrony/conf.d/local-ntp-server.conf
内容示例(允许特定网段访问):
# 允许内网客户端同步
allow 192.168.1.0/24
allow 10.0.0.0/8
# 当断网时,仍以本地时钟作为参考(设置伪层级)
local stratum 10
3. 防火墙放行NTP使用 UDP 123 端口。
sudo ufw allow 123/udv
# 或仅允许内网:
sudo ufw allow from 192.168.1.0/24 to any port 123 proto udp
4. 重启服务
sudo systemctl daemon-reload
sudo systemctl restart chrony
在内网客户端配置
将客户端的NTP地址指向该内网服务器IP(例如 192.168.1.10)。
Chrony客户端:
# 修改server指向内网IP
sudo nano /etc/chrony/sources.d/internal.sources
server 192.168.1.10 iburst
sudo chronyc reload sources
systemd-timesyncd客户端:
# 编辑 /etc/systemd/timesyncd.conf
[Time]
NTP=192.168.1.10
sudo systemctl restart systemd-timesyncd
三、 通用前置步骤:设置时区
无论使用哪种同步工具,时区错误会导致显示时间异常。
# 查看当前时区
timedatectl
# 设置为中国标准时间
sudo timedatectl set-timezone Asia/Shanghai
# 设置为UTC时间(服务器通用)
sudo timedatectl set-timezone UTC
建议:服务器统一使用UTC,应用层做时区转换;物理机需确认RTC(硬件时钟)使用UTC:
# 确保硬件时钟使用UTC(强烈推荐)
sudo timedatectl set-local-rtc 0
四、 快速排障指南
| 现象 | 排查命令 | 常见原因 |
|---|
| 时间一直不对 | chronyc sources -v | 服务器地址不可达;UDP 123端口被防火墙拦截;无*标记表示未选中同步源。 |
| NTS 验证失败 | nc -zv 1.ntp.ubuntu.com 4460 | NTS需要TCP 4460端口做密钥交换,企业防火墙可能拦截。 |
| 同步服务无法启动 | systemctl status chrony | 80%是因为与ntpd或timesyncd冲突。需禁用其他服务:sudo systemctl disable --now ntp |
| 刚启动同步慢 | - | Chrony默认策略makestep 1 3:前3次更新且时间差>1秒才跳变。可临时执行chronyc makestep强制同步。 |