Qué es y cómo funciona Chrony en Linux

Hablamos de Chrony, una implementación flexible de NTP (Protocolo de Tiempo de Red) Se utiliza para sincronizar el reloj del sistema desde diferentes servidores NTP, relojes de referencia o mediante una entrada manual.

También podemos utilizar el servidor NTPv4 para proporcionar un servicio de tiempo para otros servidores en la misma red. Chrony está pensado para funcionar en diferentes condiciones, como una conexión de red intermitente, redes muy cargadas o temperaturas cambiantes que puedan afectar el reloj de las computadoras comunes.

Al igual que las últimas entradas en la web, esta también tiene relación con el estudio para el certificado LPIC 102 en su versión 500. Podéis consultar su contenido en la página de LPIC

Qué es y cómo funciona Chrony en Linux

Chrony incorpora dos piezas fundamentales:

  • Chronyc – interfaz de línea de comandos para chrony
  • Chronyd – es el daemon que puede iniciarse en el momento del arranque del host

Vamos a ver como realizar la instalación, ya que no viene por defecto instalado en la mayoría de los sistemas y la forma básica de utilizarlo.

Ventajas de Chrony versus NTP

Seguro que os estaréis preguntando si es mejor el clásico daemon ntpd (no confundir con el protocolo) con Chrony. Invesgitando un poco por la redes de redes he encontrado estas ventajas de Chrony:

  • La sincronización más rápida requiere solo minutos en lugar de horas para minimizar el error de tiempo y frecuencia, lo cual es útil en equipos de escritorio o sistemas que no funcionan las 24 horas del día.
  • Mejor respuesta a los cambios rápidos en la frecuencia del reloj, lo cual es útil para máquinas virtuales que tienen relojes inestables o para tecnologías de ahorro de energía que no mantienen constante la frecuencia del reloj.
  • Después de la sincronización inicial, nunca hace avanzar el reloj para no afectar a las aplicaciones que necesitan que la hora del sistema sea «monotónica»
  • Mejor estabilidad cuando se trata de demoras asimétricas temporales, por ejemplo, cuando el enlace está saturado por una gran descarga.
  • No se requiere el sondeo periódico de los servidores, por lo que los sistemas con conexiones de red intermitentes aún pueden sincronizar rápidamente los relojes.

En cambio, no cabe decir, que no es recomendado para sistemas que se mantienen a lo largo del tiempo encendidos, sin variaciones en lo que respecta a la energía. Para estos lo recomendado es NTP (ntpd)

Instalar Chrony en Linux

Aprendemos a realizar la instalación de Chrony sobre una distribución GNU/Linux, en mis caso será Raspbian, sobre mi RaspberryPi 3, pero también os dejaré una nota de como hacerlo en otros sistemas:

Instalación en RHEL y Centos

  1. sudo yum -y install chrony

Instalación en Debian, Raspbian, Ubuntu, Linux Mint y derivadas

  1. sudo apt install chrony

Instalación en Fedora

  1. dnf install chrony

Instalación en SUSE y OpenSUSE

  1. zypper -i chrony

Instalación Arch, Manjaro y dervidadas

  1. pacman -S chrony

Una vez instalado, para comprobar su estado :

  1. sudo systemctl status chronyd [Con SystemD]
  2. sudo /etc/init.d/chronyd status [Con Sysvinit]

Para habilitar el servicio al arranque:

  1. sudo systemctl enable chrony [Con SystemD]
  2. sudo chkconfig --add chronyd [Con Sysvinit]

Comprobar la sincronización de Chrony

Para verificar si Chrony está realmente sincronizado, usaremos su programa de línea de comandos chronyc, que tiene la opción de seguimiento que proporcionará información más relevante.

  1. chronyc tracking

Con el resultado:


Hablamos de la información que se nos muestra:

  • Reference ID : Se trata de la ID de referencia y del nombreo IP del servidor con el cuál el host está sincronizado.
  • Stratum :  El número de saltos que se ha realizado para sincronizar el reloj.
  • Ref time (UTC) : Es el tiempo UTC de la última sincronización.
  • System time :  En el funcionamiento normal, Chronyd por defecto nunca hace avanzar el reloj del sistema, porque cualquier salto en el tiempo puede tener consecuencias adversas para ciertos programas de aplicación. En su lugar, cualquier error en el reloj del sistema se corrige al acelerar o ralentizar ligeramente el reloj del sistema hasta que se elimine el error, y luego volver a la velocidad normal del reloj del sistema.
  • Last offset : Este es el desplazamiento local estimado en la última actualización del reloj.
  • RMS offset : Este es un promedio a largo plazo del valor de compensación.
  • Frequency : La «frecuencia» es la velocidad con la que el reloj del sistema sería incorrecto si chronyd no lo corrigiera. Se expresa en ppm (partes por millón).
  • Residual freq : Esto muestra la «frecuencia residual» para la fuente de referencia seleccionada actualmente. Esto refleja cualquier diferencia entre lo que las mediciones de la fuente de referencia indican que la frecuencia debe ser y la frecuencia que se está utilizando actualmente.
  • Skew : Este es el límite de error estimado en la frecuencia.
  • Root delay : Este es el total de los retrasos de la ruta de la red hacia la computadora del estrato 1 desde la cual la computadora está sincronizada en última instancia.
  • Root dispersioon : Esta es la dispersión total acumulada a través de todas las computadoras hasta la computadora del estrato-1 desde la cual la computadora está sincronizada en última instancia. La dispersión se debe a la resolución del reloj del sistema, a las variaciones de medición estadística, etc.
  • Update interval : Este es el intervalo entre las dos últimas actualizaciones de reloj
  • Leap status : Este es el estado de salto, que puede ser Normal, Insertar segundo, Eliminar segundo o No sincronizado.

El servicio, al igual que el servicio NTP clásico, utiliza el fichero de configuración /etc/ntp.conf, este utiliza uno homónimo ubicado en /etc/chrony/chrony.conf, que es donde debemos añadir los servidores de hora, si queremos utilizar unos distintos a los que vienen por defecto.

En la imagen podemos observar como he añadido el servidor de hora de la Real Observatorio de la Armada con dirección «hora.rediris.es»

Fichero de configuración de Chrony

Respecto a la información mostrada en el fichero de configuración, explicamos un poco los apartados:

  • server : La directiva del servidor especifica un servidor NTP que se puede utilizar como fuente de tiempo. La relación cliente-servidor es estrictamente jerárquica: un cliente puede sincronizar la hora del sistema con la del servidor, pero la hora del sistema del servidor nunca se verá influenciada por la de un cliente.
  • pool : La sintaxis de esta directiva es similar a la de la directiva de servidor, excepto que se usa para especificar un grupo de servidores NTP en lugar de un solo servidor NTP. Se espera que el nombre del grupo se resuelva en varias direcciones que podrían cambiar con el tiempo. (Este es el caso que muestro en el ejemplo)
  • keyfile : Esta directiva se utiliza para especificar la ubicación del archivo que contiene pares de claves de ID para la autenticación de paquetes NTP.
  • Driftfile : Una de las actividades principales del programa chronyd es calcular la velocidad a la que el reloj del sistema gana o pierde tiempo en relación con el tiempo real. Cada vez que Chronyd calcula un nuevo valor de la tasa de ganancia o pérdida, es conveniente registrarlo en algún lugar. Esto permite que chronyd comience a compensar el reloj del sistema a esa velocidad cada vez que se reinicie, incluso antes de que haya tenido la oportunidad de obtener una estimación igualmente buena de la tasa durante la nueva ejecución. (Este proceso puede tomar muchos minutos, al menos). La directiva driftfile permite especificar un archivo en el que chronyd puede almacenar la información de velocidad.
  • logdir : Ubicación del fichero de registro de actividad del servicio.
  • maxupdateskew : Una de las tareas de chronyd es determinar qué tan rápido o lento funciona el reloj de la computadora en relación con sus fuentes de referencia. Además, calcula una estimación de los límites de error alrededor del valor estimado. Si el rango de error es demasiado grande, probablemente indica que las mediciones aún no se han establecido y que la tasa de ganancia o pérdida estimada no es muy confiable. La directiva maxupdateskew establece el umbral para determinar si una estimación podría ser tan poco confiable que no debería usarse. Por defecto, el umbral es de 1000 ppm
  • rtcsync : La directiva rtcsync habilita un modo en el que la hora del sistema se copia periódicamente al RTC y chronyd no intenta rastrear su desviación. Esta directiva no se puede utilizar con la directiva rtcfile. En Linux, la copia RTC es realizada por el kernel cada 11 minutos.
  • makestep : Esta directiva hace que chrony corrija gradualmente cualquier compensación de tiempo acelerando o ralentizando el reloj según sea necesario.

Para que se hagan efectivos los cambios podemos reiniciar el servicio:

  1. sudo systemctl restart chrony.service

En cualquier caso podemos forzar  una sincronización de la siguiente manera:

  1. sudo chronyc makestep

Podemos ver una lista de las fuentes (servidores de hora) que está utilizando, añadiendo el parámetro sources:

  1. chronyc sources

Con el resultado:

Lista de servidores fuente utilizados

Y esto es todo, espero que os haya parecido una entrada interesante, por lo menos para mi lo ha sido, he aprendido mucho del funcionamiento de esta interesante alternativa, sobre todo para equipos de sobremesa y máquinas virtuales a NTP (ntpd)

He consultado las siguientes fuentes:

Página de man de Chrony:  Linuxdie.net – chrony

Thegeekdiary.com: CentOS / RHEL 7 : Chrony V/s NTP (Differences Between ntpd and chronyd)

Tecmint.com: How to Install and Use Chrony in Linux