解决群晖 NTP 自动同步失败

前言

自从群晖(Synology)DSM 某个版本更新后,NTP 自动同步总是提示“无法同步。因为没有网络或网络连接不稳定。请参阅本文以了解详细信息”,而手动同步正常。群晖官方虽然提供了解决方案,但测试后并没有解决问题。通过与群晖技术支持交流,获得了较好的解决方案。

现象

NTP 无法正常自动同步,能够正常手动同步。

影响

本人开启了 DSM 的 TOTP (Time-based One-Time Password) 二次验证,TOTP 与设备时间紧密相关。当 NTP 无法正常同步时,群晖平均每一天慢若干秒,约一周后,群晖与其他设备的时间误差超出 TOTP 的容忍范围,直接导致 TOTP 无法正常验证。

原因

群晖技术支持给出了 NTP 的自动更新策略:

NAS 与 NTP 服务器进行轮询时,必须连续八次全部成功,才会认为该 NTP 服务器可信,从而显示自动更新成功,而您当前所处的网络环境似乎并不稳定,所以会导致轮询中出现失败。

解决

技术支持向我提供了 NTP 更新脚本,利用 DSM 自带的“任务计划”功能进行自动同步。

  • 新建“用户自定义脚本”;

  • 以“root”账户执行,并在“用户定义的脚本”下输入如下脚本(root 账户具有系统最高执行权限,除非你知道自己在做什么,否则请勿随意修改如下脚本);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

ntp_server=""

if grep -q "time.google.com.conf" "/etc/ntp.conf" ; then
ntp_server="time.google.com"
fi
if grep -q "pool.ntp.org" "/etc/ntp.conf" ; then
ntp_server="pool.ntp.org"
fi
if grep -q "server " "/etc/ntp.conf" ; then
ntp_server="$(grep "server " "/etc/ntp.conf" | cut -d " " -f2)"
fi
if [ "$ntp_server" != "" ] ; then
/sbin/ntpdate -u -b "$ntp_server"
echo $? > /run/ntpdate.result
fi

  • 手动运行并检查执行结果,如果提示正常,则部署成功。

环境

  1. Synology DS720+
  2. DSM 7.1-42661 Update 3