答案1
首先,你极不可能被允许访问阶层1服务器,除非您为 Stratum 1 服务器管理员所知并且他们明确授予您这样做的权限。话虽如此,该服务器的层数对于这个答案并不重要,因此为了清楚起见,我将该机器称为“低层”服务器。
您应该配置server2
为从低层服务器获取时间,而不是从server1
.这将要求它能够(至少对于 NTP)访问 上的 Internet 链接server1
。如果server2
没有能够访问低层服务器的互联网链接,那么您可以通过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
前两行允许来自主机的 NTP 流量server2
仅有的。注意:我不能 100% 确定是否需要 TCP 连接,但这应该不会有什么坏处。您可能还想添加-d lowstratumserver
这两行,以便该计算机无法访问任何其他服务器(仅是低层服务器)。下一行允许从已建立的连接返回流量。第四行启用网络地址转换。最后一行启用 IP 数据包转发。有了这些,server1
现在就是一个(最小的)路由器。
如果server2
没有server1
默认路由器,您还需要为低层服务器添加显式路由:
ip route add lowstratumserver via server1
这样,server2
将用作server1
其网络连接的路由器lowstratumserver
,并用作其他一切的常规路由器。
然后,配置server2
使用Internet上的低层服务器作为其NTP源,而不是server1
。
最后,进行配置server1
,使其连接到server2
,而不是 Internet 上的 Stratum 1 服务器。
现在server2
与 Internet 上的低层服务器同步,而不是与server1
;并将始终server1
同步server2
,无需添加故障转移设置(这充其量也很脆弱)。
由于额外的跃点,这会稍微降低准确性,但将本地网络上的计算机同步到具有良好硬件 RTC 的计算机总是比与具有低质量 RTC 的计算机同步要好。