Como poner un Servidor de tiempo NTP en Slackware
RelojesGabriel Orozco

(basado en un excelente documento de hostingtech.com)



Mantener la hora exacta es primordial en muchos procesos. Obviamente es indispensable en un cluster o en un site, donde es necesario tener la hora correcta en todos y cada uno de los servidores, y poder desde alli replicarla a las computadoras de nuestros usuarios, con lo cual no tendrémos problemas de sincronización nunca.

Imagine la situación: un sistema de musica ambiental corriendo en Linux, que controla las señales de finalización y arranque de cada turno de trabajo en la empresa, y que poco a poco va desfasando los avisos de la hora de entrada y salida, los de pase al comedor, etc.

para solucionar este tipo de problemas se creó un protocolo especial, llamado Network Time Protocol (NTP), donde todo se maneja en niveles de exactitud, y se clasifica en estratos dependiendo a partir de cual servidor está el nuestro tomando la hora exacta.

No vamos a hablar demasiado del NTP, porque se ha ido haciendo complejo en cuanto a su mecanismo de autenticación, para evitar ya viejos ataques sobre este protocolo sino a mantenerlo sencillo. si desea saber más del protocolo, revise los detalles del RFC 1305, en http://www.ietf.org/rfc/rfc1305.txt.

El protocolo NTP permite a los dispositivos conectados a la red el sincronizar su reloj interno contra otro dispositivo. este puede ser un dispositivo en tu misma red local, o un dispositivo en alguna parte de la WAN. En general, NTP puede mantener los dispositivos de una red de area local (LAN) sincronizados sus relojes en un rango de milisegundos (ms), y a través de la WAN en un rango que ronda los 100 milisegundos de diferencia entre un dispositivo y otro.

El NTP se basa en el tiempo universal de Greengwech, también llamado Tiempo Universal Coordinado o UTC. el UTC se refiere a la escala de tiempo que se mantiene en los relojes atómicos alrededor del mundo. Esta hora exacta "universal" que es el UTC puede ser obtenida por diferentes métodos: a través del Internet a partir de un servidor público NTP, a través de ondas de radio, o utilizando GPS. Claro que siempre se puede construir su propio relój atómico ud. mismo.

Que tan exacto es?

Los servidores NTP se designan como pertenecientes a estratos definidos, o niveles; basados en el origen de donde toman su tiempo. el nivel mayor, justo al lado de los mismisimos relojes atómicos (los relojes atómicos son el estrato 0) es el estrato 1.

Los servidores del estrato 1 son relojes que están conectados a una fuente confiable de tiempo universal UTC. Los servidores del estrato 2 obtienen su información de los del estrato 1, los servidores del estrato 3 lo obtienen a su vez de los de estrato 2, y así sigue. Según se avanza en los diferentes estratos existen costos de red asociados que reducen la exactitud del servidor de tiempo en cuestión, respecto del tiempo

UTC.

Un servidor de estrato 2 en la red puede tener de 1 a 30 milisegundos de diferencia contra el tiempo exacto UTC, y cada estrato adicional se piensa que debe tener al menos una diferencia de la misma magnitud respecto de su predecesor.

Muchas empresas comienzan utilizando uno de los muchos servidores NTP públicos que se listan en la página del sistema de NTP (http://www.ntp.org/) (NTPs públicos: en esta liga: http://www.eecis.udel.edu/~mills/ntp/servers.html, aunque yo prefiero mejor los que trae el nettime (proyecto para windows en sourceforge) mismos que he copiado aquí.) Para hacer que todos sus equipos se actualizen contra el. Desafortunadamente, hay algunos problemas en escoger ese método. Primero, esos servidores tienden a estar sobrecargados, resultando en que frecuentemente no responden y termina el sistema cerrando el intento de conección y generando un timeout. Segundo, y quizas más serio es que no hay seguridad de que todos los servidores en la red están haciendo conecciones consistentes y confiables. Si se dan los suficientes timeouts, puede haber una diferencia de horario sensible o importante engtre los servidores de la misma red.

Cuando una empresa llega al punto de tener 10 o más equipos en una red, es usualmente una excelente idea el dejar de hacerlos depender todos de un servidor de tiempo externo, y poner un servidor interno a la red.

Es importante notar que cuando nos referimos a dispositivos de red nos referimos a ruteadores, switches, firewalls, aparte de referirnos a los servidores y a los clientes. Todos los dispositivos conectados a un segmento de la red, deben estar sincronizados al mismo tiempo.

Saltos de tiempo:

Mientras que tener un servidor de tiempo ayuda a tener toda la red sincronizada, es importante monitorear el dispositivo cuidadosamente para evitar desviaciones de tiempo. ya que los relojes internos de cada máquina no son exactos y se van desviando poco a poco del tiempo universal. esto ocurre más en unos equipos que en otros. además, el tiempo variable que toma un paquete en viajar por la red, añade incertidumbre a los datos de tiempo que se reciben desde internet.

La solución obvia a este problema es el sincronizar nuestro servidor NTP contra uno de los servidores NTP públicos que hay disponibles, haciendolo un servidor de estrato 2. Los problemas inherentes a los servidores de tiempo públicos siguen existiendo, pero ahora solamente el servidor interno NTP se enfrentará a ellos, dejando al administrador tener un mayor y mejor control sobre su propia red.

Hay dispositivos NTP disponibles en el mercado. Esos dispositivos se sincronizan directamente con los satélites GPS, o tienen relojes atómicos interconstruidos. Y hay ventajas obvias en tener un servidor de estrato 1 dentro de la red. Por ejemplo, no hay nadie que pueda estar moviendole al tiempo que obtiene su servidor NTP, tal como puede pasar al intentar obtenerlo a través de internet. Con el aumento de dispositivos de seguridad que utilizan la hora para permitir/denegar accesos, esto se vuelve prudente.

Ahora si, entrando en materia:

Configurando un servidor NTP en la red usando Linux:

En casi todas las distribuciones de Linux encontrará el paquete xntp o el paquete ntp. La versión más reciente del ntp siempre podrá encontrarla en el sitio de la universidad de Delaware (http://www.ntp.org/software/). Si el paquete de ntp no está ya incluido en su distro, bajelo de aquí, y descompactelo en un directorio temporal. El programa viene con su script de configuración, mismo que intentará adivinar los parámetros correctos de su distribución. Sea cual sea su distribución, no olvide tener la versión más reciente de las librerías libcap instalada (al menos la 1.10).

Hay solamente 3 pasos para configurar el ntp, y son estos:

  • ./configure
  • make
  • make install


Los dos primeros puntos los podemos cambiar por el siempre util checkinstall de Izto. esto permitirá poder desinstalar algo que hemos instalado desde los fuentes, además de ejarnos un paquete qué instalar en caso de necesitarlo (Checkinstall).

Una vez la instalación del software se ha realizado, es hora de configurarlo. Para ello se deberá editar el archivo /etc/ntp.conf. Una

configuración mínima se realiza simplemente cambiando el valor por default listado en el archivo de ntp.conf, por uno de su elección.

para hacerlo, cambie la línea que dice:

server 127.127.1.0 # local clock

por una que diga, por ejemplo (tomando el ntp de la nasa para este ejemplo)

server 198.123.30.132 # ntp-nasa.arc.nasa.gov

Para aliviar el problema de que muchos servidores le darán timeout al intentar sincronizar, puede ud. añadir muchas lineas con diferentes servidores NTP públicos. los más cercanos (haciendo un ping a cada uno lo puede validar. el que responda en menos milisegundos es el mejor) deberían ir listados primero, luego los demás.

es conveniente comentar esta linea (mas sobre fudge en el RFC):

#fudge 127.127.1.0 stratum 10

y dejar el resto del archivo como está: todo como comentario nada más.

Una vez que guardó su archivo ntp.conf, añada una linea en el /etc/rc.d/rc.local para llamarlo a ejecutarse cada que se inicia la máquina:

echo Levanta el Servidor de Tiempo NTP...

/usr/sbin/ntpd

y ya está listo.

para saber que funciona, ejecute el programa ntpd, y luego busque mediante tail /var/log/messages, las siguientes lineas:

Apr 6 22:42:27 asterix ntpd[7217]: ntpd 4.1.1a@1.791 Tue Mar 4 18:00:29 PST 2003 (1)

Apr 6 22:42:27 asterix ntpd[7217]: precision = 25 usec

Apr 6 22:42:27 asterix ntpd[7217]: kernel time discipline status 0040

Apr 6 22:45:55 asterix ntpd[7217]: time set 3.885395 s



Mandele un correo al administrador del servidor NTP público indicando que está ud. Sincronizando con ellos. No es necesario pero es un
gesto de cordialidad esperado en ellos. Yo me he topado con servidores a los que al inicio no mandé correo, y luego de un tiempo ya no pude conectarme más hacia su servidor.

Por otro lado, no recomiendo que abra el puerto del NTP (123) al público en general, ya que ha sido blanco de muchos ataques en el pasado, asi que es mejor que lo bloquee en su firewall.

Si desea protegerse más, hay todo un sistema de seguridad que permite el uso de PKI para asegurar que el servidor de tiempo es quién dice ser, y no otro mediante un ataque de "Man in the middle". Busque como hacer eso en la sección de documentación de http://www.ntp.org.

ahora puede hacer que todos los demás dispositivos de su red local se sincronizen contra la ip de su servidor NTP.



Dudas o comentarios, por favor lea el RFC

Redimido.

17/04/2004, 17:09:27 horas.