Ir para o conteúdoIr para navegação de página: página anterior [tecla de acesso p]/próxima página [tecla de acesso n]
documentation.suse.com / Sincronizando o horário por meio do NTP

Sincronizando o horário por meio do NTP

Data de Publicação: 12/12/2024
O QUE É?

Este artigo descreve o que é a sincronização de horário e como configurá-la.

POR QUÊ?

Manter o horário do sistema sincronizado é crucial ao compartilhar tarefas e recursos pela rede com outros membros da equipe.

DEDICAÇÃO

A leitura deste artigo e a configuração básica da sincronização de horário no computador levam até 60 minutos.

REQUISITOS
  • É necessário ter conhecimento básico da administração do sistema Linux. Tarefas específicas exigem privilégios de root.

  • Conexão ativa com a rede interna ou com a Internet para acessar o servidor de horário de origem.

1 Introdução

Manter o horário do sistema preciso e sincronizado no computador é fundamental para o trabalho em equipe. Os aplicativos de planejamento e de calendário contam com isso para controlar o horário corretamente e notificar os usuários em tempo sobre os compromissos. Para aplicativos em cluster, as máquinas host individuais geralmente exigem o horário do sistema sincronizado para comunicação mútua.

O relógio incorporado do hardware não é uma fonte de horário confiável. Uma correção manual do horário do sistema pode causar mau funcionamento de aplicativos críticos devido a intervalos repentinos de horário. Portanto, o horário do sistema precisa ser sincronizado por rede com uma fonte de horário externa confiável.

1.1 O que é NTP?

O NTP (Network Time Protocol) foi projetado para sincronizar o horário do sistema por rede. O objetivo é manter o horário absoluto e usá-lo para sincronizar o horário do sistema de todas as máquinas em uma rede.

1.2 Como funciona o protocolo NTP?

Quando o serviço NTP está devidamente configurado, ele consulta e ajusta o horário do sistema com os servidores de horário confiáveis de maneira contínua. Normalmente, os computadores domésticos e outros dispositivos conectados à Internet são configurados para consultar um servidor de horário público na Internet.

Dispositivos individuais que consultam um servidor de horário público
Figura 1: Dispositivos individuais que consultam um servidor de horário público

Por outro lado, os computadores desktop e os servidores que residem em uma sub-rede corporativa são configurados para consultar um servidor de horário dedicado na rede local. O próprio servidor de horário sincroniza seu horário com um servidor de horário público.

Vários hosts que consultam um servidor de horário interno
Figura 2: Vários hosts que consultam um servidor de horário interno

1.2.1 Implementação

O chrony é a implementação padrão do NTP no SLE Micro. O chrony inclui duas partes:

  • O chronyd é um serviço systemd que pode ser iniciado no momento da inicialização.

  • O chronyc é um programa de interface de linha de comando que monitora o desempenho do chronyd e muda os parâmetros operacionais específicos em runtime.

1.3 Benefícios

O uso do NTP para manter o horário preciso tem os seguintes benefícios:

  • As pessoas podem confiar em seus relógios ao seguir uma programação planejada.

  • Os aplicativos podem acionar ações programadas da área de trabalho ou do sistema com precisão.

  • Os nós do cluster podem manter seus dados sincronizados e atualizados.

  • O uso de um servidor de horário interno ajuda a manter o horário do sistema sincronizado em redes com acesso restrito à Internet.

2 Configurando o NTP ajustando /etc/chrony.conf

Quando chronyd é iniciado, ele lê sua configuração no arquivo /etc/chrony.conf. As seções a seguir listam parâmetros importantes que podem afetar o comportamento do chronyd.

2.1 Especificando fontes de horário

Para manter o relógio do computador sincronizado, você precisa informar ao chronyd quais fontes de horário devem ser usadas. Para essa finalidade, use as diretivas server, pool e peer. Você pode usar cada uma delas várias vezes.

A diretiva server instrui o chronyd a usar um host específico como servidor de horário por nome ou endereço IP.

server 0.europe.pool.ntp.org offline1
server 1.europe.pool.ntp.org offline prefer2
server 192.168.2.254

1

A opção offline impede que o chronyd consulte o servidor de horário. Essa opção será útil se o servidor não estiver acessível quando o chronyd for iniciado. Você precisa colocar o servidor de horário online quando ele estiver acessível usando o chronyc. Consulte a Seção 3, “Gerenciando chronyd em runtime” para obter mais detalhes.

2

A opção prefer instrui o chronyd a preferir a fonte de horário em relação a outras que não incluem essa opção.

A diretiva pool permite especificar um nome de rede que seja resolvido para vários endereços IP que podem mudar ao longo do tempo.

pool pool.ntp.org iburst1 maxsources 32

1

A opção iburst significa que o chronyd começa com um burst de 4 a 8 solicitações para fazer a primeira atualização do relógio mais cedo.

2

A opção maxsources instrui o chronyd a usar até três fontes do pool.

A diretiva peer especifica um host de peer NTP em vez de um servidor de horário. A sincronização de horário do sistema entre peers usa uma arquitetura simétrica, em vez do modo do cliente/servidor chamado pelas opções server e pool. Você pode usar peer várias vezes para especificar mais de um peer.

peer 192.168.1.116
peer ntp.example.com

2.2 Executando chronyd como servidor NTP

Por padrão, o chronyd funciona como um cliente para servidores NTP especificados. Para fazê-lo operar também como um servidor NTP, adicione a diretiva allow ao arquivo /etc/chrony.conf. Ele abre a porta do servidor NTP (123 por padrão) e responde às solicitações do cliente.

Você pode especificar um único IP de um cliente NTP ou uma sub-rede para incluir vários clientes. Você pode usar a diretiva allow várias vezes:

allow 1.2.3.4
allow 3.4.5.0/24
Dica
Dica

Se você não especificar um endereço IP ou uma sub-rede, a diretiva allow independente permitirá o acesso de todos os endereços IPv4 e IPv6.

Para limitar o acesso da diretiva allow anterior, use a diretiva deny:

allow 1.2.3.4
deny 1.2.3.0/24
allow 1.2.0.0/16

No exemplo acima, o efeito é o mesmo, seja qual for a ordem das três diretivas. A sub-rede 1.2.0.0/16 tem o acesso permitido, exceto para a sub-rede 1.2.3.0/24, que tem o acesso negado. No entanto, o acesso é permitido ao host 1.2.3.4.

2.3 Configurando um relógio de referência local

O chronyd depende de outros programas (como gpsd) para acessar os dados de horário por meio de um driver específico. Use a diretiva refclock em /etc/chrony.conf para especificar um relógio de referência de hardware a ser usado como fonte de horário. Ela tem dois parâmetros obrigatórios: um nome de driver e um parâmetro específico do driver. Os dois parâmetros são seguidos de zero ou de mais opções do refclock. O chronyd inclui os seguintes drivers:

PPS

Driver para a API Pulse-Per-Second do kernel. Por exemplo:

refclock PPS /dev/pps0 lock NMEA refid GPS
SHM

Driver de memória compartilhada do NTP. Por exemplo:

refclock SHM 0 poll 3 refid GPS1
refclock SHM 1:perm=0644 refid GPS2
SOCK

Driver de soquete de domínio do Unix. Por exemplo:

refclock SOCK /var/run/chrony.ttyS0.sock
PHC

Driver de relógio do hardware PTP. Por exemplo:

refclock PHC /dev/ptp0 poll 0 dpoll -2 offset -37
refclock PHC /dev/ptp1:nocrossts poll 3 pps
Dica
Dica

Para obter mais informações sobre as opções de drivers individuais, consulte man 8 chrony.conf.

2.4 Ativando fontes de horário offline

O chronyd é inicializado normalmente em um sistema que inicializa sem uma conexão de rede, mas ele não pode acessar os servidores de horário especificados em /etc/chrony.conf. Para evitar que o chronyd tente consultar servidores de horário inacessíveis, use a opção offline ao lado da diretiva de fonte de horário, por exemplo:

server ntp.example.org offline

O chronyd não tentará fazer poll no servidor até ser habilitado usando o seguinte comando:

# chronyc online ntp.example.org
Dica
Dica

Quando a opção auto_offline está definida em vez da opção offline, o chronyd pressupõe que o servidor de horário estava offline quando duas solicitações foram enviadas a ele sem receber uma resposta. Essa opção evita a necessidade de executar o comando offline do chronyc ao desconectar o link de rede.

3 Gerenciando chronyd em runtime

3.1 O que é o comando chronyc?

O chronyc é a parte cliente da implementação chrony do NTP. Você pode usar o comando chronyc para mudar o comportamento do serviço chronyd em runtime. Ele também gera relatórios de status sobre a operação do chronyd.

Nota
Nota: Mudanças temporárias

As mudanças feitas com o chronyc não são permanentes. Elas serão perdidas após a próxima reinicialização do chronyd. Para mudanças permanentes, modifique /etc/chrony.conf conforme descrito na Seção 2, “Configurando o NTP ajustando /etc/chrony.conf.

3.2 Como funciona o chronyc?

Você pode executar o chronyc no modo interativo ou não interativo. Para executar o chronyc interativamente, digite chronyc na linha de comando e pressione Enter. Esse procedimento exibe um prompt e aguarda a entrada do seu comando. Por exemplo, para verificar quantas fontes NTP estão online ou offline, execute o comando activity:

# chronyc
chronyc> activity
200 OK
4 sources online
2 sources offline
1 sources doing burst (return to online)
1 sources doing burst (return to offline)
0 sources with unknown address

Para sair do prompt do chronyc, digite quit ou exit.

Se você não precisa usar o prompt interativo, digite o comando diretamente, por exemplo:

# chronyc activity

4 O serviço chronyd systemd

A parte principal do chrony é o serviço chronyd systemd, que é executado em segundo plano e sincroniza o horário do sistema com os servidores de horário selecionados. Você pode usar os seguintes comandos systemd para operar o serviço chronyd:

systemctl status chronyd.service

Imprime informações estendidas sobre o status atual do serviço chronyd.

systemctl is-enabled chronyd.service

Verifica se o início automático do serviço chronyd na inicialização do sistema está habilitado.

systemctl enabled chronyd.service

Habilita o início automático do serviço chronyd na inicialização do sistema.

systemctl disable chronyd.service

Desabilita o início automático do serviço chronyd na inicialização do sistema.

systemctl is-active chronyd.service

Verifica se o serviço chronyd foi iniciado e está em execução.

systemctl start chronyd.service

Inicia o serviço chronyd.

systemctl stop chronyd.service

Interrompe o serviço chronyd.

systemctl restart chronyd.service

Reinicia o serviço chronyd e recarrega o /etc/chronyd.conf.

5 Solução de problemas

Em caso de erros, verifique o seguinte.

  • Verifique se o seu computador está conectado a uma rede e se a rede está configurada corretamente:

    > sudo systemctl status network.service
    ● NetworkManager.service - Network Manager
         Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled)
         Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago
    [...]
  • Verifique se os servidores de horário que você inseriu como fontes de horário existem e podem ser acessados pela rede. Por exemplo:

    > ping pool.ntp.org
    PING pool.ntp.org (85.199.214.101) 56(84) bytes of data.
    64 bytes from 85.199.214.101 (85.199.214.101): icmp_seq=1 ttl=37 time=29.9 ms
    [...]
  • Se o serviço firewalld estiver ativo no computador, verifique se o serviço NTP é permitido.

  • Verifique se o serviço chronyd está em execução:

    > sudo systemctl status chronyd.service
    ● chronyd.service - NTP client/server
         Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: disabled)
         Active: active (running) since Sat 2021-08-07 20:09:44 CEST; 4 days ago
     [...]
  • Se o horário do sistema em um convidado virtualizado for diferente do horário exato, verifique se o horário do sistema do Servidor de Host de VM está sincronizado com um servidor de horário válido e se o convidado está sincronizado com a mesma fonte de horário do host.

  • Se o serviço NTP não for iniciado corretamente durante a inicialização do sistema, isso pode ser causado por switches de rede configurados para usar o Spanning Tree Protocol, enquanto as portas não estão configuradas como Edge Ports, mas como Portfast. Nesse caso, pode levar até um minuto para que a conectividade de rede seja estabelecida.

  • Se houver falha ao iniciar o serviço NTP durante a inicialização do sistema quando o NetworkManager for usado, edite o arquivo /etc/sysconfig/network/config e mude o valor de NM_ONLINE_TIMEOUT para 30. Se o problema persistir, aumente o valor do tempo de espera em 15 e tente novamente.

  • Se as fontes NTP não puderem ser acessadas, identifique-as com o seguinte comando:

    > chronyc sources -v
    [...]
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^* time.mydomain.com             3  10   377    81  -5354us[-8257us] +/-  191ms
    ^? ntp1.example.com              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? 77.177.77.177                 0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp3.example.com              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp4.example.net              0  10     0     -     +0ns[   +0ns] +/-    0ns
    ^? 2a02:3d8:1::1:1               0   6     0     -     +0ns[   +0ns] +/-    0ns
    ^? ntp2.example.org              0  10     0     -     +0ns[   +0ns] +/-    0ns

    Nesse caso, o único servidor que está realmente exibindo o horário é time.mydomain.com. Geralmente, é necessário solucionar problemas de conexão de rede com as fontes de horário NTP remotas com falha.

6 Para obter mais informações