Alterando o servidor NTP com base nas conexões disponíveis

Alterando o servidor NTP com base nas conexões disponíveis

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?

Cenário 1 vs Cenário 2

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 server2para 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 server2nã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 lowstratumserveressas 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, server1agora é um roteador (mínimo).

Caso server2não tenha server1como 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, server2usará server1como roteador para conectividade de rede lowstratumservere como roteador regular para todo o resto.

Em seguida, configure server2para usar o servidor de baixo estrato na Internet como fonte NTP, não server1.

Finalmente, configure server1para que ele se conecte ao server2servidor Stratum 1 na Internet, e não ao servidor Stratum 1.

Agora server2sincroniza com o servidor de estrato inferior na Internet, não com server1; e server1sincronizará server2sempre, 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.

informação relacionada