ntp - Network Time Protocol

NTP (Network Time Protocol) es un protocolo de sincronización de relojes a través de una red mediante el puerto 123 UDP. Está diseñado para resistir los efectos de la latencia variable. Hoy en dia, con los procesadores doble núcleo, en muchas ocasiones la hora se desincroniza excesivamente. Si tienes un servidor, es indispensable que se mantenga correcta, ya que sinó se podrian originar grabes problemas en los servicios que haya corriendo. Del mismo modo, también puede ser interesante para tu ordenador personal. A continuación explicaré como instalarlo y configurarlo de la manera más simple.

Las entrañas de NTP

El paquete ntp de GNU/Linux consta principalmente de estos programas:

ntpd

Es un demonio que, mediante una lista de servidores, mantiene la hora hora de tu reloj actualizada. Para ello compara la hora local con la de uno o varios servidores, y cuando ésta llega a una cierta desincronización actualiza la hora. El valor máximo de esta desincronización viene dado por un parámetro llamado "stratum". ¡CUIDADO! si el reloj se desvía excesivamente en un momento dado, ntpd NO actualizará la hora, ya que supondrá que hay algún problema en el sistema local o los servidores. Además ntpd puede dar servicio a otros ordenadores de la red.
Aqui podeis ver un mensaje de log de la sincronización de ntpd:  

18 Jun 22:48:01 ntpd[1388]: time reset +0.132832 s
18 Jun 22:57:42 ntpd[1388]: synchronized to 130.206.3.166, stratum 2

ntpdate

Es un cliente para la sincronización de la hora en un momento puntual con un servidor de la red.

ntpdc

Es un programa interactivo. Sirve para preguntar a ntpd cuál es su estado actual.

ntp-client

Algunas distros llevan este pequeño script ubicado en /etc/init.d, sirve para sincronizar la hora puntualmente, con ntpdate.

Para todas las distros en general 

Instalación y configuración

  • Instalamos el paquete ntp (o ntpd según la distro) mediante nuestro gestor de paquetes.
  • Editamos el archivo /etc/ntp.conf y configuramos las siguientes opciones:
#Ubicación del archivo de log
logfile /var/log/ntpd

#El archivo con la configuración de la frequencia de sincronización y el algoritmo a usar
driftfile /var/lib/ntp/ntp.drift

#Directorio donde se guardarán las estadísticas de ntpd
statsdir /var/log/ntpstats/

#El/Los servidores de hora que utlizaremos
server hora.rediris.es

#Restringimos para que el único que pueda modificar nuestra hora sea el server
restrict hora.rediris.es

#Restringimos para que ntp no preste servició de sincronización a otros ordenadores
restrict default ignore

#O si queremos que lo preste lo especificamos de la siguiente manera para nuestro rango IP #restrict 172.16.0.0 mask 255.255.255.0 nomodify

#Especificamos el stratum
stratum 2
  • Ahora solo queda iniciar el demonio mediante init.d (/etc/init.d/ntpd start) o manualmente (ntpd). Además de añadirlo en los scripts de inicio para que autoarranque.

Evitando problemas

  • Para evitar que en el arranque la hora este excesivamente desincronizada, cosa que causaría que ntpd no la actualizara, es recomendable añadir algún script en el inicio para que mediante ntpdate se sincronice automaticamente. Esto lo podemos hacer con el script ntp-client (si existen en nuestra distro). Y si no creamos un archivo con lo siguiente en /etc/init.d/acthora Lo hacemos ejecutable "chmod +x /etc//init.d/acthora" y lo añadimos a los runlevels con update-rc.d, rc-update o el correspondiente en nuestra distro.
#!/bin/bash
echo "Actualizando hora..."
ntpdate -u hora.rediris.es
  • Si tras sincronizar la hora recivimos errores con archivos que tienen la fecha de modificación en el futuro, ejecutad el siguiente script para arreglarlo. De producción casera y algo chapuzas XD. Hace un "touch" a todos los ficheros del sistema, si queremos hacerlo solo a un directorio concreto poned "find /directorio" en lugar de "find /".
#!/bin/bash
for f in $(find /); do
touch $f
done

Para Gentoo Linux

Instalación y configuración de ntpd

  • emerge ntp
  • nano /etc/conf.d/clock

        CLOCK_SYSTOHC="yes"
        TIMEZONE="GMT"

  • nano /etc/conf.d/ntpd

        NTPDATE_CMD="ntpdate"
        NTPDATE_OPTS="-b hora.rediris.es"

  • nano /etc/ntp.conf

        server hora.rediris.es
        restrict hora.rediris.es
        stratum 2
        driftfile       /var/lib/ntp/ntp.drift
        logfile /var/log/ntp.log
        restrict default ignore

  • rc-update add ntpd default
  • /etc/init.d/ntpd start

Configuración ntpd-client

  • nano /etc/conf.d/ntp-client

        NTPCLIENT_CMD="ntpdate"
        NTPCLIENT_OPTS="-s -b -u hora.rediris.es "   
        NTPCLIENT_TIMEOUT=30

  • rc-update add ntp-client default