欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

华硕ASUS RT-AC66U无线路由器部署NTP Server最佳实践

程序员文章站 2022-06-13 11:46:01
...

作为《局域网内所有设备时间一致性方法探究》一文的延续,今天我来尝试在华硕ASUS RT-AC66U无线路由器(以后简称为“路由器”)上来部署NTP Server。

相关软硬件

  • 硬件:华硕ASUS RT-AC66U (非B1) 一台
  • 固件:Asus-Merlin 380.70,下载地址(MD5:bdf27327a7ce336ae310835f635e8ffc)
  • ntp.conf: 下载地址
  • service-start: 下载地址
  • SSH客户端:顺手就行

路由器升级

如图所示,直接通过界面完成。
华硕ASUS RT-AC66U无线路由器部署NTP Server最佳实践

JFFS、SSH和NTP相关设置

升级完成后,对JFFS、SSH和NTP相关功能进行参数配置,即开启JFFS用户脚本和配置,开启局域网内的SSH功能和配置互联网NTP服务器地址,如下图所示:
华硕ASUS RT-AC66U无线路由器部署NTP Server最佳实践

建立ntp.conf配置文件

使用SSH客户端访问路由器:

  • 在jffs目录下建立ntp子目录
  • 在ntp目录中建立ntp.conf配置文件,可参考或直接使用前面共享的文件。
server 0.cn.pool.ntp.org iburst
server 1.cn.pool.ntp.org iburst
server 2.cn.pool.ntp.org iburst
server 3.cn.pool.ntp.org iburst

完成后的目录结构是:/jffs/ntp/ntp.conf

建立services-start脚本

路由器系统ntp服务只能识别内存中/etc目录中的ntp.conf文件,因此每次路由器重启后需要将/jffs/ntp/ntp.conf文件重新复制到/etc目录中。建立脚本的目的就是要自动完成这个步骤。
参考文档是利用post-mount来实现,但在380.70固件下,通过测试post-mount,service-start和wan-event三个脚本,发现只有service-start脚本在系统重启后能够正常调用,因此,最终使用services-start脚本。可参考或直接使用前面共享的文件。
注意:脚本执行前,需要执行以下命令:

chmod a+rx /jffs/scripts/*

以下为脚本内容:

#!/bin/sh
#脚本执行验证,用于判断系统重启后脚本是否执行,验证完成后屏蔽
#DATE=$(date +"%Y-%m-%d-%H%M%S")
#mkdir -p /tmp/logs
#touch /tmp/logs/$DATE-services-start
#开始检测ntp服务状态
retry=1
while [ "$(nvram get ntp_ready)" == "0" ] && [ "$retry" -lt "300" ]; do
  retry=$((retry+1))
  sleep 1
done
# Only start the NTP server if router has itself synchronised with Internet
cp /jffs/ntp/ntp.conf /etc/
logger -st "($(basename $0))" $$ "***SUCCESS Router copied ntp.conf-file to /etc!"
ntpd   -l
logger -st "($(basename $0))" $$ "***SUCCESS Router initialized NTP Server!"

完成后的目录结构是:jffs/scripts/services-start

验证

重启路由器后,将局域网内的其他设备的ntp地址指向路由器地址,并手动执行时间同步操作,如提示同步失败,需进一步检查上述步骤和脚本是否正确操作和执行。
自此,华硕ASUS RT-AC66U无线路由器成为局域网内的NTP服务器,只需确保其同互联网的NTP服务时间同步,就能保证局域网内的所有设备的时间一致。

参考资料

-Setting up an NTP Server for your local lan
-User scripts
-jffs/scripts/services-start not executed after reboot

相关标签: 最佳实践