NTP 授时服务器搭建
· 阅读需 2 分钟
以 Ubuntu 为例
安装 chrony
sudo apt update
sudo apt install -y chrony
配置文件
文件路径: /etc/chrony/chrony.conf
- pool: 配置上游时间源
- local: 开启“本地参考时钟”模式
- stratum:可信层级,值越低,可信度越高。只在 local 模式生效。取 值范围(1-15,默认 10)
local stratum表示即使当前没有上游同步源,也向客户端提供时间
- allow: 配置允许取时的网段
- makestep: 当系统时间偏差太大时,不再“慢慢校正”,而是直接把时间调到正确值
makestep 1.0 3表示如果时间偏差大于 1 秒,且在 chrony 启动后的前 3 次时钟更新,就会直接更新时间,否则采用平滑校时(每秒调整 0.083333s)makestep threshold limitlimit 为负数表示所有更新都允许直接更新。
- rtcsync: 定期将当前系统时间写入硬件实时时钟 RTC(Real-Time Clock).
联网授时服务器配置
# 上游时间源
pool ntp.aliyun.com iburst
pool time.cloudflare.com iburst
pool time.google.com iburst
makestep 1.0 3
rtcsync
allow 192.168.1.0/24
离线内网授时服务器
local stratum 10
makestep 1.0 3
rtcsync
allow 192.168.1.0/24
设置开机自启
sudo systemctl enable --now chronyd
防火墙放开 UDP 123 端口
firewall
sudo firewall-cmd --permanent --add-port=123/udp
sudo firewall-cmd --reload
ufw
sudo ufw allow 123/udp
验证
chronyc tracking
chronyc sources -v
ss -tunlp | grep "123"
在 Windows 上验证
w32tm /stripchart /computer:192.168.1.10 /samples:5 /dataonly
问题
1. chrony 已启动,但是没有监听 123 端口
通过 systemctl status chrony 查到 chrony 以启动。
ss -tunlp | grep 123 没有查询到监听 123 的进程。
原因:如果没有配置 allow 指令, chrony 是不会监听 UDP 123 端口的。
通过下面的命令来查询是否有配置 allow
grep -nE '^[[:space:]]*allow|^[[:space:]]*deny|^[[:space:]]*port' /etc/chrony/chrony.conf
2. 立即强制同步时间
chronyc makestep
3. chrony 向上游取时的具体过程
发包 -> 测量 -> 筛选 -> 选源 -> 校时
chrony 不是“从上游拿一个时间就直接设置本机”,而是“持续从多个上游拿样本,评估质量,排除坏源,选出最佳参考,再结合历史频率模型去校正本机时钟”