NTP

De Astillas.net

NTP es el acrónimo inglés de Network Time Protocol, un mecanismo ideado para mantener sincronizados los relojes de los ordenadores a través de una red de datos.

Enlaces y referencias

Conceptos

Sincronizar la hora en red.png

Configuración

En Debian se necesitan los siguientes paquetes:

Servidor

La configuración del servidor ser lleva a cabo en el archivo /etc/ntp.conf donde hay que indicar:

  • Localización de archivos
  • Servidores externos con los que sincronizar
  • Redes internas a las que dar servicio
  • Restricciones de acceso de los clientes

La siguiente configuración es un ejemplo y aún así es funcional:

# Localización de archivos 
driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/

#   Pool de servidores de Europa/España
server 0.es.pool.ntp.org
server 0.europe.pool.ntp.org
server 3.europe.pool.ntp.org

# A quién servimos 
broadcast 192.168.0.255

# Limitamos nuestra escucha al interfaz de la red local (si existe)
interface listen eth1

Clientes

La configuración de los clientes es bastante más sencilla. El archivo de configuración es el mismo (/etc/ntp.conf) pero en él podemos limitarnos a indicarles cuáles son los servidores.

# Archivo de trabajo 
driftfile /var/lib/ntp/ntp.drift

# Servidor principal
server 192.168.0.99

# Servidor de reserva por si falla el primero 
fudge 192.168.0.98 stratum 10

Seguridad

Directivas de control de acceso

Dentro del archivo de configuración la directiva restrict permite definir las reglas de acceso al servidor dependiendo de la dirección origen. Su síntaxis es sencilla:

  restrict dirección [máscara] [conmutador] [...]

La dirección puede ser:

  • El texto default referencia a la entrada predeterminada en la lista. Es equivalente a 0.0.0.0 mask 0.0.0.0.
  • Una dirección IP como dirección de red o
  • Una dirección IP como dirección de una máquina siempre que se añada una máscara de red con la directiva mask N.N.N.N.
  • Un nombre de máquina
Conmutador Función que activa
ignore Ignora todos los paquetes NTP
nomodify No permite cambios en la configuración desde esa dirección. Las consultas, en cambio, sí que están permitidas.
nopeer No permite el emparejamiento desde esa dirección. Esto significa que los únicos servidores que tienen permitido suministrar el servicio de hora son los especificados en la directiva server; otras máquinas no podrán emplear a ésta como un servidor de tiempo.
noquery Ignora todos los paquetes NTP de tipo 6 y 7, lo que provoca que no se puedan efectuar consultas, registro remoto de eventos o peticiones de configuración en tiempo de ejecución. El servicio de tiempo no se ve afectado.

Integración en la red

DHCP

Empleando el programa dnsmasq es posible pasar la información de los servidores de tiempo cuando proporcionamos una dirección IP nueva a una máquina.

Para ello buscamos primero el número de opción correspondiente empleando la orden:

# dnsmasq --help dhcp 
Opciones DHCP conocidas:
  1 netmask
  2 time-offset
  ...
 42 ntp-server
#

por lo que añadimos la siguiente estrofa al archivo de configuración /etc/dnsmasq.conf:

# Set two NTP servers 
dhcp-option=42,192.168.0.99,192.168.0.98

aunque si usamos como dirección 0.0.0.0 se enviará la dirección correspondiente a la máquina donde está funcionado el programa dnsmasq.

Para que los clientes empleen esta información se debe incluir expresamente en la configuración del programa dhclient, que en Debian se encuentra en /etc/dhcp/dhclient.conf:

  request subnet-mask, broadcast-address, time-offset, routers,
       domain-name, domain-name-servers, domain-search, host-name,
       netbios-name-servers, netbios-scope, interface-mtu,
       rfc3442-classless-static-routes, ntp-servers;

Avahi

Los servidores locales NTP pueden publicarse en la red empleando herramientas como avahi.

En el servidor publicamos el servicio manualmente con:

$ avahi-publish -s -v "Sincronizacion de relojes" _ntp._udp 123 
Versión del servidor: avahi 0.6.27; Nombre del equipo: maginot.local
Establecido bajo el nombre «Sincronizacion de relojes»

y para comprobar que está publicado ejecutamos desde otra máquina en la red lo siguiente:

$ avahi-browse -r _ntp._udp 
+   eth0 IPv4 Sincronizacion de relojes                     NTP Time Server      local
=   eth0 IPv4 Sincronizacion de relojes                     NTP Time Server      local
   hostname = [maginot.local]
   address = [192.168.0.99]
   port = [123]
   txt = []

Para hacer permanente la publicación este servidor lo incluímos en la configuración del programa avahi-daemon en el archivo /etc/avahi/services/ntp.service con el siguiente contenido:

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">

<service-group>

  <name>Sincronizacion de relojes en red</name>

  <service>
    <type>_ntp._udp</type>
    <port>123</port>
  </service>

</service-group>

y le pedimos que lo incluya releyendo el contenido:

# avahi-daemon --reload

Algunas referencias sobre este tema: