作者:羽林君,轉(zhuǎn)載授權(quán)以及圍觀:歡迎關(guān)注微信公眾號:羽林君,或者添加作者個人微信:become_me
openwrt開發(fā)中,我們可能遇到這樣需求,使用路由器支持局域網(wǎng)內(nèi)設(shè)備ntp授時功能。
ntp是什么
NTP(Network Time Protocol,網(wǎng)絡(luò)時間協(xié)議)是由RFC 1305定義的時間同步協(xié)議,用來在分布式時間服務(wù)器和客戶端之間進行時間同步。NTP基于UDP報文進行傳輸,使用的UDP端口號為123。
使用NTP的目的是對網(wǎng)絡(luò)內(nèi)所有具有時鐘的設(shè)備進行時鐘同步,使網(wǎng)絡(luò)內(nèi)所有設(shè)備的時鐘保持一致,從而使設(shè)備能夠提供基于統(tǒng)一時間的多種應(yīng)用。
對于運行NTP的本地系統(tǒng),既可以接收來自其他時鐘源的同步,又可以作為時鐘源同步其他的時鐘,并且可以和其他設(shè)備互相同步。
關(guān)于NTP原理分析,有人寫的很詳細(xì),這里貼一個連接:https://www.cnblogs.com/lsgxeva/p/16587984.html
客戶端啟ntp服務(wù)器
我們可以在界面直接選中Enable NTP client,在下方填寫自己需要的ntp同步的網(wǎng)站(具體網(wǎng)址可以自行搜索),然后openwrt就會幫你啟動配置好網(wǎng)站的命令。
上面默認(rèn)123端口,當(dāng)然我們也可以在配置文件中指定NTP服務(wù)器的端口,在OpenWRT中,常見的NTP客戶端是"ntpd",其配置文件通常位于"/etc/ntp.conf"或"/etc/config/system"等位置:
server?1.openwrt.pool.ntp.org?iburst?port?123
在這個示例中,"port 123" 指定了NTP服務(wù)器的端口為123。請注意,大多數(shù)情況下,無需手動指定端口,因為NTP客戶端會默認(rèn)使用標(biāo)準(zhǔn)的UDP端口123與NTP服務(wù)器通信。一般情況下,默認(rèn)的UDP端口123對于NTP時間同步已經(jīng)足夠了。
下面是寫好了同步網(wǎng)站后openwrt啟動的命令,填寫NTP網(wǎng)站,大家把網(wǎng)站前面序號去掉
。
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系統(tǒng)中用于啟動ntpd(NTP守護進程)的命令,具體解釋如下:
/usr/sbin/ntpd
- :這是要執(zhí)行的程序,即NTP守護進程。
ntpd就是ntp daemon。是一個系統(tǒng)的后臺進程(system daemon),用來同步本地系統(tǒng)時鐘和遠(yuǎn)程NTP時間服務(wù)器的時間,或者其他參考時間源。
該程序?qū)崿F(xiàn)了全部的NTP4協(xié)議,并對版本3,2,1,進行了兼容。
的定義該程序可以工作在client/server模式,symmetric模式,broadcast模式。
ntpd通常需要一個配置文件/etc/ntp.conf,ntpd后面的選項和命令可以寫在該配置文件中。通常,ntpd啟動后會讀取ntp.conf文件。也可以在ntpd后面接相應(yīng)指令,讓ntpd不考慮該配置文件。
ntpd可以自動發(fā)現(xiàn)遠(yuǎn)程服務(wù)器并自動配置。
nptd通常連續(xù)工作,隔一段時間調(diào)整一次系統(tǒng)時間。也可以在調(diào)整完系統(tǒng)時間后自動退出,如果沒有收到NTP服務(wù)器的回復(fù),將會超時退出。
-n:表示以前臺方式運行,通常用于調(diào)試目的。
-N:表示不進行守護進程化,通常也是為了調(diào)試目的。
-S /usr/sbin/ntpd-hotplug:指定了一個腳本或程序,可能是在NTP時間同步發(fā)生變化時觸發(fā)的熱插拔腳本。
-p openwrt.pool.ntp.org -p openwrt.pool.ntp.org -p ntp1.aliyun.com:這些是指定的NTP服務(wù)器地址。"-p"參數(shù)后面跟著的是NTP服務(wù)器的地址,這里包括了openwrt官方的NTP服務(wù)器和阿里云的NTP服務(wù)器。
綜合來看,這個命令的作用是以前臺方式運行ntpd(NTP守護進程),不進行守護進程化,同時指定了一組NTP服務(wù)器地址用于時間同步,并且可能在時間同步發(fā)生變化時會觸發(fā)"/usr/sbin/ntpd-hotplug"腳本。
openwrt服務(wù)端開啟ntp服務(wù)器下發(fā)功能
選中provide NTP server
即可開啟路由器ntp服務(wù)器同步功能。
啟動openwrt的ntp服務(wù)器后,原生的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系統(tǒng)中用于啟動ntpd(NTP守護進程)的命令,具體解釋如下:
**{ntpd}**:一個占位符,用于指代命令名稱,實際上應(yīng)該替換為"ntpd"。
/sbin/ujail:這是一個命令,通常用于在OpenWRT系統(tǒng)中以受限制的環(huán)境中執(zhí)行其他程序。它提供了對OpenWRT的沙盒(sandboxing)支持,以增加系統(tǒng)安全性。
-t 5:這是ujail命令的選項之一,表示設(shè)置超時時間為5秒。
-n ntpd:指定要運行的程序名稱為"ntpd"。
-U ntp -G ntp:分別指定了新的進程用戶和組,這里將ntpd進程的用戶設(shè)置為"ntp",組也設(shè)置為"ntp"。
-C /etc/capabilities/ntpd.json:指定了一個JSON格式的文件,其中包含了ntpd進程的能力(capabilities)配置。
-c:表示創(chuàng)建一個新的控制終端。
-u:在后臺運行進程。
-r /bin/ubus -r /usr/bin/env -r /usr/bin/jshn -r /usr/sbin/ntpd-hotplug -r /usr/share/libubox/jshn.sh:這些都是指定了要在沙盒環(huán)境中可用的程序或腳本。
-- /usr/sbin/ntpd -n -N:最后部分是實際要執(zhí)行的命令,包括路徑和參數(shù)。這里運行了"/usr/sbin/ntpd"命令,帶有"-n"和"-N"參數(shù)。
這個命令的作用是以沙盒環(huán)境中以"ntp"用戶和組的身份運行ntpd(NTP守護進程),并且使用指定的能力配置文件以及相關(guān)的必要程序和腳本。
簡單示例
上面稍微詳細(xì)介紹了使用,這里我們直接命令簡單執(zhí)行一下,進行NTP同步。服務(wù)端:
/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協(xié)議抓?。?/strong>使用wireshark 抓取,用ntp關(guān)鍵詞篩選
client請求:
server回應(yīng):
wireshark抓包分析可以參考這篇:https://blog.csdn.net/chen1415886044/article/details/112549133
實際執(zhí)行:大家可以下面看到設(shè)備的date查詢中時間更新了:
結(jié)語
這就是我自己在openwrt使用ntp的記錄。如果大家有更好的想法,也歡迎大家加我好友交流分享哈。
作者:良知猶存,白天努力工作,晚上原創(chuàng)公號號主。公眾號內(nèi)容除了技術(shù)還有些人生感悟,一個認(rèn)真輸出內(nèi)容的職場老司機,也是一個技術(shù)之外豐富生活的人,攝影、音樂 and 籃球。關(guān)注我,與我一起同行。