Sincronizando relojes con NTP

per Victor Carceler darrera modificació 2020-04-06T12:13:33+02:00

Intro:

Tener los relojes de nuestras máquinas en hora es vital para que los ficheros de registro tengan alguna utilidad. Y cuando queramos, podamos averiguar en qué momento y orden sucedieron las cosas.

Como los relojes de tiempo real de los PCs no son demasiado precisos necesitan de continuos ajustes. Ahí es donde entra en escena NTP (Network Time Protocol), el servicio que va a mantener nuestras máquinas sincronizadas con la fecha y hora correctas.

Pasos:

Necesitamos instalar el paquete NTP, si estamos en Mandrake podemos escribir:

urmpi ntp

Después tenemos que editar el fichero de configuración /etc/ntp.conf para que incluya la lista de servidores horarios que vamos a consultar. Por ejemplo:

server es.pool.ntp.org
server europe.pool.ntp.org
server pool.ntp.org
server chronos.bulma.net
server ntp.obspm.fr
server ntp.cs.strath.ac.uk

A partir de ahora el demonio ntpd se encargará de ir ajustando periódicamente la hora de nuestro sistema. Siempre y cuando la hora actual no esté demasiado mal (un error de hasta 1000 segundos), si el error es mayor, tendremos que ajustar la primera vez de forma manual (por ejemplo con drakconf) la hora.

Una vez que nuestra máquina está ejecutando ntpd, puede actuar como servidor horário para el resto de máquinas de nuestra red. De modo que en una LAN sólo tendremos una máquina que sincroniza la hora con el exterior.

A continuación se muestra un fragmento de la salida de netstat -patu en un servidor de la XEiLL que ejecuta ntpd

udp        0      0 NTP.MCAST.NET:ntp       *:*                                 4546/ntpd
udp 0 0 172.16.107.1:ntp *:* 4546/ntpd
udp 0 0 raca:ntp *:* 4546/ntpd
udp 0 0 raca:ntp *:* 4546/ntpd
udp 0 0 localhost:ntp *:* 4546/ntpd
udp 0 0 *:ntp *:* 4546/ntpd

Con el paquete NTP se instalan un conjunto de aplicaciones (puede escribir ntp y pulsar dos veces tabulador en la cónsola para ver sus nombres) interesantes. Por ejemplo con ntptrace se nos mostrará el stratum de nuestra máquina, y de qué otras máquinas cuelga en la cadena de sincronización. Con ntpq se carga un programa que permite ver los parámetros de funcionamiento de nuestro cliente (escribir help para ver la lista de comandos). Y con ntpdate -u servidor.horario.quesea se pide a nuestra máquina que sincronice la hora con la del servidor indicado.

Cuándo se debe sincronizar la hora ?

Básicamente hay dos posibilidades:

  1. Se utiliza una tarea periódica (con cron, o en cada arranque...) que ejecuta ntpdate o rdate (otro protocolo)
  2. Se ejecuta el demonio NTP

La primera opción plantea algunos inconvenientes. El primero es la precisión. Si se utiliza un cliente para sincronizar la hora una vez al día (o cada hora) no se consigue la misma precisión que si se ejecuta ntpd y continuamente se corrige la hora. El otro inconveniente es que pueden producirse saltos horarios relativamente grandes, lo que puede crear infinidad de problemas en el resto de servicios que ejecuta la máquina.

Así siempre que se pueda se deberá ejecutar el servicio NTP que ajusta continuamente la desviación de nuestro reloj de tiempo real (RTC), consigue una gran precisión, evita que la hora de nuestro sistema tenga saltos y permite que otras máquinas sincronicen su hora a partir de la nuestra.

Referencias:

  1. BULMA: Ponemos en hora nuestro sistema

  2. BULMA: NTP. El proyecto pool.ntp.org

  3. Web oficial NTP

  4. Proyecto pool.ntp.org