NTP en Linux: Sincronizar la Hora del Sistema con Servidores de Tiempo
Linux mantiene dos relojes: uno de ellos es alimentado por batería, conocido como "Real Time Clock", RTC, "CMOS clock", "Hardware clock" o reloj de la máquina. Este cuenta el tiempo cuando el sistema está apagado y no se utiliza cuando el sistema está activo. El NTP en Linux es una implementación que mantiene el reloj actualizado.
El otro reloj llamado "system clock", "kernel clock", "software clock" o reloj del sistema es un software que cuenta el tiempo basándose en las interrupciones del procesador. Necesita ser inicializado por el RTC durante la carga del sistema.
Generalmente puede haber diferencias entre el tiempo marcado por estos dos relojes, la hora y fecha reales. Veremos los comandos para ajustar el reloj del sistema.
El tiempo en la Tierra se mide en segundos, que es una unidad del Sistema Internacional de Unidades. Desde 1967 el segundo se define con base en la medición de relojes atómicos, que es la duración de 9.192.631.770 períodos de la radiación correspondiente a la transición entre dos niveles hiperfinos del estado fundamental del átomo de cesio 133.
Una importante característica del tiempo es su monotonicidad, que significa que el tiempo siempre avanza. Esta característica es difícil de mantener por relojes implementados en software, como en los Sistemas Operativos.
De esta forma, los sistemas computacionales carecen de tener sus relojes frecuentemente ajustados.
Para resolver este problema, fue creado el NTP - Network Time Protocol, que implementa, además de un protocolo, una red de servidores con relojes atómicos que sirven para ajustar los relojes de los demás computadores del mundo.
Estos relojes son coordinados por el Bureau International des Poids et Mesures (BIPM) que compone más de 260 relojes atómicos ubicados en institutos y observatorios de metrología alrededor del mundo, incluso en Brasil.
El NTP es un protocolo para sincronización de los relojes de los computadores, basados en alguna fuente confiable de tiempo, como los relojes atómicos del Observatório Nacional, que definen la Hora Legal Brasileira. Con el NTP es fácil mantener el reloj del computador siempre con la hora correcta.
De esta forma, el NTP accede a uno o más servidores de tiempo, y ajusta la hora local del sistema con base en estos servidores.
La última versión del software del NTP puede ser obtenida en la dirección http://www.ntp.org/downloads.html o descargada como un paquete de la distribución Linux.
El paquete del NTP instala un servicio llamado ntpd, que se ejecuta en segundo plano, y hace ajustes de la hora de tiempos en tiempos manteniendo el reloj del sistema actualizado.
Archivo ntp.conf
El NTP posee un archivo de configuración llamado ntp.conf que reside generalmente en el directorio /etc.
Vea el archivo de configuración ntpd.conf del CentOS 7:
# arquivo de “memoria” para o escorregamento de frequência do computador
driftfile /var/lib/ntp/drift
# restringe o acesso somente ao localhost
restrict 127.0.0.1
restrict ::1
# servidores
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
Además de sincronizar el reloj del sistema local con el reloj del servidor de NTP seleccionado en el archivo de configuración, el NTP también disciplina el reloj a través de la fase y la frecuencia del sistema, de forma continua, incluso en períodos en que no es posible consultar servidores de tiempo.
De esta forma, las características del reloj local son medidas y se vuelven conocidas del NTP, lo que permite que él haga las correcciones en el tiempo de forma independiente. El archivo indicado por la clave driftfile almacena el error esperado de frecuencia para el reloj.
La clave restrict permite restringir el acceso al NTP solamente a direcciones de redes del localhost o de la red local.
No es necesario que todos los computadores se conecten remotamente a un servidor de tiempo externo. Un Linux operando como gateway de red puede conectarse a un servidor de NTP externo, y servir de fuente de sincronización para los demás computadores en la red.
El parámetro server seguido del nombre o dirección del servidor, indica de qué servidores el NTP obtendrá la hora. Es recomendable también usar adicionalmente el parámetro iburst en el comando, que sirve para acelerar la sincronización inicial.
Es común indicar más de un servidor con el parámetro server, de forma que el cliente puede obtener la hora simultáneamente de más de un servidor.
Por defecto, el archivo de configuración del NTP ya contiene una lista de servidores de NTP. No es necesario alterar el archivo, a menos que se desee.
Después de instalado y configurado, para utilizar el servicio del NTP es necesario iniciar el servicio con el comando:
# systemctl start ntpd
Y después habilitar el servicio para iniciación en la carga del sistema:
# systemctl enable ntpd
El servicio del ntpd utiliza el puerto 123 del protocolo de transporte UDP para comunicarse con sus clientes o conectarse en los servidores. El comando "ss" con la opción "-lup" puede visualizar el estado de escucha del puerto 123:
# ss -lup | grep ntpUNCONN *:ntp *:* users:(("ntpd",pid=7744,fd=16))
Fuso Horário
Aunque el NTP obtenga la hora de un determinado servidor, de un país o región que esté con la hora en otro huso horario, Linux todavía hace el ajuste de huso horario local utilizando uno de los siguientes medios:
| Forma de Ajuste | Observación |
| /etc/localtime | Enlace simbólico para alguna zona de huso horario en /usr/share/zoneinfo. Generalmente utilizado para configurar el Huso Horario de distribuciones basadas en Red Hat. |
| /etc/timezone | Archivo que contiene el nombre de la Zona de Huso Horario utilizada por Linux. Generalmente utilizado para configurar el Huso Horario de distribuciones basadas en Debian. |
| TZ | Variable ambiental que contiene el nombre de la Zona de Huso Horario. Funciona en cualquier Linux y puede ser personalizada para cada usuario. |
| timedatectl | Servicio de Systemd que puede ser utilizado para configurar la Zona de Huso Horario en distribuciones que usan Systemd. |
pool.ntp.org
El proyecto pool.ntp.org es un gran cluster virtual de servidores de tiempo que provee un servicio NTP confiable y fácil de usar para millones de clientes.
El pool.ntp.org está siendo usado por decenas de millones de sistemas por todo el mundo. Es el "servidor de tiempo" predeterminado para la mayoría de las distribuciones Linux y muchos appliances de red.
Su uso es muy simple, basta con usar sus servidores como referencia en la configuración:
server 0.pool.ntp.orgserver 1.pool.ntp.orgserver 2.pool.ntp.orgserver 3.pool.ntp.org
Comando ntpdate
El comando ntpdate también puede ser utilizado para sincronizar el reloj en un determinado momento, aunque el servicio de NTP no esté activo:
$ ntpdate -q a.ntp.brserver 2001:12ff::8, stratum 2, offset 0.004601, delay 0.04297server 200.160.0.8, stratum 2, offset 0.003794, delay 0.0447520 Oct 14:50:02 ntpdate[10902]: adjust time server 2001:12ff::8 offset 0.004601 sec
La opción "-q" solamente hace una consulta al servidor, sin alterar el reloj local. Para alterar el reloj local con ntpdate, el servicio de ntpd no puede estar en ejecución.
Comando ntpq
La utilidad ntpq puede utilizarse para hacer consultas a servidores NTP. Puede usarse en modo interactivo, en el que se mostrará un prompt o usando parámetros.
La opción "-p" muestra la lista de servidores pares y el estado de cada uno:
# ntpq -p remote st t when poll reach delay offset jitter===================================================================+gps.ntp.br 2 u 86 256 217 19.648 -1.463 1059.39*b.st1.ntp.br 1 u 198 256 307 31.605 4.667 828.577 2001:440:1880:5 16 - 52m 1024 0 0.000 0.000 0.000 b.ntp.br 2 u 63 256 237 55.025 0.950 732561.+a.ntp.br 2 u 81 256 217 20.002 -1.437 1057.36+a.st1.ntp.br 1 u 56 256 217 21.052 -1.931 1065.28+gps.jd.ntp.br 1 u 96 256 217 21.140 -1.688 1055.66+d.st1.ntp.br 1 u 121 256 217 23.940 0.083 1058.75
Comando hwclock
El comando hwclock puede utilizarse para leer el reloj de hardware o actualizar el reloj de hardware con el reloj del sistema y viceversa.
Como se mencionó al inicio del capítulo, las computadoras mantienen dos relojes. Uno llamado reloj de hardware, que está activo cuando el sistema está inactivo, y es mantenido por un cristal de cuarzo y una batería cuando la computadora está apagada. Esta batería es capaz de mantener el reloj incluso cuando está desconectada de la red eléctrica por un buen tiempo.
Cuando se enciende la computadora, Linux lee el reloj de hardware para actualizar su reloj del sistema. Es común que exista una pequeña diferencia entre estos dos relojes.
El comando hwclock tiene las siguientes opciones:
- -r: muestra la hora del reloj de hardware con la zona horaria local;
- -s: configura el reloj del sistema con la hora del reloj de hardware;
- -w: configura el reloj de hardware con la hora del reloj del sistema;
- -c: compara la hora del reloj de hardware y del reloj del sistema cada 10 segundos;
- --adjust: agrega o resta tiempo del reloj de hardware para ajustarlo al deslizamiento de la frecuencia;
Ejemplos:
# hwclock -chw-time system-time freq-offset-ppm tick1571594417 1571594417.0114231571594427 1571594427.012649 123 1
Para ajustar el reloj de hardware con el reloj del sistema:
# hwclock -w
El paquete Chrony
Chrony es una implementación versátil del Network Time Protocol (NTP). Puede sincronizar el reloj del sistema con servidores NTP.
También puede operar como un servidor NTPv4 (RFC 5905) y punto para proporcionar un servicio de tiempo a otras computadoras en la red.
Puede instalarse a través de los paquetes de la distribución Linux:
$ sudo apt install chrony
Archivo chrony.conf
Chrony utiliza el archivo de configuración llamado chrony.conf que puede estar en el directorio /etc/ o /etc/chrony.
Su configuración es similar a ntpd.conf, con la única diferencia de que la clave server se llama pool:
$ cat /etc/chrony/chrony.conf pool ntp.ubuntu.com iburst maxsources 4pool 0.ubuntu.pool.ntp.org iburst maxsources 1pool 1.ubuntu.pool.ntp.org iburst maxsources 1pool 2.ubuntu.pool.ntp.org iburst maxsources 2driftfile /var/lib/chrony/chrony.drift
El servicio de chrony puede iniciarse y habilitarse con el comando systemctl:
$ sudo systemctl start chrony
Para habilitar el servicio en el arranque del sistema:
$ sudo systemctl enable chronyExecuting: /lib/systemd/systemd-sysv-install enable chrony
Comando chronyc
chronyc es una utilidad utilizada para monitorear el rendimiento de chronyd y para alterar su funcionamiento mientras se está ejecutando.
Si no se especifica ningún comando en la línea de comandos, chronyc esperará la entrada del usuario a través del prompt chronyc>.
Acepta diversos comandos, tanto en modo interactivo como directamente como argumento:
$ chronycchronyc> sources210 Number of sources = 8MS Name/IP address Stratum Poll Reach LastRx Last sample =========================================================================^- golem.canonical.com 2 6 373 70 -9241us[-9241us] +/- 143ms^- pugot.canonical.com 2 6 377 77 -11ms[ -11ms] +/- 135mschronyc> quit
El comando sources hace lo mismo que "ntpq -p".
El comando tracking muestra el estado del reloj del sistema:
$ chronyc trackingReference ID : C814BA4C (d.st1.ntp.br)Stratum : 2Ref time (UTC) : Sun Oct 20 20:15:10 2019System time : 0.000793245 seconds slow of NTP timeLast offset : -0.000647185 secondsRMS offset : 0.001815075 secondsFrequency : 4.009 ppm slowResidual freq : -0.191 ppmSkew : 3.915 ppmRoot delay : 0.031462338 secondsRoot dispersion : 0.002590907 secondsUpdate interval : 129.0 secondsLeap status : Normal
La comunicación entre el servidor chronyd y el cliente chronyc se realiza a través del puerto 323 UDP:
$ sudo ss -lunp | grep chronyUNCONN [::1]:323 [::]:* users:(("chronyd",pid=18869,fd=6))
Comando timedatectl
El comando timedatectl es capaz de identificar que Linux está utilizando algún servicio de actualización del reloj del sistema, como ntpd o chronyd:
$ timedatectl Local time: Sun 2019-10-20 17:17:34 -03 Universal time: Sun 2019-10-20 20:17:34 UTC RTC time: Sun 2019-10-20 20:17:34 Time zone: America/Buenos_Aires (-03, -0300)System clock synchronized: yes NTP service: active RTC in local TZ: no
Como chrony es más rápido para actualizar la fecha y hora en el sistema, es ideal para sistemas de escritorio y notebooks, que se apagan con frecuencia. En cambio, ntp es adecuado para computadoras que permanecen permanentemente encendidas.
Aprende mucho más sobre Linux en nuestro curso en línea. Puedes realizar la inscripción aquí. Si ya tienes una cuenta, o quieres crear una, simplemente ingresa o crea tu usuario aquí.
¿Te gustó? Comparte
Eso fue solo una pieza. El curso enseña el camino completo — desde tu primer comando hasta el día del examen.