Servidor NTP único em rede isolada

8

Eu tenho duas máquinas Linux (A e B) em uma rede isolada. Eles devem estar sincronizados com o horário. A máquina A é alimentada intermitentemente e deve atender às horas, pois está conectada a uma fonte de tempo autorizada (GPS). A máquina B é energizada apenas se a máquina A estiver ligada, mas é um dispositivo linux incorporado e seu estado de energia muda com freqüência. Nenhuma máquina tem acesso a outros sistemas. É uma rede fechada.

Entendo que essa é uma tarefa bastante difícil para o NTP, pois o NTP normalmente espera ter contato com vários servidores. Estou tendo problemas para que isso funcione corretamente na Máquina B. A máquina A sincroniza perfeitamente com o GPS, e a máquina B pode alcançar a máquina A e até fazer consultas de tempo, mas a máquina A não é confiável (talvez por si só?). Depois de uma hora sólida de máquina A em funcionamento, isso mudou repentinamente e a máquina B funcionou. No entanto, quando a máquina A caiu (e, portanto, a máquina B), a máquina B novamente não consegue encontrar uma boa sincronização de tempo.

Aqui estão algumas informações sobre o ntpdate. Observe que, mesmo quando o estrato da máquina A é 1, a operação falha com a mesma saída no final.

10.10.10.1: Servidor descartado: estratos muito altos
servidor 10.10.10.1, porta 123
estrato 16, precisão -19, salto 11, confiança 000
refid [10.10.10.1], atraso 0,02614, dispersão 0,00000
transmitido 4, no filtro 4
tempo de referência: 00000000.00000000 qui, 7 de fevereiro de 2036 6: 28: 16.000
carimbo de data e hora de origem: d3a9bdc4.27ebb350 qui, 12 de julho de 2012 21: 19: 00.155
carimbo de data / hora de transmissão: bc17c803.b42dfffe sáb, 1 de janeiro de 2000 0: 25: 39.703
atraso do filtro: 0,02625 0,02614 0,02618 0,02625 
         0,00000 0,00000 0,00000 0,00000 
deslocamento do filtro: 39544160 39544160 39544160 39544160
         0,000000 0,000000 0,000000 0,000000
atraso 0,02614, dispersão 0,00000
deslocamento 395441600.451568

 1 Jan 00:25:39 ntpdate [677]: nenhum servidor adequado para sincronização encontrado

Meu palpite é que a máquina A simplesmente não confia em si mesma para cumprir as horas. Após 51 minutos (pode ter acontecido anteriormente, não sei) de tempo de atividade e com o relógio sincronizado com o GPS, a máquina A começou a servir corretamente a hora e a máquina B a pegou. Eu preciso que isso aconteça mais cedo. Em segundos, se possível.

Com as seguintes configurações (e muita espera), ele acaba sendo bem-sucedido.

Máquina A ntp.conf:

servidor 127.127.28.0 prefere verdadeiro minpoll 4 maxpoll 4
fudge 127.127.28.0 estrato 1 vez1 0.420 refid GPS 

Máquina B ntp.conf:

servidor 10.10.10.1 prefere minpoll verdadeiro 4 maxpoll 4

ntpq -c pares na Máquina B sem correção de tempo:

     refid remoto st t quando o alcance da pesquisa atrasa o jitter de deslocamento
==================================================== ============================
 10.10.10.1. STEP. 16 u 9 16 0 0,000 0,000 0,000

pares ntp1 -c na máquina B com boa correção de tempo:

     refid remoto st t quando o alcance da pesquisa atrasa o jitter de deslocamento
==================================================== ============================
* 10.10.10.1 SHM (0) 2 u 7 16 17 0,669 2,597 1,808

Então, agora a pergunta se torna: como faço para que a Máquina A confie em si mesma rapidamente?

Algumas saídas de depuração da Máquina A antes e depois da máquina B decidem que a Máquina A é boa o suficiente para usar.

antes..

~ # ntpq -c rv
associd = 0 status = c418 leap_alarm, sync_uhf_radio, 1 evento, no_sys_peer,
version = "ntpd [email protected] sexta-feira, 24 de fevereiro 15:01:45 UTC 2012 (1)",
processador = "armv7l", sistema = "Linux / 2.6.35.14", salto = 11, estrato = 2,
precisão = -19, atraso na raiz = 0,000, descoberta de raiz = 44,537, refid = SHM (0),
reftime = d3ab0053.43b44780 sexta-feira, 13 de julho de 2012 20: 15: 15.264,
clock = d3ab0062.e7e03154 sexta-feira, 13 de julho de 2012 20: 15: 30.905, ponto = 34819, tc = 4,
mintc = 3, deslocamento = 0,000, frequência = 0,000, sys_jitter = 3,853,
clk_jitter = 36.492, clk_wander = 0.000

depois de...

~ # ntpq -c rv
associd = 0 status = 0415 leap_none, sync_uhf_radio, 1 evento, clock_sync,
version = "ntpd [email protected] sexta-feira, 24 de fevereiro 15:01:45 UTC 2012 (1)",
processador = "armv7l", sistema = "Linux / 2.6.35.14", salto = 00, estrato = 2,
precisão = -19, rootdelay = 0,000, rootdisp = 41,278, refid = SHM (0),
reftime = d3ab0063.43b37856 sexta-feira, 13 de julho de 2012 20: 15: 31.264,
clock = d3ab006d.9ee53ec2 sexta-feira, 13 de julho de 2012 20: 15: 41.620, ponto = 34819, tc = 4,
mintc = 3, deslocamento = 0,000, frequência = 43,896, sys_jitter = 0,762,
clk_jitter = 36.953, clk_wander = 0.000
San Jacinto
fonte
1
Podemos ver os ntp.confarquivos e a saída de ntpq -pquando a máquina B NÃO está se divertindo muito com a máquina A? Pode ser a marcação da máquina A como um código falso ou algo assim. Quando a máquina B não confia na máquina A, a máquina A está sincronizada com o GPS? (Saída ntpstatna máquina A.)
Aaron Copley
Ouvi dizer que o chrony é mais adequado para esta aplicação. "Se o seu computador se conectar à rede por 5 minutos uma vez por dia (ou algo parecido), ou você desligar o computador (Linux v2.0) quando não estiver em uso ou desejar usar o NTP em um rede isolada sem relógios de hardware à vista, o chrony funcionará muito melhor para você. "
David Schwartz
@AaronCopley Posso publicá-las em algumas (10 ou 12) horas. A máquina A fica sincronizada com o GPS dentro de um minuto após a inicialização. A máquina B tem problemas para sincronizar com a máquina A por um longo período de tempo.
San Jacinto
@DavidSchwartz Thanks. Vou dar uma olhada, mas estou um pouco relutante em mudar muito além das configurações, se eu puder ajudar. É uma tarefa difícil construir qualquer coisa para a Máquina B no momento.
San Jacinto
@AaronCopley Atualizado.
San Jacinto

Respostas:

8

NTP deve funcionar bem. Veja algumas das opções para sincronização rápida na inicialização. Veja as opções burste iburstpara o sistema B. Veja a trueopção para a fonte do relógio GPS.

Considere usar o relógio do hardware como uma fonte de tempo de backup nos dois sistemas. Defina um sistema de estrato mais alto B. Algo como o seguinte deve funcionar:

server  127.127.1.0
fudge   127.127.1.0 stratum 8

Assista à saída de ntpq -c peerspara ver quando você obtém uma fonte de relógio confiável. Normalmente, ntpdeseja um número de respostas de uma fonte de tempo confiável antes de confiar nela. Isso é indicado pelo primeiro caractere em cada linha.

Enquanto o NTP gosta de mais fontes, qualquer número ímpar de fontes de tempo em um nível de estrato deve funcionar bem. Como você possui apenas dois servidores e um relógio GPS, a prioridade (estrato) das fontes deve aumentar em relação ao GPS, relógio no servidor A, relógio no servidor B. O aumento do estrato entre cada um em três ou quatro níveis garantirá que as prioridades sejam respeitadas.

EDIT: Se você tiver o servidor NTP do busybox no servidor A, pode valer a pena instalar o pacote completo do servidor ntp. Compreender o que está acontecendo com o servidor A deve percorrer um longo caminho para resolver seu problema. Você precisará de pelo menos uma fonte de tempo confiável para que o servidor B confie nela. Se ntpq -c peersnão funcionar, você pode tentar ntpdc peers. Ambos os comandos permitem consultar outros hosts. Um peerstatslog também pode ser útil.

No servidor B, use ntpclient como documentado, o busybox ntp howto para registrar o que está acontecendo nele

Os relógios devem estar razoavelmente próximos do tempo correto se os servidores não estiverem inativos por muito tempo. Se você precisar sincronizar os dois sistemas, isso deve ser suficiente. O GPS sincronizará o tempo com o mundo real.

'ntpd -q' sincroniza rapidamente, mas sai (comportamento do ntpdate). Ele precisa ser seguido por um ntpdcomando sem a opção quit para ter sincronização contínua.

EDIT2: Verifico meu servidor e descobri que um dos servidores estava desativado por um segundo. Enquanto consertava isso, brinquei com as configurações. iburstobtém um servidor confiável muito rapidamente. truegarantiu que o driver do relógio fosse confiável se não houvesse várias outras fontes confiáveis. O relógio levou um pouco mais de um minuto antes de ser confiável localmente e poder ser confiável remotamente.

Ao testar, você poderá reiniciar o ntpdprocesso depois que ele estiver sincronizado e testar a rapidez com que as configurações funcionam. No caso acima, o servidor B pode precisar ser reiniciado para testar a rapidez com que sincroniza. Ao monitorar ntpdalterações, uso uma linha como:

while ntpq -c peers localhost; do sleep 10; done

O nome do host e o tempo de suspensão são ajustados conforme necessário. Em alguns casos, encadeio duas ou mais ntpqlinhas de comando no loop. Ao fazer isso, uso um comando de eco e / ou data para fornecer uma indicação de onde os conjuntos de dados são alterados.

BillThor
fonte
A adição de burst ao arquivo conf não melhorou a situação. Cada uma dessas máquinas é uma máquina de ocupado, e a opção "-c" é desconhecida para o ntpq. Além disso, os relógios não podem ser confiáveis ​​nesses dispositivos até que sejam sincronizados com o GPS. Apenas uma limitação dos sistemas. Obrigado.
San Jacinto
Na verdade, cometi um pequeno erro, já tinha a versão completa do ntpd em execução na Máquina A. A máquina B é a única executando a versão do BusyBox (e se eu tivesse uma maneira de criar programas para isso, faria o mesmo lá ) Eventualmente, tudo funciona. Eu acho que é um grave problema de confiança. Você poderia dar uma ideia das minhas edições? Obrigado.
San Jacinto
Além disso, se você tiver a chance de editar sua resposta novamente, poderia me @ para que o sistema me notifique? Obrigado.
San Jacinto
@ SanJacinto Adicionei uma segunda edição com resultados do meu sistema. Eu não tenho o cliente busybox ntpd, então não posso garantir os resultados com ele. Gostaria de tentar adicionar ambos truee iburstpara o servidor B.
BillThor
+1 de mim por seu esforço, mas não está resolvendo meu problema. Uma solução que encontrei (e, por favor, sugira outra coisa, se você quiser, e eu tentarei) é matar o ntpd na máquina A depois de sincronizar com o GPS e depois reiniciá-lo. Isso parece permitir que a máquina B seja sincronizada com a máquina A em segundos. Meu palpite é que um salto de 42 anos no Machine A (sempre inicializado na época) o deixa nervoso em compartilhar seu tempo, mas quando ele inicia e o relógio já está definido, é como se o relógio não estivesse longe Por isso, pequenos ajustes fazem com que você se sinta bem em compartilhar seu tempo. Eu permiti NTP ..
San Jacinto