Los relojes de los sistemas in­fo­r­má­ti­cos suponen una valiosa ayuda a cua­l­quie­ra que necesite saber qué hora es y no tenga ni un reloj de pulsera ni un sma­r­t­pho­ne a mano. Sin embargo, muy pocas personas saben que la hora que marca el sistema no solo es relevante para el usuario, sino también para los propios or­de­na­do­res. Durante un in­te­r­ca­m­bio de in­fo­r­ma­ción entre dos o más sistemas y, co­n­cre­ta­me­n­te, para el correcto fu­n­cio­na­mie­n­to de procesos de­pe­n­die­n­tes de la red, los sellos de tiempo de­sem­pe­ñan un papel central. Con el objetivo de prevenir co­m­pli­ca­cio­nes del sistema debido a la exi­s­te­n­cia de tiempos así­n­cro­nos, en 1985 se publicó el llamado Network Time Protocol (NTP).

¿Qué es el NTP?

El protocolo de tiempo de red o NTP es el resultado del trabajo de de­sa­rro­llo realizado por David L. Mills, profesor de la Uni­ve­r­si­dad de Delaware (Estados Unidos). La primera es­pe­ci­fi­ca­ción oficial del protocolo, que forma parte de la familia de pro­to­co­los de Internet, se publicó en se­p­tie­m­bre de 1985 en la RFC 985. El NTP se describe en este documento como un protocolo para si­n­cro­ni­zar varios relojes de red usando un conjunto de clientes y se­r­vi­do­res re­pa­r­ti­dos. Como pre­de­ce­so­res, se hace mención al mensaje ICMP Timestamp y al Time Protocol, ya que sus funciones fueron incluidas en el Network Time Protocol. El NTP se basa en el protocolo de da­ta­gra­mas de usuario (User Datagram Protocol o UDP), que permite enviar da­ta­gra­mas sin que se haya es­ta­ble­ci­do pre­via­me­n­te una conexión. Es decir, utiliza UDP como capa de tra­n­s­po­r­te usando el puerto 123.

El NTP pro­po­r­cio­na los me­ca­ni­s­mos de protocolo básicos ne­ce­sa­rios para si­n­cro­ni­zar los relojes de los di­fe­re­n­tes sistemas con una precisión del orden de na­no­se­gu­n­dos. Además, contiene in­di­ca­cio­nes para es­pe­ci­fi­car la precisión y las posibles fuentes de error del reloj del sistema local, así como las pro­pie­da­des del reloj de re­fe­re­n­cia. No obstante, este protocolo se limita a es­pe­ci­fi­car la ar­qui­te­c­tu­ra de la re­pre­se­n­ta­ción de datos y los formatos de mensaje, sin que por sí mismo lleve a cabo la si­n­cro­ni­za­ción y el algoritmo de filtrado.

De­fi­ni­ción

El Network Time Protocol (NTP) es un protocolo descrito en la RFC 958 para la si­n­cro­ni­za­ción de relojes en sistemas in­fo­r­má­ti­cos. Se basa en el protocolo UDP sin conexión (puerto 123) y pertenece a la familia de pro­to­co­los de Internet. En el proceso de si­n­cro­ni­za­ción, el NTP utiliza el tiempo universal coor­di­na­do (UTC), que obtienen los clientes y los se­r­vi­do­res según un sistema je­rá­r­qui­co.

¿Cómo funciona el protocolo de tiempo de red?

Para si­n­cro­ni­zar los relojes de los or­de­na­do­res con una precisión de na­no­se­gu­n­dos, el Network Time Protocol utiliza el estándar Tiempo universal coor­di­na­do (UTC), que fija la hora universal válida y unitaria desde 1972. Esto se determina uti­li­za­n­do varios métodos, in­clu­ye­n­do sistemas de radio y satélite. Algunos servicios im­po­r­ta­n­tes como el Sistema de Po­si­cio­na­mie­n­to Global (GPS) están equipados con re­ce­p­to­res es­pe­cia­les para recibir las señales. Dado que no sería rentable ni factible equipar a cada uno de los or­de­na­do­res con estos re­ce­p­to­res, existen también los de­no­mi­na­dos se­r­vi­do­res de tiempo primarios (Primary Time Servers), que también están equipados con un receptor UTC. Uti­li­za­n­do pro­to­co­los como NTP, estos se­r­vi­do­res si­n­cro­ni­zan los relojes de los or­de­na­do­res de su red.

En este proceso de si­n­cro­ni­za­ción in­te­r­vie­ne un sistema es­tru­c­tu­ra­do de forma je­rá­r­qui­ca conectado a la fuente UTC con di­fe­re­n­tes niveles de distancia, también conocidos como estratos de reloj. Todos los di­s­po­si­ti­vos técnicos que obtienen la hora de un servidor de tiempo primario o de un sistema de na­ve­ga­ción por satélite se cla­si­fi­can en la categoría estrato 0. Como ejemplos podemos destacar los relojes atómicos o los relojes de radio. Un ordenador que obtiene el UTC de un reloj atómico o de un reloj de radio co­rre­s­po­n­de­rá al estrato 1 y así co­n­se­cu­ti­va­me­n­te. Cada sistema es al mismo tiempo cliente del estrato pre­ce­de­n­te y servidor para los sistemas del estrato siguiente (al menos en potencia).

Nota

En la si­n­cro­ni­za­ción NTP existen varios al­go­ri­t­mos que sirven para so­lu­cio­nar las derivas de reloj relativas a ci­r­cu­n­s­ta­n­cias de tiempo y espacio: así, por ejemplo, los pro­ce­di­mie­n­tos que miden el tiempo de respuesta de los paquetes (tiempo que un paquete tarda desde la fuente hasta el destino y viceversa) compensan las va­ria­cio­nes locales de reloj con el algoritmo de Berkeley. El algoritmo de Marzullo se utiliza para la re­so­lu­ción de problemas en el entorno de pro­ce­sa­dor.

Qué distingue a NTP

Las ca­ra­c­te­rí­s­ti­cas pri­n­ci­pa­les del Network Time Protocol, que ya está di­s­po­ni­ble en su cuarta versión (NTPv4), pueden resumirse de la siguiente manera:

  • NTP utiliza un reloj de re­fe­re­n­cia que actúa como punto fijo para todos los procesos de si­n­cro­ni­za­ción. Por lo tanto, todos los relojes están si­n­cro­ni­za­dos respecto a ese reloj de re­fe­re­n­cia. Desde el principio se utilizó el estándar de Tiempo universal coor­di­na­do (UTC), por el cual el mundo regula los relojes y el tiempo.
  • NTP es un protocolo tolerante a fallos que busca au­to­má­ti­ca­me­n­te las mejores fuentes de tiempo para realizar la si­n­cro­ni­za­ción. Para minimizar los fallos acu­mu­la­dos, es capaz de se­le­c­cio­nar y combinar varias fuentes. Cuando es posible, el protocolo de tiempo de red detecta e ignora las fuentes de tiempo que pro­po­r­cio­nan valores desviados de manera temporal o pe­r­ma­ne­n­te.
  • Es un protocolo altamente escalable: en cada red de si­n­cro­ni­za­ción es posible encontrar varios relojes de re­fe­re­n­cia. Además, cada nodo de la red es capaz de tra­n­s­mi­tir in­fo­r­ma­ción horaria en una es­tru­c­tu­ra je­rá­r­qui­ca bi­di­re­c­cio­nal (punto a punto) o uni­di­re­c­cio­nal (en una dirección).
  • Es muy preciso. Gracias a que puede se­le­c­cio­nar la mejor fuente para realizar la si­n­cro­ni­za­ción, presenta una re­so­lu­ción teórica en un rango de na­no­se­gu­n­dos de 2−32 segundos (es decir, 0,233 na­no­se­gu­n­dos)
  • Puede so­lu­cio­nar los problemas te­m­po­ra­les de conexión de red. Para ello, el protocolo utiliza la in­fo­r­ma­ción al­ma­ce­na­da para de­te­r­mi­nar la hora actual o las de­s­via­cio­nes.

¿Qué sistemas ope­ra­ti­vos soportan NTP?

En su origen, el protocolo de tiempo de red fue de­sa­rro­lla­do co­n­cre­ta­me­n­te para sistemas UNIX en los que el protocolo, hasta día de hoy, está im­ple­me­n­ta­do en forma de proceso que se ejecuta en segundo plano (daemons) ntpd. Es posible uti­li­zar­lo como cliente para si­n­cro­ni­zar el sistema local y como servidor NTP para si­n­cro­ni­zar otros sistemas. Durante mucho tiempo, se mantuvo como la solución más extendida a la hora de im­ple­me­n­tar NTP en di­s­tri­bu­cio­nes Linux. Las versiones más actuales se decantan cada vez más a menudo por la apli­ca­ción cliente timesyncd, que forma parte del sistema de gestión systemd, para la si­n­cro­ni­za­ción de los relojes. También los sistemas ope­ra­ti­vos macOS y Windows utilizan ac­tua­l­me­n­te el Network time protocol para obtener el UTC mediante procesos de sistema simples que funcionan vía internet y no necesitan software adicional.

¿Cuáles son las al­te­r­na­ti­vas al Network Time Protocol?

Aunque el protocolo NTP es co­n­si­de­ra­do en todo el mundo como el estándar de si­n­cro­ni­za­ción horaria, eso no significa que sea infalible, es­pe­cia­l­me­n­te si hablamos de seguridad. Dado que se basa en el protocolo sin conexión UDP, podría permitir a un atacante enviar paquetes a un servidor NTP con una dirección de remitente falsa mediante IP spoofing. La dirección del remitente es la dirección del sistema que hay que atacar. El servidor envía su respuesta, que es mucho más larga que la petición enviada por el atacante, de vuelta al supuesto remitente, que es el sistema víctima. Imagina que el atacante comenzara a enviar a gran escala un gran número de esas pe­ti­cio­nes ma­ni­pu­la­das. En ese caso, podría so­bre­ca­r­gar el sistema de destino –no te pierdas nuestro artículo DoS y DDoS: resumen rápido de patrones de ataque.

En co­n­se­cue­n­cia, existen varios proyectos co­n­sa­gra­dos al de­sa­rro­llo de so­lu­cio­nes al­te­r­na­ti­vas y más seguras que puedan uti­li­zar­se como su­s­ti­tu­tas de las so­lu­cio­nes ha­bi­tua­les de cliente y servidor NTP:

  • tlsdate: tlsdate fue de­sa­rro­lla­do en 2012 por Jacob Appelbaum y publicado en GitHub. En lugar de UDP, tlsdate utiliza el protocolo TCP para el tra­n­s­po­r­te de datos. El servicio cifra la co­n­fi­gu­ra­ción de la conexión mediante TLS para evitar la ma­ni­pu­la­ción de los paquetes de datos. Además, tlsdate utiliza las funciones TLS “Se­r­ve­rHe­llo” y “Clie­n­tHe­llo” para si­n­cro­ni­zar los relojes. Sin embargo, esta al­te­r­na­ti­va a NTP solo funciona con TLS 1.1 y 1.2.
  • Ntimed: Ntimed es una im­ple­me­n­ta­ción de NTP que se centra es­pe­cí­fi­ca­me­n­te en la seguridad y el re­n­di­mie­n­to. Para ello, el código del programa de ntpd, en el que se basa Ntimed, fue “pu­ri­fi­ca­do” y op­ti­mi­za­do. Este paquete de software, que consta de cliente, servidor y archivo maestro, está di­s­po­ni­ble gra­tui­ta­me­n­te en el di­re­c­to­rio oficial de Ntimed-GitHub.
  • NTPsec: NPTsec es también una variante del servicio clásico de ntpd. Sin embargo, ahorra más de 175 000 líneas de código en co­m­pa­ra­ción con el original. Además, el equipo de de­sa­rro­llo ha su­s­ti­tui­do una serie de funciones string que no eran seguras como “strcpy”, “sprintf” o “gets” por su­s­ti­tu­tos seguros. Es posible consultar de­ta­lla­da­me­n­te estas y otras di­fe­re­n­cias en la página web oficial del proyecto Open Source.

Además de las al­te­r­na­ti­vas basadas en software, existe también el protocolo Precision Time Protocol (PTP). A di­fe­re­n­cia del Network Time Protocol, este protocolo de red para sistemas Linux se centra ex­plí­ci­ta­me­n­te en una precisión de si­n­cro­ni­za­ción es­pe­cia­l­me­n­te alta. En el protocolo PTP estamos hablando de una precisión de mi­cro­se­gu­n­dos, es decir, mayor aún que en el protocolo NTP. Además, el protocolo funciona con un re­n­di­mie­n­to del pro­ce­sa­dor y del ancho de banda mínimo, por lo que es una opción perfecta para di­s­po­si­ti­vos sencillos de bajo precio.

Nota

Aunque existe cierta libertad a la hora de elegir entre los di­fe­re­n­tes pro­to­co­los o servicios de si­n­cro­ni­za­ción, la si­n­cro­ni­za­ción en sí misma es un proceso ab­so­lu­ta­me­n­te necesario para la fu­n­cio­na­li­dad de varias apli­ca­cio­nes de red (es­pe­cia­l­me­n­te en Internet). Las tra­n­sac­cio­nes de bases de datos o la co­mu­ni­ca­ción por correo ele­c­tró­ni­co, por ejemplo, presentan fallos rá­pi­da­me­n­te si el cliente y el servidor no están en la misma longitud de onda en términos de tiempo. Un papel aún más im­po­r­ta­n­te es el de la hora exacta del sistema en el control del tráfico aéreo, donde es esencial que los valores sean exactos en términos de mi­cro­se­gu­n­dos para que no haya problemas en el fu­n­cio­na­mie­n­to.

pool.ntp.org: el clúster de Internet de miles de se­r­vi­do­res NTP

El proyecto pool.ntp.org, iniciado por Adrian von Bider y mantenido y de­sa­rro­lla­do por Ask Bjørn Hansen desde julio de 2005, es un enorme clúster virtual con más de 4000 se­r­vi­do­res de tiempo NTP. La mayoría de los se­r­vi­do­res di­s­tri­bui­dos por todo el mundo y uti­li­za­dos por varios millones de sistemas se en­cue­n­tran en Europa. El re­po­si­to­rio NTP Pool ha crecido a lo largo del tiempo de forma constante gracias a la comunidad de este exitoso proyecto: cualquier persona que disponga de un servidor con dirección IP estática que esté pe­r­ma­ne­n­te­me­n­te conectado a Internet puede ser incluido en el clúster. A pesar de la creciente demanda, el servicio puede uti­li­zar­se gra­tui­ta­me­n­te y sin re­s­tri­c­cio­nes.

El re­po­si­to­rio NTP Pool para usuarios de UNIX / Linux

Si quieres utilizar el NTP Server Pool para si­n­cro­ni­zar la hora del sistema de tus di­s­po­si­ti­vos, puedes hacerlo desde UNIX o Linux uti­li­za­n­do el servicio ntpd. Lo único que tienes que hacer es im­ple­me­n­tar la siguiente co­n­fi­gu­ra­ción en el NTP drift file:

driftfile /var/lib/ntp/ntp.drift
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org

La condición previa es que la hora del sistema esté fijada al menos de forma apro­xi­ma­da. Para verificar el estado del servicio ntpd, introduce, pasados unos minutos, el siguiente comando de consulta:

ntpq -pn

El cliente NTP presenta una lista con las di­re­c­cio­nes IP de los se­r­vi­do­res de tiempo del Pool uti­li­za­dos alea­to­ria­me­n­te. Si alguno de esos se­r­vi­do­res está marcado con un asterisco (*), la hora del sistema podrá si­n­cro­ni­zar­se como queramos.

Es­ta­ble­cer pool.ntp.org como fuente de tiempo en Windows

Como Windows soporta au­to­má­ti­ca­me­n­te el protocolo, el re­po­si­to­rio NTP Pool también está di­s­po­ni­ble para los usuarios de sistemas Microsoft que deseen uti­li­zar­lo. Solo es necesario in­tro­du­cir una dirección adecuada de pool.ntp.org en la co­n­fi­gu­ra­ción de la hora de Internet (por ejemplo, “es.pool.ntp.org” en España). Para ello, abre el panel de control y se­le­c­cio­na “Fecha y hora”:

En la pestaña “Hora de Internet” se accede al menú del servidor de hora, donde se puede in­tro­du­cir la dirección del servidor NTP favorito desde el pool.ntp.org:

Cuando los cambios se producen con éxito, Windows ajusta la hora del sistema en la próxima si­n­cro­ni­za­ción:

Ir al menú principal