Cómo instalar un servicio de actualización automática de hora del sistema en equipos Linux CentOS Stream 9 (válido para CentOS 8), usando Chrony. Mostramos cómo montar un servidor de actualización de hora y los clientes.
- Verificar que tenemos la zona horaria correcta.
- Instalar Chrony en equipo Linux CentOS Stream 9 para sincronizar hora con servidores externos NTP ROA.
- Configuración para establecer un equipo Linux como servidor de hora para el resto de equipo de la red.
Verificar que tenemos la zona horaria correcta
En primer lugar nos aseguraremos de que tenemos la zona horaria correcta en el equipo Linux CentOS 9, para ello ejecutaremos el comando:
timedatectl
Que debe mostrarnos en «Time zone» la zona horaria correcta, en nuestro caso «Europe/Madrid».
En caso de ser incorrecta seguiremos las instrucciones de este artículo para cambiarla:
Instalar Chrony en equipo Linux CentOS Stream 9 para sincronizar hora con servidores externos NTP ROA
Tanto si queremos establecer un equipo de nuestra red como servidor de tiempo NTP, como si va a ser el cliente que se conecte al servidor de tiempo, tendremos que instalar Chrony, que es sustituto de Ntpd. Para ello accederemos a la consola (shell de comandos), y ejecutaremos el siguiente comando:
dnf install chrony -y
Iniciaremos el servicio/demonio de chrony con el comando:
systemctl start chronyd
Lo habilitaremos para que se inicie cuando se arranque el equipo con el comando:
systemctl enable chronyd
Y comprobaremos que se ha iniciado correctamente ejecutando el comando:
systemctl status chronyd
Nos devolverá algo así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
systemctl status chronyd chronyd.service - NTP client/server Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-02-03 14:19:19 CET; 8s ago Docs: man:chronyd(8) man:chrony.conf(5) Main PID: 1882 (chronyd) Tasks: 1 (limit: 9176) Memory: 1.1M CPU: 20ms CGroup: /system.slice/chronyd.service 1882 /usr/sbin/chronyd -F 2 feb 03 14:19:19 srvcentos9 systemd[1]: Starting NTP client/server... feb 03 14:19:19 srvcentos9 chronyd[1882]: chronyd version 4.1 starting (+CMDMON +NTP +REFCLOCK +RTC + feb 03 14:19:19 srvcentos9 chronyd[1882]: Using right/UTC timezone to obtain leap second data feb 03 14:19:19 srvcentos9 chronyd[1882]: Loaded seccomp filter (level 2) feb 03 14:19:19 srvcentos9 systemd[1]: Started NTP client/server. feb 03 14:19:23 srvcentos9 chronyd[1882]: Selected source 193.145.15.15 (2.centos.pool.ntp.org) feb 03 14:19:23 srvcentos9 chronyd[1882]: System clock TAI offset set to 37 seconds |
Editaremos el fichero de configuración de Chrony para establecer los servidores NTP externos a los que se conectará el equipo para sincronizar la hora, para ello ejecutaremos el comando:
nano /etc/chrony.conf
(podremos usar cualquier editor como nano, vi, etc.)
En nuestro caso estableceremos como servidores externos de hora: hora.roa.es y hora.rediris.es. Para ello comentaremos la línea:
pool 2.centos.pool.ntp.org iburst
Dejándola con:
#pool 2.centos.pool.ntp.org iburst
Y agregaremos las siguientes líneas:
server hora.roa.es
server hora.rediris.es
Guardaremos los cambios pulsando Control + O y cerraremos con Control + X.
Estableceremos la sincronización de NTP con el comando:
timedatectl set-ntp true
Y reiniciaremos el servicio chronyd para que se apliquen los cambios:
systemctl restart chronyd
Ahora podremos comprobar que se está sincronizando la hora de nuestro equipo con el servidor de hora establecido, para ello ejecutamos el comando:
chronyc sources
Nos devolverá algo así:
Configuración para establecer un equipo Linux como servidor de hora para el resto de equipo de la red
Si queremos que sólo un equipo se sincronice con servidores de hora externos a nuestra red y el resto de equipos de nuestra red se sincronicen con este, lo haremos «servidor de hora». Esto es lo más recomendable para que sólo un equipo sea el que esté expuesto a este tipo de servicio que requiere de conexión a Internet. El resto de equipo de la red LAN sincronizarán la hora automáticamente a través de este equipo y no necesitarán salir a Internet.
Para establecer un equipo Linux como servidor de hora NTP para el resto, únicamente tendremos que instalar chronyc, configurarlo para que use servidores externos, como hemos explicado anteriormente y abrir el puerto NTP en el cortafuegos del equipo, con el comando:
1 |
firewall-cmd --permanent --add-service=ntp --permanent |
Para aplicar los cambios en el cortafuegos sin tener que reiniciar el equipo, ejecutaremos el comando:
1 |
firewall-cmd --reload |
Y como medida de seguridad, si queremos limitar el rango de IP que podrán conectarse a nuestro servidor NTP interno, podremos indicarlo en el fichero de configuración:
nano /etc/chrony.conf
En la sección «Allow NTP client access from local network», indicando las IP o el rango de IP que permitiremos. Por ejemplo, para permitir clientes de la red 192.168.0.0, introduciremos la línea:
allow 192.168.0.0/24
Si hacemos algún cambio en el fichero de configuración, para que se aplique, tendremos que reiniciar el servicio con:
systemctl restart chronyd
Configurar cliente Linux para sincronización de hora automática con servidor Linux interno
Una vez configurado el servidor interno NTP, como hemos indicado anteriormente, para el cliente tendremos que revisar la zona horaria e instalar Chrony, igual que hicimos para el servidor.
La única diferencia es que indicaremos como servidor NTP de hora la IP del servidor anterior y no una externa. Para ello editaremos el fichero /etc/chrony.conf:
nano /etc/chrony.conf
Donde cambiaremos «192.168.1.100» por la IP del servidor Linux con Chrony.
Realizaremos la sincronización NTP con:
timedatectl set-ntp true
Y reiniciaremos el servicio para aplicar los cambios:
systemctl restart chronyd
Verificaremos que conecta con el servidor NTP interno de nuestra red, con el comando:
chronyc sources
De esta forma el equipo servidor NTP se actualizará a través de Internet y el resto de equipos de nuestra red interna se actualizarán a través del servidor. Así evitamos tener que abrir puertos al exterior para todos los equipos, limitando la superfice de exposición.