openwrt中时间同步ntp使用

前言

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

作者:羽林君

转载授权以及围观:欢迎关注微信公众号:羽林君

或者添加作者个人微信:become_me


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守护进程)的命令,具体解释如下:

  1. /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服务器的回复,将会超时退出。
  1. -n:表示以前台方式运行,通常用于调试目的。

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

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

  4. -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守护进程)的命令,具体解释如下:

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

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

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

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

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

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

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

  8. -u:在后台运行进程。

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

  10. – /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关键词筛选
https://img-blog.csdnimg.cn/direct/d8ef3836b35b4e009231778a95d72bbf.png
client请求:

server回应:

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

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

结语

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


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

                              ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧  END  ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧

推荐阅读

【1】jetson nano开发使用的基础详细分享

【2】Linux开发coredump文件分析实战分享

【3】CPU中的程序是怎么运行起来的 必读

【4】cartographer环境建立以及建图测试

【5】设计模式之简单工厂模式、工厂模式、抽象工厂模式的对比

本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/539509.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java实现知乎热点小时榜爬虫

1.效果演示 1.1 热点问题列表 启动程序后&#xff0c;自动展示热点问题&#xff0c;并等待终端输入 1.2 根据序号选择想看的热点问题 输入问题序号&#xff0c;展示回答内容 1.3 退出 输入q即可退出程序 2.源码 2.1 pom.xml <?xml version"1.0" enco…

Frustum PointNets for 3D Object Detection from RGB-D Data(2018)

3D空间的几何和拓扑结构 直接在3D空间操作可以更自然的参数化以及捕捉 重复、平面、对称等几何结构 2. Related Work 3D Object Detection from RGB-D Data Front view image based methods&#xff08;只是介绍了一种表示方法&#xff09; Bird’s eye view based methods&a…

基于centos7的k8s最新版v1.29.2安装教程

k8s概述 Kubernetes 是一个可移植、可扩展的开源平台&#xff0c;用于管理容器化的工作负载和服务&#xff0c;可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态&#xff0c;其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语&…

gcc编译初探

记录gcc便编译遇到的问题和积累的经验 文章目录 一、 编译命令编译过程 第二章 遇到问题一、编译的动态库无法正常运行1&#xff09;设置环境变量 LD_LIBRARY_PATH2&#xff09;使用rpath将共享库位置嵌入到程序3&#xff09;将so共享库添加到系统路径 第三章 实用命令一、ldd查…

RN滚动选择组件react-native-wheel-picker-android

安装组件 yarn add react-native-wheel-picker-android我这里的版本为"react-native-wheel-picker-android": "^2.0.6", 示例代码 import { useState } from react import { View } from react-native import { WheelPicker } from react-native-wheel-…

字节飞书前端实习面试

属于是被字节狠狠地拷打了。面试官人很好&#xff0c;让人感觉有很沉稳的感觉。问了一大堆关于底层的问题&#xff0c;属于是把我整麻了。 项目部分问的不多&#xff0c;主要问的都是一些前端涉及的底层知识&#xff0c;层层递进。 1.vue3的响应式是如何实现的 2.computed和wat…

mysql事务(MVCC机制:undo日志)(mysql执行过程:redo日志,Buffer Pool缓存池)

事务 目的&#xff1a;保证数据的最终一致性## 事务的目的 事务的4大特性&#xff08;ACID&#xff09; 1.原子性(Atomicity):由undo log日志来保证 2.一致性(Consistency):使用事务的最终目的&#xff0c;由业务代码正确逻辑保证,比如错误的try-catch 3.隔离性(Isolation):…

Unreal发布Android在刘海屏手机上不能全屏显示问题

Unreal 4.27发布Android在刘海屏手机上不能全屏显示问题 Android设置全屏刘海屏全屏设置4.27设置刘海屏在部分手机不能显示问题 Android设置全屏 AndroidManifest.xml文件配置 ...<activity android:name"com.epicgames.ue4.GameActivity" android:label"st…

钉钉魔法盒:解锁企业数字化转型新密码

在数字化的浪潮中&#xff0c;一家公司在企业团队管理和商场综合运营中致力于实现数字化转型。于是&#xff0c;该公司在与无雀科技商讨后&#xff0c;决定引入钉钉平台&#xff0c;不仅要打造商业地产平台&#xff0c;更要优化团队管理流程&#xff0c;提升组织运营效率。 针对…

学习JAVA的二十二天(基础)

目录 网络编程 三要素&#xff1a; IP InetAddress类 端口号 协议 UDP协议 TCP协议 前言&#xff1a;学习JAVA的第二十一天&#xff08;基础&#xff09;-CSDN博客 网络编程 在网络通信协议下&#xff0c;不同计算机上运行的程序,进行的数据传输。 三要素&#xff1a;…

使用Python进行自然语言处理(NLP):NLTK与Spacy的比较【第133篇—NLTK与Spacy】

使用Python进行自然语言处理&#xff08;NLP&#xff09;&#xff1a;NLTK与Spacy的比较 自然语言处理&#xff08;NLP&#xff09;是人工智能领域的一个重要分支&#xff0c;它涉及到计算机如何理解、解释和生成人类语言。在Python中&#xff0c;有许多库可以用于NLP任务&…

ACM记忆化DFS与基于优先队列的BFS

基本概念--记忆化DFS 使用数组保存已经算出来的值&#xff0c;在后续的计算中减少大量的重复计算&#xff0c;提高效率。&#xff08;用于dp不方便&#xff0c;但是搜索方便的情况&#xff0c;可以提升效率。&#xff09; eg. 记忆化dfs求解斐波那契数列 int dfs(int n) {if…