是,systemd-timesyncd 默认启用,但仅作客户端;若需提供时间服务,须停用它并配置 chrony 作为 ntp 服务器,同时确保防火墙放行 udp 123 端口。

systemd-timesyncd 服务是否已启用?
Linux 发行版(尤其是 Ubuntu 18.04+、Debian 10+、CentOS 8+)默认启用 systemd-timesyncd,它是一个轻量级 NTP 客户端,但不支持作为 NTP 服务器运行,仅能同步时间。若你执行 timedatectl status 看到 System clock synchronized: yes,说明它正在工作;但若想让本机为其他设备提供时间服务,必须停用它并改用完整 NTP 实现。
- 运行
sudo systemctl stop systemd-timesyncd停止服务 - 运行
sudo systemctl disable systemd-timesyncd防止开机自启 - 检查是否残留占用 UDP 123 端口:
sudo ss -uln | grep :123,有输出则需确认无其他 NTP 进程干扰
安装并配置 chrony 作为 NTP 服务器(推荐)
chrony 比传统 ntpd 更适合现代 Linux 环境:启动快、网络中断后恢复准、对虚拟机漂移适应性好,且原生支持 server/client 双模式。
- 安装:
sudo apt install chrony(Debian/Ubuntu)或sudo dnf install chrony(RHEL/Fedora) - 编辑配置:
sudo nano /etc/chrony/chrony.conf - 在文件末尾添加以下两行(允许局域网设备同步):
allow 192.168.1.0/24<br>local stratum 10
-
allow后跟你的实际子网,不可写allow 0.0.0.0/0暴露公网(安全风险) -
local stratum 10表示本机作为本地权威时间源(stratum 越小越权威,1 是原子钟,10 是合理兜底值)
-
- 重启服务:
sudo systemctl restart chrony - 验证监听:
sudo ss -uln | grep :123应有输出;再用另一台机器执行chronyc sources -v查看是否能发现该服务器
客户端如何正确指向你的 NTP 服务器?
很多用户配完服务端却在客户端失败,问题常出在客户端未显式指定服务端地址,或仍被系统默认策略覆盖。
- 客户端也需安装
chrony(非systemd-timesyncd) - 编辑
/etc/chrony/chrony.conf,注释掉所有pool行,添加:server 192.168.1.100 iburst
(替换成你的 NTP 服务器 IP) -
iburst参数关键:首次同步时快速发多个包,大幅缩短收敛时间 - 执行
sudo chronyc makestep强制立即校正(避免因偏移过大被 chrony 拒绝) - 检查状态:
chronyc tracking中System time应显示OK,Source mode为client
防火墙与 SELinux 是否放行了 NTP 流量?
NTP 使用 UDP 123 端口,但很多人只开 TCP 或漏掉 UDP 规则,导致连接超时却无明确报错。
- Ubuntu/Debian(ufw):
sudo ufw allow 123/udp - RHEL/CentOS(firewalld):
sudo firewall-cmd --add-service=ntp --permanent && sudo firewall-cmd --reload - SELinux(如启用):
sudo setsebool -P chronyd_can_sync_hardware 1(某些硬件时钟同步场景需要) - 验证连通性(从客户端):
nc -uz 192.168.1.100 123—— 若无输出即通;若有Connection refused,说明服务未监听或防火墙拦截
NTP 时间同步真正难的不是配置几行命令,而是每个环节都依赖上一环:服务端没停 systemd-timesyncd 就起不来 chrony,防火墙没放开 UDP 就收不到包,客户端没加 iburst 就可能卡在“initial sync”状态半天不动。最容易忽略的是子网掩码写错,或者把服务器 IP 写成客户端自己的地址。











