Como personalizo a taxa de pesquisa NTP?

17

Estou configurando o Ubuntu em uma máquina incorporada que roda em uma conexão celular, onde pagamos por byte. A máquina também não possui bateria RTC, portanto, inicia de forma aleatória a cada inicialização.

Gostaria de garantir que o tempo seja sincronizado quando a conexão celular estiver disponível para que as mensagens de log etc. tenham tempo real, mas também não quero pagar um braço e uma perna pelo tráfego NTP.

Posso personalizar a taxa na qual o NTP atualiza o horário? Atualmente, estou usando o openntpd, mas não estou apegado a ele.

Como a Internet não está necessariamente inicializada, o ntupdate e os relacionados na inicialização não funcionam. E agendar via cron significa aguardar o início da tarefa agendada, enquanto eu quero que um daemon de horário obtenha uma sincronização de horário o mais rápido possível.

David Pfeffer
fonte

Respostas:

5

Algumas dessas respostas podem vencer o concurso de configuração ntp ofuscada.

Use a implementação de referência ntp e use iburst para definir o tempo rapidamente após a inicialização. Depois disso, você pode usar a diretiva minpoll para limitar a frequência com que o ntpd consulta servidores de horário remoto. Isso permitirá que você aproveite a disciplina do relógio do ntpd e mantenha a largura de banda baixa.

minpoll minpoll
maxpoll maxpoll
    These options specify the minimum and maximum poll intervals for NTP 
    messages, in seconds as a power of two. The maximum poll interval 
    defaults to 10 (1024 s), but can be increased by the maxpoll option to 
    an upper limit of 17 (36 h). The minimum poll interval defaults to 6 (64 s), 
    but can be decreased by the minpoll option to a lower limit of 3 (8 s).

O Chrony é uma boa alternativa para a implementação de referência ntp. Openntpd não é.

dfc
fonte
8

Minha experiência é com ntp em vez de openntpd.

Você deve saber que o protocolo NTP geralmente começa com o envio de pacotes a cada minuto (64 segundos), mas geralmente se instala enviando e recebendo um pacote a cada 17 minutos para cada servidor que você possui no seu arquivo /etc/ntp.conf. No entanto, interrupções na rede ou um relógio instável no seu dispositivo podem aumentar isso. Cada pacote tem uma carga útil de cerca de 68 bytes, portanto é provavelmente um pouco mais do que 100 bytes, em cada sentido, por pesquisa.

Rdate e ntpdate no momento da inicialização da rede são boas idéias para definir o horário. E se isso é tudo o que você precisa, deve funcionar bem para você.

Se você precisar manter o tempo sincronizado por um longo período, no entanto, o protocolo ntp foi projetado para fazer isso. O relógio no seu dispositivo funcionará um pouco rápido ou devagar, dependendo de como fica quente ou frio, mesmo que provavelmente tenha um relógio controlado por cristal - e a cronometragem em andamento deve se ajustar a isso.

Aqui estão algumas sugestões, se você precisar de cronometragem contínua e desejar reduzir a largura de banda usada. Eles se referem aos itens no ntp.conf.

Não use iburst. (Mas levará mais tempo para definir o horário inicialmente).

Aumente o minpoll para cima de 6 (2 ^ 6 segundos é 64 segundos). Isso reduz o tráfego quando o protocolo é iniciado depois que a rede é ativada.

Aumente o maxpoll de 10 para 10 (2 ^ 10 segundos é 1024 segundos ou a cada 17 minutos. Você pode ir até 17 para pesquisar a cada 36 horas. Eu não tentei isso sozinho.

Use apenas um número mínimo de servidores, se você tivesse um que possa ser alcançado de maneira confiável a partir de seus dispositivos incorporados, isso seria ótimo. Quanto mais servidores, mais confiável a cronometragem pode ser, mas o tráfego aumenta, por isso é uma troca.

John S Gruber
fonte
3

Em uma instalação padrão do Ubuntu, o daemon NTP não é executado. Em vez disso, o tempo é definido sempre que uma interface de rede é ativada pelo /etc/network/if-up.d/ntpdategancho.

Se você estiver após a sincronização pontual em vez da sincronização constante, isso poderá ser suficiente para você.

Você pode controlar quais servidores são consultados para definir o tempo, quer através do padrão /etc/ntp.confde arquivo, ou através da NTPSERVERSvariável /etc/default/ntpdate.

James Henstridge
fonte
2

Você precisa da sincronização exata e precisa que o ntp fornece? Caso contrário, você poderá se safar do uso rdateou ntpdatena inicialização e, periodicamente, via cron.

Pridkett
fonte
2

Você provavelmente já leu a página de manual do openntpd.

http://www.openbsd.org/cgi-bin/man.cgi?query=ntpd.conf

Você provavelmente já percebeu a falta de uma opção de pesquisa por tempo.

Eu tenho esses possíveis hacks para propor:

  1. Não use nenhum ntpd, apenas chame ntpdate via cron.
  2. Use cron e / ou seus scripts de conexão celular para alternar as regras do iptables para descartar ou permitir o tráfego da porta 123 quando você desejar. Isso pode ser tão simples quanto

    0 12 * * * iptables -D OUTPUT -j DROP -p udp --dport 123 # at noon start allowing ntp

    0 13 * * * iptables -A OUTPUT -j DROP -p udp --dport 123 # at 1pm stop allowing ntp

  3. Incorpore um receptor de rádio-relógio na sua máquina incorporada. Não sei quase nada sobre isso, mas produtos como este:

faça-me pensar que não é difícil se você pode receber o sinal de rádio.

Jay _silly_evarlast_ Wren
fonte
1
Se você deseja adicionar hardware, por que recomendar um relógio de rádio e não adicionar um GPS com PPS?
dfc
@dfc good point. OP, considere o hardware do GPS para obter tempo.
Jay _silly_evarlast_ Wren
1
Por US $ 50 (Claro GPS, é um grande negócio) e algumas soldas eu tenho um servidor de tempo estrato 1 no quarto de reposição. Eu tenho a antena GPS certa sentada em uma janela bloqueada por um bordo gigante e outra casa e funciona bem.
dfc
@dfc você pode vincular ao hardware e qual software você usa com o hardware?
Jay _silly_evarlast_ Wren
1
@Jay_silly_everlast_Wren Software: implementação de referência ntp www.ntp.org Fórum: sureelectronics.net/goods.php?id=99 Par de discussões: satsignal.eu/ntp/Sure-GPS.htm e lists.ntp.org/pipermail/questions /2011-March/028854.html Há muito mais. Não se assuste com a solda. Foi a minha primeira vez em solda e foi fácil. A lista de discussão das perguntas ntp está cheia de pessoas que usaram o quadro certo e muito felizes com ele.
dfc
1

Se bem me lembro, o intervalo de pesquisa ntp pode ser definido para no máximo 1024 segundos. Talvez a solução mais simples seja executar o ntpdate em cada inicialização e depois de vez em quando a partir do crontab.

Se o seu relógio iniciar com um tempo aleatório em cada inicialização, você provavelmente não poderá executar o ntpd de qualquer maneira e precisará usar o ntpdate primeiro. O Ntpd se recusa a sincronizar o horário se a diferença for muito grande entre o relógio e o relógio dos servidores.

BigWhale
fonte
+1 para a informação sobre recusa NTP para sincronização se o desvio é muito grande
David Pfeffer
ntpdate é depreciado em favor de opções para ntpdque lidar com este caso de uso melhor do que cronlata eecis.udel.edu/~mills/ntp/html/ntpdate.html
msw
1

O NTP, como o TCP, possui alguma Teoria Profunda e Experiência Prática incorporada ao protocolo; se você alterar seus parâmetros fundamentais, ele deixará de ter as propriedades de sincronização para as quais foi projetado.

Se o seu dispositivo estiver conectado esporadicamente, talvez o bom e velho RDATE o atenda melhor. Ele não suporta o giro do relógio, nem a média dos pares, nem pode ser protegido contra vários ataques sutis que um homem do meio poderia jogar se valesse a pena. Ele apenas obtém uma data de referência de um servidor remoto e bate no relógio local com um martelo. Mas, faz quando você quer, e seu comportamento é determinístico.

A precisão do RDATE é muito pior do que o NTP oferece, eu não confiaria por mais de ± 1 segundo, mas se você estiver apenas esporadicamente conectado, um tempo mais preciso não será relevante; de fato, de acordo com a relatividade , pode até não ser significativo.

msw
fonte
0

Para que o minpool/ maxpoolseja levado em consideração, você deve adicionar por servidor no seu ntp.conf.

Não é recomendável mexer com o deamon NTP (ele possui um mathod interno para otimizar a frequência), mas você precisará adicionar esta opção assim:

server time.google.com iburst minpoll 12 maxppol 17
server ntp.ubuntu.com iburst minpoll 12 maxppol 17
server europe.pool.ntp.org iburst minpoll 12 maxppol 17

Aqui, se definir a frequência mínima para 2 ^ 12 segundos e o máximo para 2 ^ 17 segundos.

Por padrão, descobri que o NTP faria uma solicitação a cada minuto ou mais. Isso é demais. Aqui reduzi a frequência de uma vez por hora para uma vez por dia (bastante).

le hollandais volant
fonte