根據可用連接更改 NTP 伺服器
請參考插圖。
我在 LAN 上有兩台機器,其中只有一台有 Internet 連接(通過不同的介面)。伺服器 1 有一個垃圾硬體時鐘。伺服器 2 具有良好的硬體 RTC。
不幸的是,Server 1 通常有 Internet 連接,而硬體 RTC 好的那台則沒有,因此根據 Internet 連接狀態,Server 1 要麼是最準確的,要麼是高度不可靠的。
至關重要的是,兩台機器彼此保持密切同步。
是否有可能讓系統從場景 1 到場景 2 自動失敗,也許是通過對每台機器的層進行自動調整?
首先,您極不可能被允許訪問 Stratum 1伺服器,除非 Stratum 1 伺服器管理員認識您並且他們明確授予您這樣做的權限。話雖如此,該伺服器的層對於這個答案並不重要,因此為了清楚起見,我將該機器稱為“低層”伺服器。
您應該配置
server2
為從低層伺服器獲取時間,而不是從server1
. 這將要求它能夠(至少對於 NTP)能夠訪問server1
. 如果server2
沒有可以訪問底層伺服器的 Internet 連結,則可以通過在server1
(以 root 使用者身份)上執行以下命令來允許它執行此操作:iptables -A FORWARD -s server2 -p udp --dport 123 -j ACCEPT iptables -A FORWARD -s server2 -p tcp --dport 123 -j ACCEPT iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sysctl -w net.ipv4.ip_forward=1
server2
前兩行只允許來自主機的 NTP 流量。注意:我不能 100% 確定 TCP 連接是必需的,但它不應該受到傷害。您可能還想添加-d lowstratumserver
到這兩行,這樣這台機器就無法訪問任何其他伺服器(只是低層伺服器)。下一行允許從已建立的連接返回流量。第四行啟用網路地址轉換。最後一行啟用 IP 數據包轉發。有了這些,server1
現在是一個(最小的)路由器。如果
server2
沒有server1
作為其預設路由器,您還需要為低層伺服器添加顯式路由:ip route add lowstratumserver via server1
有了它,
server2
它將server1
用作其網路連接的路由器lowstratumserver
,以及其他一切的正常路由器。然後,配置
server2
為使用 Internet 上的低層伺服器作為其 NTP 源,而不是server1
.最後,進行配置
server1
,使其連接到server2
Internet,而不是 Internet 上的 Stratum 1 伺服器。現在
server2
與網際網路上的低層伺服器同步,而不是與server1
;並將與alwaysserver1
同步,無需添加故障轉移設置(這充其量是脆弱的)。server2
由於額外的躍點,這會稍微降低準確性,但最好將本地網路上的機器同步到具有良好硬體 RTC 的機器,而不是與低質量的機器同步。