Chrony 是一个实现网络时间协议的软件包, 用于同步计算机的系统时间与世界各地的 NTP 服务器. Chrony 能够更好地适应高延迟和不稳定的网络环境, 能够以快速和高效的方式调整系统时间.
Chrony 可以提供保持系统时间与 NTP 时钟服务器同步的服务, 还能作为 NTP 服务器对其他服务器提供时间同步服务.
相较于NTP, Chrony具有更高的同步精度, 更强的稳定性.
安装 chrony
sudo apt update -y
sudo apt install chrony -y
sudo systemctl enable chrony --now # 启动服务
# sudo systemctl status chrony # 查看服务状态
配置 chrony
# cat /etc/chrony/chrony.conf # 默认的配置文件
# 添加同步源 (国内机 用阿里云/腾讯云 的NTP服务器)
sudo tee /etc/chrony/sources.d/custom.sources<< EOF
server ntp.tencent.com iburst prefer
server ntp.aliyun.com iburst prefer
EOF
# 国外机用CF/Google的同步源(也可以保持默认配置, 一般会自动优选)
# sudo tee /etc/chrony/sources.d/custom.sources<< EOF
# server time.cloudflare.com iburst prefer
# server time.google.com iburst prefer
# EOF
# 重新加载配置
sudo chronyc reload sources
# 检查配置文件语法
sudo chronyc dump
# 重启服务
sudo systemctl restart chrony
# 查看同步源
chronyc sources
# 检查同步源状态
chronyc sources -v
# 强制同步时间
sudo chronyc makestep
# 检查同步状态
chronyc tracking # 正常是 (Leap status: Normal), 异常是 (Leap status: Not synchronized)
开启 NTP 服务器 (可选, 允许其他机器把本机作为 NTP 服务器)
allow all
是允许所有主机同步时间; allow xxx.xxx.xxx.xxx/xx
是允许指定网段同步时间
# 允许ntp客户端访问
sudo tee /etc/chrony/conf.d/allow.conf << EOF
allow all
# allow 192.168.0.0/16
# allow 10.17.0.0/16
EOF
# 重启服务
# sudo systemctl restart chrony
# sudo netstat -unlp | grep 123 # 查看 NTP 端口(123)是否启用
Windows 利用 自建 NTP 服务器 同步时间
场景: 自建 NTP 服务器, 假设为 192.168.1.100, 解决一些特殊场景(比如 内网NTP时间同步 等)
# 管理员权限在 powershell 里执行
$NTP_SERVER = "192.168.1.100"
w32tm /stripchart /computer:$NTP_SERVER /dataonly /samples:1 # 测试 NTP 服务器
w32tm /config /syncfromflags:manual /manualpeerlist:$NTP_SERVER /update # 配置 NTP 服务器
w32tm /resync /force # 强制同步时间
w32tm /query /status # 查看时间同步状态
w32tm /query /peers # 查看时间同步源
同步更准确时间的用途:
- 2FA(双因素身份验证)工具, 生成的验证码是基于时间的, 如果时间不准确, 就可能生成错误的验证码.
比如, 系统时间误差>30秒, 2FA工具 计算的验证码就是错误的.
注:
- 如果
chronyc tracking
同步异常
编辑/etc/chrony/chrony.conf
文件, 注释掉默认的pool xx.xx.xx.xx iburst
规则.
然后重启服务后, 再检查chronyc tracking
是否正常.