Sincronización horaria en Linux con NTP

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

¿Qué es, qué significa y para qué sirve NTP?

El protocolo NTP corresponde a las siglas Network Time Protocol y sirve para sincronizar el reloj del sistema operativo con precisión de nanosegundos con los servidores de hora (relojes atómicos) que hay repartidos por el Mundo.

NTP utiliza el puerto UDP 123, por lo que tendremos que tener abierto en nuestro firewall este puerto.

En los sistemas RedHat donde configuro NTP, lo hago de la siguiente manera:

Configuración de NTP mediante el fichero ntp.conf

El fichero ntp.conf se utiliza para configurar el servidor de NTP en los servidores Linux. En Linux RedHat, se instala con el paquete ntp-version:

[[email protected] ~]# rpm -qa |grep -i ntp-4
ntp-4.2.6p5-15.el6_10.x86_64
[[email protected] ~]#

Y habilitamos el servicio con el comando correspondiente según la versión de RedHat:

  • RHEL6:
    • service ntpd enable
    • service ntpd start
  • RHEL7:
    • systemctl enable ntpd
    • systemctl start ntpd

Una vez arrancado el servicio, podemos pasar a configurarlo:

  • Selecciono la zona horaria:
# tzselect
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 8
Please select a country.
 1) Aaland Islands 18) Greece 35) Norway
 2) Albania 19) Guernsey 36) Poland
 3) Andorra 20) Hungary 37) Portugal
 4) Austria 21) Ireland 38) Romania
 5) Belarus 22) Isle of Man 39) Russia
 6) Belgium 23) Italy 40) San Marino
 7) Bosnia & Herzegovina 24) Jersey 41) Serbia
 8) Britain (UK) 25) Latvia 42) Slovakia
 9) Bulgaria 26) Liechtenstein 43) Slovenia
10) Croatia 27) Lithuania 44) Spain
11) Czech Republic 28) Luxembourg 45) Sweden
12) Denmark 29) Macedonia 46) Switzerland
13) Estonia 30) Malta 47) Turkey
14) Finland 31) Moldova 48) Ukraine
15) France 32) Monaco 49) Vatican City
16) Germany 33) Montenegro
17) Gibraltar 34) Netherlands
#? 44
Please select one of the following time zone regions.
1) mainland
2) Ceuta & Melilla
3) Canary Islands
#? 1

The following information has been given:

Spain
 mainland

Therefore TZ='Europe/Madrid' will be used.
Local time is now: Fri Oct 17 09:41:34 CEST 2014.
Universal Time is now: Fri Oct 17 07:41:34 UTC 2014.
Is the above information OK?
1) Yes
2) No
#? yes
Please enter 1 for Yes, or 2 for No.
#? 1

You can make this change permanent for yourself by appending the line
 TZ='Europe/Madrid'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Europe/Madrid

# date
Fri Oct 17 08:41:46 BST 2014
#

# cat /etc/sysconfig/clock
ZONE="Europe/Madrid"
#

cp /usr/share/zoneinfo/Europe/Madrid /etc/localtime
  • En el fichero /etc/ntp.conf indico la IP del servidor de hora con el que me voy a sincronizar:
# cat /etc/ntp.conf 
tinker panic 0
disable monitor
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
restrict 127.0.0.1
restrict -6 ::1
driftfile /var/lib/ntp/drift
broadcastdelay 0.008
server 30.34.194.1 version 2
#
  • Arranco el servicio ntpd:
# service ntpd status
Redirecting to /bin/systemctl status ntpd.service
● ntpd.service - Network Time Service
 Loaded: loaded (/usr/lib/systemd/system/ntpd.service; enabled; vendor preset: disabled)
 Active: active (running) since Thu 2017-10-26 09:31:10 CEST; 5 days ago
 Main PID: 867 (ntpd)
 CGroup: /system.slice/ntpd.service
 └─867 /usr/sbin/ntpd -u ntp:ntp -u ntp:ntp -p /var/run/ntpd.pid -g

Oct 26 09:31:12 lclawit00 ntpd[867]: Listen normally on 4 eth0 172.24.92.10 UDP 123
Oct 26 09:31:12 lclawit00 ntpd[867]: Listen normally on 5 eth0:1 30.34.194.14 UDP 123
Oct 26 09:31:12 lclawit00 ntpd[867]: new interface(s) found: waking up resolver
Oct 26 09:31:13 lclawit00 ntpd[867]: Listen normally on 6 eth0 fe80::250:56ff:fe25:467 UDP 123
Oct 26 09:31:13 lclawit00 ntpd[867]: new interface(s) found: waking up resolver
Oct 26 09:40:00 lclawit00 ntpd[867]: 0.0.0.0 c61c 0c clock_step -0.687683 s
Oct 26 09:39:59 lclawit00 ntpd[867]: 0.0.0.0 c614 04 freq_mode
Oct 26 09:40:00 lclawit00 ntpd[867]: 0.0.0.0 c618 08 no_sys_peer
Oct 26 09:55:40 lclawit00 ntpd[867]: 0.0.0.0 c612 02 freq_set kernel -11.440 PPM
Oct 26 09:55:40 lclawit00 ntpd[867]: 0.0.0.0 c615 05 clock_sync
#

Si ya lo teníamos arrancado, lo reiniciaremos tras el cambio de configuración (en vez del parámetro start, utilizaremos restart).

Listado de servidores NTP

Si por alguna razón quieres modificar los servidores NTP Stratum, puedes encontrar un listado de servidores NTP a nivel mundial en ntp.org.

Los que están ubicados en España están etiquetados con el código ES.

Listado de servidores NTP

Si entramos en cualquiera de ellos, por ejemplo, en el de San Fernando, obtendremos los datos correspondientes del servidor NTP como, por ejemplo, su IP.

Servidor NTP en España

Dicho esto, lo ideal es utilizar un servidor de NTP lo más cercano a tu IP. Por ejemplo, el que te proporcione tu proveedor de Internet.

Sincronización manual de la hora con ntpdate

Una vez que ya tenemos configurado y arrancado el servicio de NTP en el sistema operativo, podemos forzar una sincronización de hora para comprobar su funcionamiento. En Linux, lo haremos con el comando ntpdate:

[[email protected] ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*30.32.0.1       138.35.51.48     3 u  599 1024  377    0.874    2.630   2.194
[[email protected] ~]# ntpdate -u 30.32.0.1
29 Jan 15:50:23 ntpdate[5833]: adjust time server 30.32.0.1 offset 0.002647 sec
[[email protected] ~]#

Configuración de NTP con Chrony

En RedHat 7, el servicio NTP ha sido sustituido por el de chrony para la sincronización horaria del servidor, aunque NTP todavía sigue disponible en el repositorio de yum para quien quiera o necesite utilizarlo. Chrony es capaz de sincronizar más rápida y precisamente la hora del servidor y su configuración es muy sencilla.

Instalación de chrony

Lo instalaremos con el comando yum install chrony.

[[email protected] ~]# rpm -qa |grep -i chrony
chrony-3.1-2.el7.centos.x86_64
[[email protected] ~]#

Configuración y arranque de chrony

Configuramos los servidores de hora con los que nos queremos sincronizar:

[[email protected] ~]# cat /etc/chrony.conf
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
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

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *

# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2

# Allow NTP client access from local network.
#allow 192.168.0.0/16

# Serve time even if not synchronized to a time source.
#local stratum 10

# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys

# Specify directory for log files.
logdir /var/log/chrony

# Select which information is logged.
#log measurements statistics tracking
[[email protected] ~]#

Arrancamos el servicio de Chrony:

[[email protected] ~]# systemctl enable chronyd
[[email protected] ~]# systemctl start chronyd

Verificamos que ya estamos sincronizando la hora:

[[email protected] ~]# chronyc tracking
Reference ID : 22F2D91F (ec2-34-242-217-31.eu-west-1.compute.amazonaws.com)
Stratum : 3
Ref time (UTC) : Thu May 10 06:55:46 2018
System time : 0.000000000 seconds slow of NTP time
Last offset : -0.833088040 seconds
RMS offset : 0.833088040 seconds
Frequency : 18.322 ppm slow
Residual freq : -0.000 ppm
Skew : 57.486 ppm
Root delay : 0.006454295 seconds
Root dispersion : 0.015800634 seconds
Update interval : 0.0 seconds
Leap status : Normal
[[email protected] ~]#

Reference ID: Es el servidor de hora con el que nos estamos sincronizando.
Stratum: Indica el número de saltos que tenemos que hacer desde nuestro sistema hasta llegar al servidor original de hora.
Ref time: La última hora medida en formato UTC.

Consultas a chrony con chronyc

Obtenemos información de los servidores de hora:

[[email protected] ~]# chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? bray.walcz.net 2 6 3 43 -831ms[ -831ms] +/- 39ms
^? ec2-52-17-30-119.eu-west> 2 6 1 44 -833ms[ -833ms] +/- 11ms
^? ec2-34-242-217-31.eu-wes> 2 6 3 45 -833ms[ -833ms] +/- 17ms
^? ec2-52-17-231-73.eu-west> 2 6 3 44 -830ms[ -830ms] +/- 33ms
[[email protected] ~]#

[[email protected] ~]# chronyc sourcestats
210 Number of sources = 4
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
bray.walcz.net 2 0 65 +0.000 2000.000 -831ms 4000ms
ec2-52-17-30-119.eu-west> 1 0 0 +0.000 2000.000 +0ns 4000ms
ec2-34-242-217-31.eu-wes> 2 0 64 +0.000 2000.000 -833ms 4000ms
ec2-52-17-231-73.eu-west> 2 0 65 +0.000 2000.000 -830ms 4000ms
[[email protected] ~]#

Con los comandos man chronydman chrony.conf obtendremos más ayuda sobre multitud de parámetros de este servicio.

Tal y como hemos podido observar a lo largo de este documento, chronyd es el demonio o proceso que corre en segundo plano mientras que chronyc es una interfaz de línea de comandos que se puede utilizar para monitorizar el rendimiento de chronyd.

Por último, el comando timedatectl puede sernos útil para comprobar si se está sincronizando la hora.

Te podría interesar

Programación de shell scripts en Linux con este tutorial

¿Te ha gustado? Compártelo

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email
About Author

Contenido Relacionado

Artículos Recientes

Deja un comentario