验证chronyc ntp服务正常
在 Ubuntu 22.04 上,通过 chrony(服务名为 chrony.service)向其他主机提供 NTP 服务,验证其是否正常工作可以分为 服务端检查 和 远程客户端验证 两个阶段。
以下是具体步骤:
一、 服务端配置确认(前提条件)
首先确保你的 /etc/chrony/chrony.conf 文件中包含了允许其他主机访问的指令。
1 | # 编辑配置文件 |
二、 服务端自我验证(本机检查)
- 检查服务状态
确认 chrony 服务正在运行:
1 | systemctl status chrony |
- 检查端口监听
NTP 服务使用 UDP 123 端口。检查该端口是否已打开并处于监听状态:
1 | sudo ss -unlp | grep 123 |
- 正常输出: 应显示 0.0.0.0:123 或 *:123,表示服务正在监听外部请求。
- 检查自身同步状态
如果服务端自己都没同步好时间,它可能不会向客户端提供可靠的时间服务(或 Stratum 层级过高):
1 | chronyc tracking |
- 关注点: Leap status 应为 Normal,且 Stratum 通常应在 2-4 之间。
- 查看已连接的客户端
这个命令可以实时看到有哪些 IP 正在请求本服务器的时间:
1 | sudo chronyc clients |
三、 远程客户端验证(最有效的方法)
在另一台主机(客户端)上运行以下测试:
方法 A:使用 ntpdate (简单直观)
如果客户端安装了 ntpdate 工具,可以使用 -q (query) 模式测试,这不会修改本地时间:
1 | # 替换 <SERVER_IP> 为你的 Ubuntu 主机 IP |
成功: 输出 server
, stratum 3, offset …, delay …。 失败: 输出 no server suitable for synchronization found。
方法 B:使用 sntp (现代系统常用)
很多现代 Linux 系统自带 sntp:
1 | sntp <SERVER_IP> |
- 成功: 会返回服务器的时间戳和误差。
方法 C:使用 chronyc (如果客户端也是 chrony)
在客户端的 /etc/chrony/chrony.conf 中添加服务端 IP,然后重启服务。执行:
1 | chronyc sources -v |
- 查看状态: 观察对应 IP 前面的符号。
- ^*:表示同步成功且是当前选定的主来源。
- ^?:表示无法连接或同步中。
四、 常见问题排查
如果远程验证失败,通常是以下两个原因:
防火墙拦截:
Ubuntu 默认可能开启了 ufw。需要允许 UDP 123 端口:
1 | sudo ufw allow 123/udp |
配置未生效:
确保 allow 指令中的子网范围涵盖了客户端的 IP。如果是云服务器,还需检查云平台的“安全组/网络 ACL”是否放行了 UDP 123 端口。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 荒莽之地!