[FUG-BR] Comportamento estranho do ntp no FreeBSD-10.1-PRERELEASE

Luiz Otavio O Souza lists.br em gmail.com
Terça Setembro 16 15:30:32 BRT 2014


2014-09-16 10:06 GMT-03:00 Eduardo Lemos de Sa:
> Oi Paulo
>
> 2014-09-15 20:13 GMT-03:00 Paulo Cavalcanti:
>
>> Em 15 de setembro de 2014 16:23, Eduardo Lemos de Sa
>> <eduardo.lemosdesa em gmail.com> escreveu:
>> [...]
>> >
>> > Eu resolvi fazer um teste:
>> > sudo /etc/rc.d/ntpd stop
>> > sudo date 1600 (atrasei deliberadmente o relógio em 4 minutos)
>> > sudo /etc/rc.d/ntpd onestart (depois eu fiz uma outra tentativa e
>> troquei o
>> > onestart por um restart)
>> >
>> > e o horário na máquina local não mudou (se adiantou em 4 minutos). Não
>> > satisfeito, fiz um reboot (é a minha máquina desktop) e nada (de melhor)
>> > aconteceu. No dmesg não aparece qualquer menção de que o horário foi
>> > modificado. Por favor, alguém tem alguma ideia de como descobrir o porquê
>> > do erro?
>> >
>>
>>
>> Procure também no /var/log/messages alguma coisa referente a ntp.
>>
>> Faça um dig 0.freebsd.pool.ntp.org e veja se está resolvendo.
>>
>> Se me lembro bem o ntp tem uma tolerância de 1000 segundos de atraso,
>> fora isso ele não sincroniza. Experimente atrasar o relógio em 600
>> segundos, por exemplo.
>>
> Obrigado pela atenção.
>
> Sim, o tempo  máximo de ajuste é de 1000 segundos, mas eu atrasei o relógio
> em 4 minutos (240 s), o que deveria ser suficiente.
>
> Eu fiz um dig no 0.freebsd.pool.ntp.org. Parece que está tudo certo. Por
> favor, veja:
>

Ola Eduardo,

O limite de 1000s inicial do ntp pode ser desabilitado adicionando
'ntpd_sync_on_start="YES"' no seu /etc/rc.conf.

Com essa alteração o ntpd vai corrigir o horário mesmo quando o
relógio esta errado bem além desse limite de 1000s.

Geralmente quando o ntpd não acerta o horário é porque ele não esta
conseguindo sincronizar com os servidores (isso aconteceu recentemente
comigo pois meu provedor bloqueou todos pacotes na porta 123 por conta
de ataques DoS).

Utilize o ntptime para verificar o status do ntpd:

% ntptime
ntp_gettime() returns code 0 (OK)
  time d7c2fef9.42d0e548  Tue, Sep 16 2014 15:24:57.261, (.261000372),
  maximum error 996836 us, estimated error 25764 us, TAI offset 0
ntp_adjtime() returns code 0 (OK)
  modes 0x0 (),
  offset 3615.118 us, frequency 31.199 ppm, interval 1 s,
  maximum error 996836 us, estimated error 25764 us,
  status 0x6001 (PLL,NANO,MODE),
  time constant 10, precision 0.001 us, tolerance 496 ppm,

Esse é o status de um servidor com o ntp sincronizado (verifique os
dois OKs no ntp_gettime() e ntp_adjtime()).

E abaixo segue o status de um servidor onde o ntp esta bloqueado:

# ntptime
ntp_gettime() returns code 5 (ERROR)
  time d7c2cbe0.8b0c561c  Tue, Sep 16 2014 11:46:56.543, (.543157550),
  maximum error 943516 us, estimated error 16 us, TAI offset 0
ntp_adjtime() returns code 5 (ERROR)
  modes 0x0 (),
  offset 0.000 us, frequency 13.402 ppm, interval 1 s,
  maximum error 943516 us, estimated error 16 us,
  status 0x2040 (UNSYNC,NANO),
  time constant 0, precision 0.001 us, tolerance 496 ppm,

Além dos erros o campo status também tem a flag 'UNSYNC'.

Rode um tcpdump na sua interface e veja se há respostas dos
servidores, aqui no caso do server bloqueado só há tx e nada de rx.

# tcpdump -nei XXX port 123

Att.,
Luiz


Mais detalhes sobre a lista de discussão freebsd