- ENTRADA 026 -
En hora con NTP y ntpdate
Llegó el dia D, hora H. Bien chicos, sincronicemos los relojes...
Si usas un servicio de doble autenticación (2FA) para loguearte en webs sabrás que necesitas tener el reloj del sistema lo más preciso posible, ya que los códigos 2FA proporcionados por los programas de autenticación se basan en el tiempo y si no está sincronizado con la hora oficial, serán inválidos. Normalmente las aplicaciones de este tipo permiten un desfase de pocos segundos, así que hay que configurar la hora del sistema lo más precisa posible, y para ello usaré NTP y ntpdate bajo GNU/Linux.
Para saber más sobre 2FA:
► 2FA: Autenticación en dos factores
NTP
Un poco de teoría
Network Time Protocol es el sistema más utilizado porque permite lanzar sincronizaciones cada pocos segundos o cada pocas horas, al servidor o servidores que quieras, según lo configures. Para que NTP funcione hay que lanzar el demonio ntpd desde init o systemd.
El archivo de configuración se encuentra en /etc/ntp.conf. y aquí es donde hay que especificar las conexiones y cómo se harán. NTP funciona mediante niveles o estratos. NTP es un protocolo escalonado y se divide en capas (estratos), que determinan la distancia desde el 'reloj de referencia' (nivel 0), que son relojes atómicos de cesio, y los GPS, y son los que distribuyen el Tiempo Universal Coordinado (UTC) a otros dispositivos. El último estrato posible es el 16.
Los dispositivos conectados a un reloj de referencia son los servidores de estrato 1, y a su vez los que se concetan a ellos son los de estrato 2, y así hasta 16.
Elegir servidor
Así pues, lo primero es configurar un servidor. Puedes elegir el que quieras, que sea más cercano a tu zona.
Existen además los servidores pool, mediante los que se efectúan diversas conexiones a otros servidores para mejorar la precisión, pero no son necesarios en un Pc doméstico, y además efectuan demasiadas conexiones hacia afuera.
Respecto a los estratos, se puede especificar solo un nivel, ya que no estoy prestando servicio NTP, solo estoy poniendo en hora mi Pc (gracias a @pela0 por la info).
Hay dos modificadores que podemos usar:
- burst: Si el servidor esta disponible se envían 8 paquetes en lugar de 1, dejando 16 segundos entre el primer y segundo paquete y 2 segundos entre el resto de paquetes.
- iburst: Es igual que el anterior pero solo si el servidor no esta disponible.
Frecuencia de sondeo
Al conectarse a los servidores para hacer la sincronización, NTP por defecto utiliza 1.024 segundos de tiempo máximo y 64 segundos de tiempo mínimo. Esto quizá es demasiado, así que podemos cambiar los valores.
Se usan potencias de 2, así que yo he configurado unos tiempos diferentes mediante dos opciones:
- minpoll 12 (2^12): 4.096 segundos 1,13 horas
- maxpoll 14 (2^14): 16.384 segundos 4,5 horas
Estos valores son suficientes para un Pc de escritorio. Para que se tenga en cuenta el minpool/maxpool, debes agregarlos por servidor en el ntp.conf
NOTA:
minpoll tiene un límite de 4 (16 segundos)
maxpoll tiene un límite de 17 (36,4 horas)
Restricciones
El acceso al servidor puede controlarse mediante restricción de acciones de los clientes. Existen varias opciones:
- ignore: Ignorar todos los paquetes provenientes de una dirección IP específica.
- kod: Si se deniega el acceso se envía un paquete del tipo “beso de la muerte”.
- limited: Deniega el servicio si los paquetes sobrepasan los limites establecidos con el comando discard.
- lowpriotrap: Declara los mensajes atrapados de baja prioridad.
- nomodify: Ignorar todos los paquetes de esa dirección IP que intenten modificar el servidor excepto las respuestas a las consultas realizadas, que obviamente modifican la hora del servidor.
- noquery: Ignorar todos provenientes de esa dirección IP que soliciten consultas de información o configuración.
- nopeer: Proporcionar servicio a esa IP solo si ya se estaba proporcionando servicio a la misma.
- noserve: Ignorar los paquetes que no consultan o modifican el estado del servidor, esto es, consultas de sincronización de relojes.
- notrap: No proveer el servicio de atrapar mensajes de control de paquetes de consulta del estado del servidor.
- notrust: No utilizar esta IP como fuente de incronización.
- ntpport: Aplicar la restricción solo si el puerto origen del paquete es el de NTP (UDP 123).
- non-ntport: Aplicar la restricción si el puerto origen del paquete no es el de NTP (UDP 123).
- version: Ignorar el ordenador si no soporta la versión de NTP indicada
Ficheros log
Existen dos archivos de monitorización de NTP:
- driftfile: Donde almacenar la diferencia del reloj local, normalmente en /var/lib/ntp/drif
- logfile: Log de funcionamiento, normalmente en /var/log/ntp.log
Consultas a NTP
Para saber en cualquier momento qué está haciendo NTP existe el comando ntpq -p
Cuando lanzamos el comando veremos algo así:
remote refid st t when poll reach delay offset jitter ============================================================================== +ns2.puck.ch 194.42.48.120 3 u 394 1024 377 33.018 -0.087 0.382 +gaia.ailab.ch 129.132.2.21 3 u 391 1024 377 32.398 -0.815 0.126 *linnaeus.inf.ed 129.215.64.241 2 u 432 1024 377 44.179 0.439 0.370
- remote: IP o nombre de host
- refid: Consulta la dirección de host ntp anterior
- st: Estrato
- when: Cuántos segundos se sincronizó la hora
- poll: Cuántos segundos después de la próxima actualización
- reach: Número de veces que el servidor ntp superior ha solicitado una actualización
- delay: Retraso de la red
- offset: Compensación de tiempo
- jitter: Tiempo del sistema y diferencia de tiempo de BIOS
Los valores son:
*: El servidor es el elegido actualmente como servidor de referencia. +: El servidor es utilizado en el algoritmo de cálculo. -: El servidor ha sido descartado por ofrecer respuestas incorrectas. x: El servidor ha sido descartado por problemas de distancia de sincronización. #: El servidor es candidato a entrar en el algoritmo de calculo si alguno de los existentes no se encuentra disponible. Espacio: El servidor ha sido descartado por no poder consultarse o ser local.
Ejemplo
Dejo aquí mi /etc/ntp.conf:
# Associate to Arch's NTP pool #server 0.arch.pool.ntp.org #server 1.arch.pool.ntp.org #server 2.arch.pool.ntp.org #server 3.arch.pool.ntp.org server hora.roa.es iburst minpoll 12 maxpoll 14 restrict default kod limited nomodify nopeer noquery notrap restrict 127.0.0.1 restrict ::1 driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp.log
NTPDATE
ntpdate es un comando que forma parte del paquete ntp en algunas distribuciones y que sirve para poner el reloj en hora cada vez que se lance el comando desde consola.
Para poner en hora el sistema hay que poner el siguiente comando como root:
ntpdate servidor-ntp
Este comando se puede añadir a cron, el demonio de autoejecución de GNU/Linux. Si solo quieres poner el sistema en hora al iniciar el equipo, hay que editar el archivo de cron mediante el comando crontab:
crontab -e
@reboot /usr/sbin/ntpdate hora.roa.es
Podemos revisar la lista de cron para ver si se ha incorporado bien:
crontab -l
Esto es todo, espero que sea de utilidad.
Tags #ntp #ntpdate #ntpd
/blog/