
Consulte a ilustração.
Tenho duas máquinas em uma LAN, apenas uma delas tem conexão com a Internet (através de uma interface diferente). O servidor 1 tem um relógio de hardware lixo. O servidor 2 possui um bom RTC de hardware.
Infelizmente, o Servidor 1 geralmente tem uma conexão com a Internet, enquanto aquele com um bom hardware RTC não, portanto, dependendo do status da conexão com a Internet, o Servidor 1 é o mais preciso ou altamente não confiável.
É fundamental que ambas as máquinas sejam mantidas em estreita sincronização entre si.
É possível fazer com que o sistema falhe automaticamente do Cenário 1 para o Cenário 2, talvez através de ajustes automatizados no estrato de cada máquina?
Responder1
Primeiro, é altamente improvável que você tenha permissão para acessar um Stratum1servidor, a menos que você seja conhecido pelos administradores do servidor Stratum 1 e eles tenham lhe dado permissão explícita para fazê-lo. Dito isto, qual é o estrato desse servidor não importa para esta resposta, então vou me referir a essa máquina como o servidor de "estrato baixo" para maior clareza.
Você deve configurar server2
para obter o horário do servidor de estrato inferior, não do server1
. Isso exigirá que ele seja capaz (pelo menos para NTP) de acessar o link da Internet no server1
. Se server2
não tiver um link com a Internet com o qual possa acessar o servidor de estrato inferior, você poderá permitir isso executando os seguintes comandos server1
(como 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
As duas primeiras linhas permitem o tráfego NTP do hostserver2
apenas. Nota: não tenho 100% de certeza de que conexões TCP sejam necessárias, mas não deve doer. Você também pode querer adicionar -d lowstratumserver
essas duas linhas, para que esta máquina não consiga acessar nenhum outro servidor (apenas o de estrato inferior). A próxima linha permite o tráfego de retorno das conexões estabelecidas. A quarta linha permite a tradução de endereços de rede. A linha final permite o encaminhamento de pacotes IP. Com estes, server1
agora é um roteador (mínimo).
Caso server2
não tenha server1
como roteador padrão, você também precisará adicionar uma rota explícita para o servidor de estrato inferior:
ip route add lowstratumserver via server1
Com isso, server2
usará server1
como roteador para conectividade de rede lowstratumserver
e como roteador regular para todo o resto.
Em seguida, configure server2
para usar o servidor de baixo estrato na Internet como fonte NTP, não server1
.
Finalmente, configure server1
para que ele se conecte ao server2
servidor Stratum 1 na Internet, e não ao servidor Stratum 1.
Agora server2
sincroniza com o servidor de estrato inferior na Internet, não com server1
; e server1
sincronizará server2
sempre, eliminando a necessidade de adicionar uma configuração de failover (que será, na melhor das hipóteses, frágil).
Isso fará com que você perca um pouco de precisão devido ao salto extra, mas é sempre melhor sincronizar as máquinas em sua rede local com uma máquina com um bom RTC de hardware, em vez de com uma máquina com um de baixa qualidade.