Ntp
NTPd 多播設置
我需要設置一個 ntp 多播客戶端。為了能夠檢查我的配置是否良好,我嘗試設置一個 NTP 多播伺服器。
我的設置:
- Centos 7 的 2 個 VM,最新
- 我在 virtualbox 中使用 2 個虛擬機,我都設置了 promicius 模式:允許所有
我的問題是:
- 在伺服器上,組播表項上報為第 16 層;層與多播相關嗎?客戶會因為階層低而拒絕這個嗎?如何強制多播伺服器使用較低的層?
- 我的客戶似乎看不到我的伺服器,即使我的密鑰文件相同並且我在雙方都信任密鑰 1。
使用孤兒指令,它似乎並沒有降低多播地址的報告層數:
ntpq -n -p remote refid st t when poll reach delay offset jitter ============================================================================== *192.165.10.2 192.165.10.109 4 u 14 64 377 0.454 2.267 1.479 224.0.1.1 .MCST. 16 u - 64 0 0.000 0.000 0.000
而且我的客戶端似乎仍然無法在 224.0.1.1 地址上找到伺服器。
我檢查了伺服器 vm、我的主機和客戶端 vm,它們都看到了伺服器多播消息(對於 vm:使用 tcpdump,對於主機:使用 wireshark)。
在客戶端,使用
ntpq -n -p
將返回:No association ID's returned
在客戶端上,我的配置文件都註釋了所有限制指令,而我只有這些(還有一些更像是driftfile 等):
multicastclient 224.0.1.1 keys /etc/ntp/keys trustedkey 1
ntpd 客戶端日誌給了我這個:
systemd[1]: Starting Network Time Service... ntpd[11076]: ntpd 4.2.6p5@1.2349-o Tue Jun 23 15:38:18 UTC 2020 (1) systemd[1]: Started Network Time Service. ntpd[11077]: proto: precision = 0.052 usec ntpd[11077]: 0.0.0.0 c01d 0d kern kernel time sync enabled ntpd[11077]: ntp_io: estimated max descriptors: 1024, initial socket boundary: 16 ntpd[11077]: Listen and drop on 0 v4wildcard 0.0.0.0 UDP 123 ntpd[11077]: Listen and drop on 1 v6wildcard :: UDP 123 ntpd[11077]: Listen normally on 2 lo 127.0.0.1 UDP 123 ntpd[11077]: Listen normally on 3 enp0s3 192.165.10.107 UDP 123 ntpd[11077]: Listen normally on 4 lo ::1 UDP 123 ntpd[11077]: Listen normally on 5 enp0s3 fe80::a00:27ff:fec1:cc1 UDP 123 ntpd[11077]: Listening on routing socket on fd #22 for interface updates ntpd[11077]: Listen normally on 6 multicast 224.0.1.1 UDP 123 ntpd[11077]: Joined 224.0.1.1 socket to multicast group 224.0.1.1 ntpd[11077]: 0.0.0.0 c016 06 restart ntpd[11077]: 0.0.0.0 c012 02 freq_set kernel 0.000 PPM ntpd[11077]: 0.0.0.0 c011 01 freq_not_set ntpd[11077]: io_setbclient: Opened broadcast client on interface #3 enp0s3
Stratum 16 表示 NTP 伺服器不相信它有一個有效的時間,因為它沒有連接到任何配置的時間源。為了使
ntpd
伺服器系統信任系統的本地時鐘作為時間源,有兩種選擇:
- 現代方法是在多播伺服器上的文件中指定
tos orphan
和tos orphanwait
關鍵字。ntp.conf
# If orphaned, serve others with this stratum. tos orphan 8 # Wait for this many seconds before starting to serve others (default is 300 s) tos orphanwait 1
- 較舊的方法是告訴
ntpd
使用本地時鐘作為多播伺服器上的虛假時間源。此配置不應與真實 NTP 時間源一起使用,因為它可能會導致ntpd
相信本地時鐘而不是真實 NTP 源,除非已配置足夠數量的外部源並且彼此之間足夠同步以輸出- 投票 127.127.1.0 偽源(它總是與本地時鐘完全一致,因此它往往會受到ntpd
選擇算法的過度青睞)。server 127.127.1.0 iburst fudge 127.127.1.0 stratum 8
以 開頭的 IP 地址
127.127.*
是特殊的ntpd
:它們指的是內置的各種參考時鐘驅動程序ntpd
。這兩種方法都將使系統基於本地未同步系統時鐘使用第 8 層在 NTP 上提供 UTC 時間,因此任何與真實 NTP 時間源(= 層 7 或更少)有合理直接連接的系統都應該更喜歡它這個。
只要您的版本
ntpd
支持它,就建議使用更新的方法,因為如果/當您向系統添加真正的 NTP 時間源時,您不必記住刪除偽源。