加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • ntp是什么
    • 客户端启ntp服务器
    • openwrt服务端开启ntp服务器下发功能
    • 简单示例
    • 结语
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

openwrt中时间同步ntp使用

03/15 11:20
2851
阅读需 11 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

作者:羽林君,转载授权以及围观:欢迎关注微信公众号:羽林君,或者添加作者个人微信:become_me

openwrt开发中,我们可能遇到这样需求,使用路由器支持局域网内设备ntp授时功能。

ntp是什么

NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服务器和客户端之间进行时间同步。NTP基于UDP报文进行传输,使用的UDP端口号为123。

使用NTP的目的是对网络内所有具有时钟的设备进行时钟同步,使网络内所有设备的时钟保持一致,从而使设备能够提供基于统一时间的多种应用。

对于运行NTP的本地系统,既可以接收来自其他时钟源的同步,又可以作为时钟源同步其他的时钟,并且可以和其他设备互相同步。

关于NTP原理分析,有人写的很详细,这里贴一个连接:https://www.cnblogs.com/lsgxeva/p/16587984.html

客户端启ntp服务器

我们可以在界面直接选中Enable NTP client,在下方填写自己需要的ntp同步的网站(具体网址可以自行搜索),然后openwrt就会帮你启动配置好网站的命令。

上面默认123端口,当然我们也可以在配置文件中指定NTP服务器的端口,在OpenWRT中,常见的NTP客户端是"ntpd",其配置文件通常位于"/etc/ntp.conf"或"/etc/config/system"等位置:

server 1.openwrt.pool.ntp.org iburst port 123

在这个示例中,"port 123" 指定了NTP服务器的端口为123。请注意,大多数情况下,无需手动指定端口,因为NTP客户端会默认使用标准的UDP端口123与NTP服务器通信。一般情况下,默认的UDP端口123对于NTP时间同步已经足够了。

下面是写好了同步网站后openwrt启动的命令,填写NTP网站,大家把网站前面序号去掉

r/sbin/ntpd -n -N -S /usr/sbin/ntpd-hotplug -p openwrt.pool.ntp.org -p openwrt.pool.ntp.org -p openwrt.pool.ntp.org -p tp1.aliyun.com 

这个命令是在OpenWRT系统中用于启动ntpd(NTP守护进程)的命令,具体解释如下:

/usr/sbin/ntpd

    :这是要执行的程序,即NTP守护进程。
ntpd就是ntp daemon。是一个系统的后台进程(system daemon),用来同步本地系统时钟和远程NTP时间服务器的时间,或者其他参考时间源。
该程序实现了全部的NTP4协议,并对版本3,2,1,进行了兼容。
的定义该程序可以工作在client/server模式,symmetric模式,broadcast模式。
ntpd通常需要一个配置文件/etc/ntp.conf,ntpd后面的选项和命令可以写在该配置文件中。通常,ntpd启动后会读取ntp.conf文件。也可以在ntpd后面接相应指令,让ntpd不考虑该配置文件。
ntpd可以自动发现远程服务器并自动配置。
nptd通常连续工作,隔一段时间调整一次系统时间。也可以在调整完系统时间后自动退出,如果没有收到NTP服务器的回复,将会超时退出。

-n:表示以前台方式运行,通常用于调试目的。

-N:表示不进行守护进程化,通常也是为了调试目的。

-S /usr/sbin/ntpd-hotplug:指定了一个脚本或程序,可能是在NTP时间同步发生变化时触发的热插拔脚本。

-p openwrt.pool.ntp.org -p openwrt.pool.ntp.org -p ntp1.aliyun.com:这些是指定的NTP服务器地址。"-p"参数后面跟着的是NTP服务器的地址,这里包括了openwrt官方的NTP服务器和阿里云的NTP服务器。

综合来看,这个命令的作用是以前台方式运行ntpd(NTP守护进程),不进行守护进程化,同时指定了一组NTP服务器地址用于时间同步,并且可能在时间同步发生变化时会触发"/usr/sbin/ntpd-hotplug"脚本。

openwrt服务端开启ntp服务器下发功能

选中provide NTP server即可开启路由器ntp服务器同步功能。

启动openwrt的ntp服务器后,原生的openwrt会帮你启动这样命令:

{ntpd} /sbin/ujail -t 5 -n ntpd -U ntp -G ntp -C /etc/capabilities/ntpd.json -c -u -r /bin/ubus -r /usr/bin/env -r /usr/bin/jshn -r /usr/sbin/ntpd-hotplug -r /usr/share/libubox/jshn.sh -- /usr/sbin/ntpd -n -N 

这个命令是在OpenWRT系统中用于启动ntpd(NTP守护进程)的命令,具体解释如下:

**{ntpd}**:一个占位符,用于指代命令名称,实际上应该替换为"ntpd"。

/sbin/ujail:这是一个命令,通常用于在OpenWRT系统中以受限制的环境中执行其他程序。它提供了对OpenWRT的沙盒(sandboxing)支持,以增加系统安全性。

-t 5:这是ujail命令的选项之一,表示设置超时时间为5秒。

-n ntpd:指定要运行的程序名称为"ntpd"。

-U ntp -G ntp:分别指定了新的进程用户和组,这里将ntpd进程的用户设置为"ntp",组也设置为"ntp"。

-C /etc/capabilities/ntpd.json:指定了一个JSON格式的文件,其中包含了ntpd进程的能力(capabilities)配置。

-c:表示创建一个新的控制终端。

-u:在后台运行进程。

-r /bin/ubus -r /usr/bin/env -r /usr/bin/jshn -r /usr/sbin/ntpd-hotplug -r /usr/share/libubox/jshn.sh:这些都是指定了要在沙盒环境中可用的程序或脚本。

-- /usr/sbin/ntpd -n -N:最后部分是实际要执行的命令,包括路径和参数。这里运行了"/usr/sbin/ntpd"命令,带有"-n"和"-N"参数。

这个命令的作用是以沙盒环境中以"ntp"用户和组的身份运行ntpd(NTP守护进程),并且使用指定的能力配置文件以及相关的必要程序和脚本。

简单示例

上面稍微详细介绍了使用,这里我们直接命令简单执行一下,进行NTP同步。服务端:

/usr/sbin/ntpd -n -N -l -S /usr/sbin/ntpd-hotplug -p ntp1.aliyun.com -p ntp2.aliyun.com -p ntp.tencent.com -p ntp1.tencent.com -p time.windows.com

客户端:

ntpd -n -N  -p 192.168.1.1

我的openwrt路由器ip为192.168.1.1协议抓取:使用wireshark 抓取,用ntp关键词筛选

client请求:

server回应:

wireshark抓包分析可以参考这篇:https://blog.csdn.net/chen1415886044/article/details/112549133

实际执行:大家可以下面看到设备的date查询中时间更新了:

结语

这就是我自己在openwrt使用ntp的记录。如果大家有更好的想法,也欢迎大家加我好友交流分享哈。

作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
KSZ8081MNXIA-TR 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, QCC32

ECAD模型

下载ECAD模型
$1.71 查看
SIT1533AI-H4-DCC-32.768D 1 SiTime Corporation LVCMOS Output Clock Oscillator,

ECAD模型

下载ECAD模型
$2.84 查看
ABLS2-4.000MHZ-D4Y-T 1 Abracon Corporation CRYSTAL 4.0000MHZ 18PF SMD

ECAD模型

下载ECAD模型
$0.26 查看

相关推荐

电子产业图谱

一个程序员,喜欢写文章,还喜欢打篮球,也喜欢吉他钢琴的驳杂之人。日常更新自己,分享包括但不限于C/C++、嵌入式、物联网、Linux等编程学习笔记,同时,公众号内包含大量的学习资源。欢迎关注,一同交流学习,共同进步!