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