NTP
Sumario
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
- Ref: NTP Documentation
- Libro: Linux Cookbook de Carla Schroder (capítulo 19)
Conceptos
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:
- Ref: Tipos de servicio
- Ref: KubuntuZeroconf