跳到主要内容

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 limit limit 为负数表示所有更新都允许直接更新。
  • 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 不是“从上游拿一个时间就直接设置本机”,而是“持续从多个上游拿样本,评估质量,排除坏源,选出最佳参考,再结合历史频率模型去校正本机时钟”