Debian

根據可用連接更改 NTP 伺服器

  • January 2, 2017

請參考插圖。

我在 LAN 上有兩台機器,其中只有一台有 Internet 連接(通過不同的介面)。伺服器 1 有一個垃圾硬體時鐘。伺服器 2 具有良好的硬體 RTC。

不幸的是,Server 1 通常有 Internet 連接,而硬體 RTC 好的那台則沒有,因此根據 Internet 連接狀態,Server 1 要麼是最準確的,要麼是高度不可靠的。

至關重要的是,兩台機器彼此保持密切同步。

是否有可能讓系統從場景 1 到場景 2 自動失敗,也許是通過對每台機器的層進行自動調整?

情景 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,使其連接到server2Internet,而不是 Internet 上的 Stratum 1 伺服器。

現在server2與網際網路上的低層伺服器同步,而不是與server1;並將與alwaysserver1同步,無需添加故障轉移設置(這充其量是脆弱的)。server2

由於額外的躍點,這會稍微降低準確性,但最好將本地網路上的機器同步到具有良好硬體 RTC 的機器,而不是與低質量的機器同步。

引用自:https://unix.stackexchange.com/questions/317820