Como manter o relógio preciso com acesso limitado à Internet

3

Um Raspberry Pi está por trás de um firewall que está configurado para permitir que ele acesse apenas um único IP externo (com todas as portas) que pertence a um servidor Centos7.

Como os dois dispositivos podem ser configurados para garantir que a hora UTC do Raspberry Pi seja sempre exata.

Passos que tomei ...

  1. Configurado ntp no servidor, apontado para o servidor 0.us.pool.ntp.org, firewall configurado, etc.
  2. No cliente Pi, comente os servidores padrão e aponte para o meu servidor, reinicie.

No entanto, o tempo é de cerca de 1 hora de folga. Ainda preciso configurar meu servidor para permitir que o cliente acesse? Se assim for, posso / devo permitir todos os clientes, ou apenas o meu?

Raspberry Pi

michael@pi:~ $ ntpq -c lpeer
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 12.345.67.890   .INIT.          16 u    -   64    0    0.000    0.000   0.000
michael@pi:~ $ date -R
Tue, 20 Jun 2017 10:37:17 +0000

Cerca de 24 horas depois

michael@pi:~ $ ntpq -c lpeer
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 74.208.80.161   .INIT.          16 u    - 1024    0    0.000    0.000   0.000
michael@pi:~ $ date -R
Wed, 21 Jun 2017 11:29:08 +0000

michael@pi:~ $ grep '^[^ #]' /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
server 12.345.67.890    #This is the Centos server
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1

CentOS

[michael@centos7 ~]$ ntpq -np
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+104.156.99.226  192.12.19.20     2 u   21 1024  377   68.864    0.518   0.930
+108.59.2.24     130.133.1.10     2 u   68 1024  377   56.934   -0.234   0.881
+66.7.96.1       216.218.254.202  2 u  480 1024  367   71.228    0.149   1.752
*97.107.128.58   209.51.161.238   2 u   87 1024  377   52.881    1.430   1.507
[michael@centos7 ~]$

Cerca de 12 horas depois

[michael@centos7 ~]$ ntpq -np
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+104.156.99.226  204.123.2.72     2 u  432 1024  377   68.857    0.466   0.128
+108.59.2.24     130.133.1.10     2 u  838 1024  377   56.550   -0.114   0.083
*66.7.96.1       216.218.192.202  2 u  911 1024  377   73.391    0.920   1.763
-97.107.128.58   209.51.161.238   2 u  655 1024  377   56.110    2.394   0.125
[michael@centos7 ~]$ date -R
Wed, 21 Jun 2017 12:30:44 +0000

[michael@centos7 ~]$ grep '^[^ #]' /etc/ntp.conf
driftfile /var/lib/ntp/drift
restrict default nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict ::1
server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
disable monitor
logfile /var/log/ntp.log
    
por user1032531 19.06.2017 / 17:23

3 respostas

2

Use um módulo DS3231 RTC (I2C) e atualize seu tempo a partir de um servidor NTP. É mais preciso do que o RTC incorporado do meu portátil de negócios topo de gama.

Próximo DS3231 para Raspberry Pi RTC Board Módulo de Relógio em Tempo Real | Amazônia

Nota: corte / dessoldar o minúsculo díodo SMD que, no seu cátodo, está directamente ligado ao terminal positivo da bateria. Use o teste 200ohm / continuidade no seu DMM para encontrá-lo. Parece uma minúscula conta de vidro. Você não precisa carregar a bateria, mas alguns módulos fazem isso de qualquer maneira.

Adicionando um DS3231 Relógio em Tempo Real para o Raspberry Pi

Não use o DS1307, ele diverge vários minutos por mês.

Atualização: Você também pode usar um módulo Si4703 para obter hora e data - veja o site SparkFuns.

    
por 23.06.2017 / 21:14
0

Esta resposta está sendo oferecida depois que a solução foi identificada através dos comentários.

Problemas que precisavam ser resolvidos eram:

  1. Clareza

    Inicialmente não estava claro quais arquivos de configuração eram para o sistema CentOS (nenhum) e quais eram para o Pi (alguns). Atualizações posteriores da pergunta esclareceram isso de maneira admirável.

  2. O servidor CentOS não foi inicialmente sincronizado com seus servidores upstream.

    Isso leva um número de iterações do intervalo de pesquisa e, idealmente, a acessibilidade de pelo menos um servidor deve ser 377 . Essa é uma representação octal de um campo de bits que mostra o número de solicitações recentes que foram bem-sucedidas. Cada intervalo envia um 1 ou 0 na extremidade menos significativa do campo de bits. 377 corresponde a 11-111-111 .

  3. O Pi não pôde sincronizar com seu servidor upstream do CentOS

    O iptables firewall no servidor CentOS não tinha culpa, mas precisaria ser configurado para permitir consultas UDP de entrada do Pi para a porta 123 e respostas correspondentes respondidas - firewall-cmd --permanent --add-service ntp . Também teria que ter permitido solicitações de saída para os servidores upstream no UDP / 123 e suas respostas correspondentes. O uso de servidores do NTP Pool complica isso um pouco, pois os endereços IP dos servidores são ativados e desativados do pool de hora em hora. Uma opção aqui seria permitir todo o tráfego de saída no UDP / 123 e respostas correspondentes.

    Descobriu-se que havia um firewall de hardware protegendo o sistema CentOS, e não foi configurado para permitir o tráfego NTP do Pi.

por 23.06.2017 / 15:03
-1

Parece que o Pi está tendo problemas para acessar o serviço NTP. No CentOS, há um firewall embutido ativado por padrão que bloqueia a maior parte do tráfego de entrada. Para permitir solicitações NTP de entrada, faça o seguinte na caixa CentoOS 7:

firewall-cmd --permanent --add-service ntp
firewall-cmd --reload
    
por 23.06.2017 / 06:32

Tags