Ir al contenidoIr a la navegación de la página: página anterior [tecla de acceso p]/página siguiente [tecla de acceso n]
documentation.suse.com / Sincronización horaria mediante NTP

Sincronización horaria mediante NTP

Fecha de publicación: 12 Dic 2024
DESCRIPCIÓN

Este artículo describe qué es la sincronización horaria y cómo configurarla.

INTENCIÓN

Mantener la hora del sistema sincronizada es fundamental cuando se comparten tareas y recursos con otros miembros del equipo a través de la red.

ESFUERZO

Hasta 60 minutos para leer este artículo y realizar una configuración básica de sincronización horaria en el equipo.

REQUISITOS
  • Se requieren conocimientos básicos de administración de sistemas Linux. Las tareas específicas requieren privilegios de root.

  • Conexión de red operativa a la red interna o a Internet para alcanzar el servidor de hora de origen.

1 Introducción

Mantener una hora del sistema precisa y sincronizada en el equipo es vital para el trabajo en equipo. Las aplicaciones de planificación y calendario dependen de ello para registrar correctamente el tiempo y notificar a los usuarios las citas a tiempo. En el caso de las aplicaciones agrupadas en clúster, los equipos host individuales a menudo requieren que la hora del sistema esté sincronizada para poder comunicarse entre sí.

El reloj de hardware integrado no es un origen horario fiable. Una corrección manual de la hora del sistema puede provocar un mal funcionamiento de aplicaciones críticas debido a saltos de tiempo repentinos. Por lo tanto, la hora del sistema debe sincronizarse con un origen horario externo confiable a través de la red.

1.1 ¿Qué es NTP?

El protocolo de hora de red (Network Time Protocol, NTP) está diseñado para sincronizar la hora del sistema a través de la red. Su objetivo es mantener la hora absoluta y utilizarla para sincronizar la hora del sistema de todos los equipos de una red.

1.2 ¿Cómo funciona NTP?

Cuando el servicio NTP está configurado correctamente, consulta y ajusta continuamente la hora del sistema con servidores horarios fiables. Normalmente, los equipos domésticos y otros dispositivos conectados a Internet están configurados para consultar un servidor horario público en Internet.

Dispositivos individuales consultan un servidor de hora público
Figura 1: Dispositivos individuales consultan un servidor de hora público

Por el contrario, los equipos de escritorio y los servidores que residen dentro de una subred corporativa están configurados para consultar un servidor horario dedicado dentro de la red local. El propio servidor de hora sincroniza su hora con un servidor de hora público.

Varios hosts consultan un servidor de hora interno
Figura 2: Varios hosts consultan un servidor de hora interno

1.2.1 Implementación

chrony es la implementación por defecto de NTP en SLE Micro. chrony incluye dos partes:

  • chronyd es un servicio systemd que se puede iniciar durante el arranque.

  • chronyc es un programa de interfaz de línea de comandos para monitorizar el rendimiento de chronyd y cambiar parámetros operativos específicos durante el tiempo de ejecución.

1.3 Ventajas

El uso de NTP para mantener la hora exacta presenta las siguientes ventajas:

  • Los usuarios pueden confiar en sus relojes cuando siguen un horario planificado.

  • Las aplicaciones pueden activar con precisión las acciones programadas del escritorio o del sistema.

  • Los nodos de clúster pueden mantener sus datos sincronizados y actualizados.

  • El uso de un servidor de hora interno ayuda a mantener la hora del sistema sincronizada en redes con acceso restringido a Internet.

2 Configuración del NTP ajustando /etc/chrony.conf

Cuando se inicia chronyd, lee su configuración en el archivo /etc/chrony.conf. En las siguientes secciones se muestran parámetros importantes que pueden afectar al comportamiento de chronyd.

2.1 Especificación de orígenes horarios

Para mantener sincronizado el reloj del equipo, debe indicarle a chronyd qué orígenes horarios desea utilizar. Para ello, use las directivas server, pool y peer. Puede utilizarlas varias veces.

La directiva server indica a chronyd que use un host específico como servidor de hora por su nombre o dirección IP.

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

1

La opción offline impide que chronyd consulte el servidor de hora. Esta opción es útil si no se puede acceder al servidor cuando se inicia chronyd. Debe poner el servidor de hora en línea cuando sea posible acceder a él mediante chronyc. Consulte la Sección 3, “Gestión de chronyd en tiempo de ejecución” para obtener más información.

2

La opción prefer indica a chronyd que prefiera un origen horario sobre otros que no incluyan dicha opción.

La directiva pool permite especificar un nombre de red que se resuelve en varias direcciones IP que pueden cambiar con el tiempo.

pool pool.ntp.org iburst1 maxsources 32

1

La opción iburst significa que chronyd comienza con una ráfaga de 4 a 8 peticiones para realizar la primera actualización del reloj con más rapidez.

2

La opción maxsources indica a chronyd que debe utilizar hasta tres orígenes del repositorio.

La directiva peer especifica un host par NTP en lugar de un servidor de hora. La sincronización horaria del sistema entre pares utiliza una arquitectura simétrica en lugar del modo cliente/servidor invocado por las opciones server y pool. Puede utilizar peer varias veces para especificar más de un par.

peer 192.168.1.116
peer ntp.example.com

2.2 Ejecución de chronyd como servidor NTP

Por defecto, chronyd funciona como cliente para servidores NTP especificados. Para que funcione también como servidor NTP, añada la directiva allow al archivo /etc/chrony.conf. Abre el puerto del servidor NTP (123 por defecto) y responde a las peticiones del cliente.

Puede especificar una única IP de un cliente NTP o una subred para incluir varios clientes. Puede utilizar la directiva allow varias veces:

allow 1.2.3.4
allow 3.4.5.0/24
Sugerencia
Sugerencia

Si no especifica una dirección IP o una subred, la directiva allow independiente permite el acceso desde todas las direcciones IPv4 e IPv6.

Para limitar el acceso de la directiva allow anterior, utilice la directiva deny:

allow 1.2.3.4
deny 1.2.3.0/24
allow 1.2.0.0/16

En el ejemplo anterior, el efecto es el mismo independientemente del orden de las tres directivas. Se permite el acceso a la subred 1.2.0.0/16, excepto a la subred 1.2.3.0/24, a la que se deniega. Sin embargo, se permite el acceso al host 1.2.3.4.

2.3 Configuración de un reloj de referencia local

chronyd se basa en otros programas (como gpsd) para acceder a los datos de tiempo a través de un controlador específico. Utilice la directiva refclock de /etc/chrony.conf para especificar un reloj de hardware de referencia que se utilizará como origen horario. Tiene dos parámetros obligatorios: un nombre de controlador y un parámetro específico del controlador. Los dos parámetros van seguidos de cero o más opciones refclock. chronyd incluye los siguientes controladores:

PPS

Controlador para la API de pulso por segundo del kernel. Por ejemplo:

refclock PPS /dev/pps0 lock NMEA refid GPS
SHM

Controlador de memoria compartida de NTP. Por ejemplo:

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

Controlador de zócalo de dominio de Unix. Por ejemplo:

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

Controlador de reloj de hardware de PTP. Por ejemplo:

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

Para obtener más información sobre las opciones de los controladores individuales, consulte man 8 chrony.conf.

2.4 Activación de orígenes horarios sin conexión

Aunque chronyd se inicia normalmente en un sistema que arranca sin una conexión de red, no puede acceder a los servidores de hora especificados en /etc/chrony.conf. Para evitar que chronyd intente consultar servidores de hora inaccesibles, utilice la opción offline situada junto a la directiva de origen horario, por ejemplo:

server ntp.example.org offline

chronyd no intenta sondear el servidor hasta que se habilita mediante el siguiente comando:

# chronyc online ntp.example.org
Sugerencia
Sugerencia

Si la opción auto_offline está definida en lugar de la opción offline, chronyd supone que el servidor de hora se ha desconectado cuando se le han enviado dos peticiones sin recibir respuesta. Esta opción evita que haya que ejecutar el comando offline de chronyc al desconectar el enlace de red.

3 Gestión de chronyd en tiempo de ejecución

3.1 ¿Qué es chronyc?

chronyc es la parte del cliente de la implementación de NTP de chrony. Puede utilizar el comando chronyc para cambiar el comportamiento del servicio chronyd en tiempo de ejecución. También genera informes de estado sobre el funcionamiento de chronyd.

Nota
Nota: cambios temporales

Los cambios realizados mediante chronyc no son permanentes. Se pierden después del siguiente reinicio de chronyd. Para conseguir cambios permanentes, modifique /etc/chrony.conf como se describe en la Sección 2, “Configuración del NTP ajustando /etc/chrony.conf.

3.2 ¿Cómo funciona chronyc?

Puede ejecutar chronyc en modo interactivo o no interactivo. Para ejecutar chronyc de forma interactiva, escriba chronyc en la línea de comandos y pulse Intro. Muestra un indicador y espera la entrada del comando. Por ejemplo, para comprobar cuántos orígenes NTP están conectados o desconectados, ejecute el 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 salir del indicador de chronyc, introduzca quit o exit.

Si no necesita utilizar el indicador interactivo, introduzca el comando directamente, por ejemplo:

# chronyc activity

4 El servicio chronyd systemd

La parte principal de chrony es el servicio chronyd systemd que se ejecuta en segundo plano y sincroniza la hora del sistema con los servidores horarios seleccionados. Puede utilizar los siguientes comandos de systemd para utilizar el servicio chronyd:

systemctl status chronyd.service

Imprime información ampliada sobre el estado actual del servicio chronyd.

systemctl is-enabled chronyd.service

Comprueba si el inicio automático del servicio chronyd al arrancar el sistema está habilitado.

systemctl enabled chronyd.service

Habilita el inicio automático del servicio chronyd al arrancar el sistema.

systemctl disable chronyd.service

Inhabilita el inicio automático del servicio chronyd al arrancar el sistema.

systemctl is-active chronyd.service

Comprueba si el servicio chronyd se ha iniciado y se está ejecutando.

systemctl start chronyd.service

Inicia el servicio chronyd.

systemctl stop chronyd.service

Detiene el servicio chronyd.

systemctl restart chronyd.service

Reinicia el servicio chronyd y vuelve a cargar /etc/chronyd.conf.

5 Solución de problemas

En caso de errores, compruebe lo siguiente.

  • Verifique que el equipo esté conectado a una red y que la red esté configurada correctamente:

    > 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 que los servidores horarios que ha introducido como origen horario existan y sean accesibles a través de la red. Por ejemplo:

    > 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
    [...]
  • Si el servicio firewalld está activo en su equipo, verifique que el servicio NTP está permitido.

  • Verifique que el servicio chronyd se está ejecutando:

    > 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
     [...]
  • Si la hora del sistema en un invitado virtualizado difiere de la hora exacta, asegúrese de que la hora del sistema del servidor host de la máquina virtual esté sincronizada con un servidor horario válido y de que el invitado esté sincronizado con el mismo origen horario que el host.

  • Si el servicio NTP no se inicia correctamente durante el arranque del sistema, puede deberse a que haya conmutadores de red configurados para utilizar el protocolo Spanning Tree Protocol pero que los puertos no estén configurados como Edge Ports sino como Portfast. En este caso, el establecimiento de la conectividad de red puede tardar hasta un minuto.

  • Si el servicio NTP no se inicia durante el arranque del sistema cuando se utiliza NetworkManager, edite el archivo /etc/sysconfig/network/config y cambie el valor de NM_ONLINE_TIMEOUT a 30. Si el problema persiste, aumente el valor de tiempo límite en 15 y vuelva a intentarlo.

  • Si no es posible acceder a los orígenes NTP, identifíquelos con el siguiente 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

    En este caso, el único servidor que realmente está sirviendo tiempo es time.mydomain.com. Por lo general, es necesario solucionar los problemas de conexión de red a los orígenes de tiempo NTP remotos que fallan.

6 Información adicional