NTP descentralizado em rede com conectividade à Internet apenas esporádica?

2

Eu tenho uma rede isolada (na maior parte do tempo) que consiste em vários computadores.

          computer 0 -- external NTP server
        / 
switch -- computer 1 -- external NTP server
        \  
          computer n -- external NTP server

Apenas um pequeno subconjunto das conexões no gráfico acima pode estar disponível a qualquer momento. Especialmente a conexão com um servidor NTP externo não estará disponível a maior parte do tempo.

Como posso usar o chrony para manter todos os computadores em sincronia sem funções explícitas de cliente / servidor?

Requisitos:

  1. A qualquer momento, apenas um subconjunto dos computadores pode estar ativo e em execução. Eles devem ser capazes de obter e permanecer em sincronia. Se outro computador for iniciado, ele também deverá ser sincronizado. O tempo absoluto não é importante (desde que o erro esteja na magnitude de alguns segundos / alguns minutos). O importante é que todos os computadores da rede estejam em sincronia.
  2. Esporadicamente, qualquer um dos computadores pode estar conectado à Internet e ser capaz de obter o tempo absoluto correto de um servidor NTP externo e distribuir esse tempo na rede local.

Pensei em configurar cada computador na rede com um servidor NTP externo (inicialmente marcado como offline) e listar todos os computadores como pares um do outro. Este é o caminho certo a seguir? Não consegui encontrar nenhuma informação sobre o que acontece se houver apenas pares NTP em uma rede sem um servidor NTP acessível. Os relógios convergirão para um momento razoável ou essa configuração poderá se tornar instável, de modo que o desvio geral seja ainda pior do que o pior desvio de hardware de um único computador na rede?

Editar:

Para sublinhar minha ideia de uma configuração de crono apropriada: A abordagem a seguir é uma boa ideia?

/etc/chrony/chrony.conf no computador 0:

pool external.ntp.pool offline
peer computer_1 computer_2 computer_n
local stratum 10

/etc/chrony/chrony.conf no computador 1:

pool external.ntp.pool offline
peer computer_0 computer_2 computer_n
local stratum 10

E assim por diante ...

    
por Bloops 20.11.2018 / 14:59

2 respostas

3

A solução mais simples e melhor (mas não menos dispendiosa) para o seu problema é configurar um pequeno dispositivo de relógio de rádio (GPS ou WWVB / shortwave) nessa rede. Faça com que os dispositivos usem isso como um servidor na configuração do NTP e, em seguida, peerem um com o outro para o fallback quando o dispositivo falhar.

Como um sinal de rádio de transmissão é unidirecional, isso atenderá aos seus requisitos de segurança para isolamento da rede.

Dispositivos GPS e WWVB que atuam como servidores NTP estão amplamente disponíveis em muitos pontos de preço.

Se a rede não puder receber sinais de rádio de qualquer maneira (submarino, bunker endurecido, etc.), essa solução não funcionará. Mas se esse é o seu cenário, você provavelmente tem dinheiro para instalar um padrão de frequência local de algum tipo.

    
por 20.11.2018 / 15:43
2
  1. Tente não fazer isso. Por sua resposta à resposta do @malmalter, o NTP não é um protocolo descentralizado. O tempo preciso depende dos servidores "centrais" (ou seja, de maior estrato) que fornecem tempo aos seus clientes. Você é muito melhor ter um sistema ligado o tempo todo, mantendo contato com fontes de tempo externas. Um BeagleBone, um Raspberry PI ou um sistema embarcado semelhante é uma maneira fácil e barata de fazer isso.
  2. A configuração que você sugeriu deve funcionar principalmente. Eu sugeriria algumas coisas:
    • Não use offline - a diretiva pool tentará automaticamente quando chronyd iniciar ou recuperar a conectividade de rede.
    • Adicione orphan à sua linha local - esse é o recurso NTP projetado especificamente para compensar seu cenário. Isso fará com que um dos pares seja eleito o mestre local quando a conectividade upstream não estiver disponível.
    • É inofensivo para um host ter seu próprio endereço em sua configuração como um par: chronyd irá ignorá-lo automaticamente. Essa é uma conveniência, o que significa que você pode enviar a mesma configuração para todos os hosts.
por 23.11.2018 / 08:27