Linux NTP 同步失败的常见原因

10次阅读

ntpdate报错“No suitable server found”主因是udp 123端口防火墙或网络设备拦截,而非服务器不可达;应先用nc测试连通性,再排查防火墙、systemd-timesyncd冲突及调试输出。

Linux NTP 同步失败的常见原因

ntpdate 命令报错 No suitable server found

这是最常遇到的现象,表面看是找不到可用 NTP 服务器,实际原因往往不是服务器不可达,而是本地防火墙或目标端口被拦截。ntpdate 默认使用 UDP 端口 123,若本机 outbound 被禁、或中间网络设备(如企业网关)屏蔽了该端口,就会直接失败。

实操建议:

  • 先用 nc -u -z -w 2 pool.ntp.org 123 测试连通性;不通则优先排查防火墙(iptables -L -nufw status)和网络策略
  • 避免在 systemd-timesyncd 已启用时强行运行 ntpdate,两者会争抢端口,导致后者绑定失败
  • 临时测试可加 -d 参数查看详细调试输出,确认是超时、拒绝还是无响应

systemd-timesyncd 同步状态显示 Status: inactiveIdle

systemd-timesyncd 不是传统意义上的“一直运行”的服务,它默认按需唤醒(比如启动时、网络上线后),所以看到 Idle 是正常行为。但若长时间不更新时间,且 timedatectl statusNTP enabledyes 却始终没同步成功,问题多出在配置或网络上。

实操建议:

  • 检查配置文件 /etc/systemd/timesyncd.conf,确认 Servers= 行未被注释,且值合理(例如 Servers=0.pool.ntp.org 1.pool.ntp.org
  • 执行 sudo systemctl restart systemd-timesyncd 后,立刻用 journalctl -u systemd-timesyncd -n 20 查看最近日志,留意是否出现 Failed to acquire NTP serverConnection refused
  • 某些云环境(如 AWS EC2)默认禁用 NTP,需在实例设置中显式开启 Network Time Protocol (NTP) 功能

chrony 同步延迟高或始终 Not synchronised

chronysystemd-timesyncd 更健壮,但也更依赖初始配置。常见于手动安装后未正确启用,或系统时钟偏差过大(>1000 秒)导致 chrony 主动拒绝同步。

实操建议:

  • 首次启用前,先用 sudo chronyd -q 强制做一次快速校准(该命令会阻塞直到完成),再启动服务
  • 检查 /etc/chrony.conf 是否包含有效源,如 pool pool.ntp.org iburstiburst 很关键,能加速初始同步
  • 运行 chronyc trackingchronyc sources -v,若 State 显示 offlinerejected,说明 chrony 认为该源不可信——通常因网络抖动、RTT 波动大,或本地时钟漂移率突变

SElinuxappArmor 阻止 NTP 进程访问网络

centos/RHEL(SELinux)或 ubuntu(AppArmor)上,即使防火墙放行,安全模块也可能拦截 chronydsystemd-timesyncd 的 socket 创建行为,表现为服务启动成功但无任何同步日志,或日志里出现 Permission denied

实操建议:

  • RHEL/CentOS:运行 sudo ausearch -m avc -ts recent | grep chronyd,若有 AVC 拒绝记录,临时用 sudo setenforce 0 测试是否恢复;确认后用 sudo audit2allow -a -M ntpfix 生成策略并加载
  • Ubuntu:检查 /etc/apparmor.d/usr.sbin.chronyd 是否存在且允许 network inet dgram,缺失则需手动添加并执行 sudo apparmor_parser -r /etc/apparmor.d/usr.sbin.chronyd

NTP 同步失败真正难定位的,往往不是配置写错,而是多个机制叠加干扰:比如 systemd-timesyncd 和 chronyd 同时启用、SELinux 拦截 + 防火墙封端口 + 云平台 NTP 限制三者共存。动手前先用 timedatectl statusjournalctl 锁定当前生效的服务,再逐层排除。

text=ZqhQzanResources