NTP entre oficinas: la pequeña cosa que rompe AD, VPN y certificados

¿Te fue útil?

El incidente empieza con una mentira tan pequeña que nadie la ve: el reloj en un extremo de la WAN no es el mismo que el reloj en el otro.
Los usuarios lo llaman “la VPN está caída”. Seguridad lo llama “los certificados están rotos”. Los administradores de AD lo llaman “Kerberos siendo Kerberos”.
Tú lo llamas martes.

La sincronización horaria entre oficinas es aburrida hasta que deja de serlo. Entonces es una falla de sistemas distribuidos con un entero en el centro: segundos.
Si tus sucursales no comparten la hora igual que comparten DNS, estás a un enlace ISP inestable de tener un caos de autenticación.

Por qué el tiempo rompe todo (AD, VPN, TLS)

NTP no es “higiene de infraestructura”. Es una dependencia de confianza. En el momento en que dos sistemas discrepan en la hora, discrepan sobre si un evento ocurrió.
Los sistemas de autenticación no negocian con incertidumbre; la rechazan.

Active Directory y Kerberos: el desfase de reloj es una característica de seguridad

Los tickets de Kerberos tienen marcas de tiempo. No es un detalle menor: las marcas de tiempo forman parte del modelo de protección contra reproducción.
Si la hora del cliente difiere demasiado de la del controlador de dominio, los tickets se consideran inseguros y son rechazados.
En Windows verás variaciones de “KRB_AP_ERR_SKEW” o “The time difference between the client and server is too great.”

Por defecto, AD tolera un desfase limitado (comúnmente cinco minutos). Cinco minutos suena generoso hasta que te das cuenta de lo fácil que es que un host VM,
un portátil que estuvo en suspensión y un firewall de sucursal que hace NAT “útil” apilen pequeñas derivaciones en una grande.

VPN y SSO: el token que “caducó” antes de emitirse

Las pilas modernas de VPN están pegadas a proveedores de identidad: aserciones SAML, tokens OIDC, cookies firmadas, comprobaciones de posture de dispositivo de corta vida.
Estos son sensibles al tiempo. Un token válido por 60 segundos es un gran control de seguridad hasta que tu sucursal está 90 segundos en el futuro.

El modo de fallo es predecible: los usuarios se autentican con éxito en algún punto, luego la pasarela VPN rechaza la aserción posterior como “aún no válida”
o “caducada”. Todos culpan al IdP. El IdP es inocente. Tus relojes no lo son.

Certificados TLS: “aún no válido” es deriva horaria, no un drama de PKI

TLS tiene una regla brutalmente simple: los certificados tienen ventanas de validez. Si la hora de tu nodo es incorrecta, el certificado puede ser rechazado aunque se haya emitido correctamente.
“x509: certificate has expired or is not yet valid” es el equivalente TLS de “tu reloj de pulsera te miente”.

Los sistemas distribuidos son sensibles al tiempo incluso cuando dicen que no lo son

Puedes construir sistemas distribuidos sin relojes estrictamente sincronizados, pero aún necesitas monotonicidad y un acuerdo razonable de reloj real para:
correlación de logs, respuesta a incidentes, registros de facturación, validación de tokens, tareas programadas y pistas de auditoría.
La pregunta no es “¿necesitamos NTP?” sino “¿cuánto fallo estamos dispuestos a aceptar cuando NTP se degrada?”

Chiste #1: La sincronización de tiempo es como usar hilo dental: todos están de acuerdo en que es necesario, y la mayoría solo lo hace después de que algo empieza a sangrar.

Cómo funciona realmente NTP a través de una WAN

NTP es simple en el mismo sentido que TCP es “simple”: un protocolo pequeño con muchos casos límite operativos.
A través de oficinas te encontrarás con el trío desagradable: latencia asimétrica, pérdida de paquetes y dispositivos que creen ser más listos que el tiempo.

Desfase, retraso, jitter: tres números que deciden tu día

Cuando un cliente NTP consulta a un servidor, intenta estimar la diferencia entre su reloj y el del servidor (desfase).
También mide el retraso de ida y vuelta de la red (retraso). Con el tiempo observa la varianza (jitter).
Si el retraso es alto pero estable, NTP aún puede funcionar. Si el jitter es alto, tu estimación de desfase se vuelve ruidosa y el cliente puede negarse a hacer step.

Stepping vs slewing: la diferencia entre “correcto” y “seguro”

Un reloj puede corregirse haciendo un step (saltar instantáneamente) o slewing (ajustando gradualmente la frecuencia).
El step es rápido y a menudo necesario cuando una máquina arranca con tiempo basura. También es peligroso en marcha:
dar un paso hacia atrás puede romper bases de datos, confundir logs y hacer que tareas programadas se ejecuten dos veces.

Una configuración sensata permite el step al arranque (o cuando el desfase es enorme) y slewing durante la operación normal.
Chrony suele ser mejor en esto que el clásico ntpd en redes desordenadas. En Windows, w32time tiene sus propias reglas y limitaciones;
trátalo como un ciudadano especial, no como un clon de Linux.

Stratum no es “calidad”, es “distancia”

El stratum indica cuán lejos está un servidor de un reloj de referencia. Stratum 1 está conectado directamente a una fuente de referencia (GPS, reloj atómico, radio).
Stratum 2 sincroniza desde stratum 1, y así sucesivamente. Un stratum bajo no es automáticamente “mejor” si el camino es poco fiable.
Un servidor stratum 3 con conectividad estable puede superar a un stratum 1 a través de una WAN frágil.

Realidad WAN: asimetría y filtrado

NTP asume que el retraso de red es aproximadamente simétrico. A través de enlaces de oficina, a menudo no lo es.
SD-WAN puede reordenar paquetes. Enlaces LTE de respaldo pueden provocar picos de latencia. Firewalls stateful pueden tratar UDP/123 como una sugerencia.
Una sola regla de “endurecimiento de seguridad” que bloquee UDP/123 saliente desde VLANs de sucursales puede crear una isla de deriva.

“Usar pool público” no es un diseño corporativo

Los pools públicos de NTP son excelentes para Internet público. Las empresas son diferentes: necesitas comportamiento predecible, reglas de firewall estrictas,
dependencias deterministas, control de cambios apto para auditoría y monitorización.
Usa fuentes externas con cuidado en el borde y luego distribuye el tiempo internamente con tus propios servidores.

Hechos e historia interesantes (porque explican las trampas)

  • NTP es antiguo—por diseño: el protocolo data de principios de los 80 y evolucionó para sobrevivir en redes poco fiables.
  • Los segundos intercalares son políticos: existen porque la rotación de la Tierra no es constante, y los organismos estándar siguen debatiendo si dejar de insertarlos.
  • Kerberos heredó su tolerancia de desfase: la ventana de “unos minutos” viene de equilibrar seguridad (prevención de reproducción) e imperfecciones reales del reloj.
  • Stratum no es una insignia: es un conteo de saltos desde un reloj de referencia; Internet está lleno de servidores de bajo stratum que están equivocados.
  • Los dominios Windows tempranos eran sensibles al tiempo antes de que “Zero Trust” fuera moda: la autenticación de dominio lleva tiempo dependiendo del tiempo desde hace mucho, solo que ahora es más visible.
  • La virtualización empeoró el tiempo: los relojes invitados pueden desviarse si el host está sobrecargado o la sincronización está mal configurada tanto en invitado como en el hipervisor.
  • NTP puede ser weaponizado: servidores mal configurados han sido usados para ataques de reflexión/amplificación, por eso los equipos de seguridad a veces “resuelven” NTP bloqueándolo.
  • Relojes monotónicos y de pared son herramientas distintas: el SO mantiene ambos; tus logs de aplicación usan tiempo de pared mientras que los planificadores y timeouts prefieren tiempo monotónico.

Arquitectura que sobrevive oficinas, enlaces y auditorías

Qué quieres: una jerarquía interna de tiempo pequeña

El objetivo es aburrido: cada sistema en cada oficina acuerda la hora dentro de un margen estrecho, incluso si la WAN es inestable.
Se llega allí con una jerarquía:

  • Referencias externas: pocas fuentes ascendentes bien escogidas (pool público, NTP del ISP, GPS en HQ) alimentando un pequeño conjunto de servidores internos.
  • Servidores de tiempo internos: al menos dos por región o sitio principal, alcanzables por todos los clientes.
  • Sucursales: los clientes se sincronizan desde servidores internos, no desde Internet. Las sucursales más grandes pueden ejecutar un relé NTP local para resiliencia.
  • Controladores de dominio: seguir la jerarquía de tiempo de AD correctamente en lugar de improvisar.

Regla específica de AD: el PDC Emulator es el “jefe del tiempo”

En un dominio AD, el tiempo fluye en una jerarquía específica. Típicamente:
el titular del rol PDC Emulator debe configurarse para sincronizarse desde fuentes externas fiables (o una fuente interna con GPS),
y otros DCs se sincronizan desde la jerarquía del dominio. Los miembros del dominio se sincronizan desde los DCs.

Si permites que varios DCs obtengan la hora desde fuentes aleatorias, has creado autoridades en competencia. Tendrás desfases intermitentes y odiarás tu vida.

Patrón para sucursales: caché NTP local cuando la WAN es poco fiable

Para sucursales pequeñas con WAN estable, apuntar clientes a dos servidores regionales internos está bien.
Para sucursales con conectividad intermitente, añade un servidor de tiempo local (o usa el DC de la sucursal si es fiable y se trata con cuidado) que:

  • se sincronice con HQ/upstreams regionales cuando el enlace esté arriba,
  • sirva a clientes locales continuamente,
  • tenga límites sensatos para que no vaya por libre hasta el disparate.

Postura de seguridad: NTS es agradable; NTP controlado es necesario

Si tu entorno lo soporta, NTS (Network Time Security) proporciona protección criptográfica para NTP.
Muchos entornos corporativos aún no están ahí, especialmente con mezcla de Windows, equipos de red y appliances.
Así que haces lo siguiente:

  • limitar quién puede consultar y quién puede servir tiempo,
  • usar servidores internos,
  • monitorizar desfases y selección de fuentes,
  • tratar NTP como una dependencia de autenticación.

Virtualización y nube: elegir un maestro de tiempo por capa

La clásica trampa es la doble sincronización: herramientas del hipervisor intentando ajustar el tiempo del invitado mientras chrony/ntpd también lo hace.
Elige uno. Usualmente: deshabilitar “set time” en las herramientas del hipervisor, mantener el cliente NTP del invitado activo y asegurar que el host esté sincronizado.
La excepción es cuando el proveedor documenta explícitamente lo contrario para una plataforma específica; entonces sigues la plataforma, no tus instintos.

Cita (idea parafraseada), atribuida a John Allspaw: “La fiabilidad viene de diseñar sistemas que asumen el fallo, y luego practicar cómo respondes.”

Guía rápida de diagnóstico

Cuando “AD está roto” y “la VPN está caída” aparecen en la misma hora, revisa el tiempo antes de revisar cualquier otra cosa.
No porque el tiempo sea siempre el culpable, sino porque es rápido de descartar y catastrófico cuando es cierto.

Primero: confirmar la realidad del tiempo en un cliente que falla y en una autoridad

  • En el cliente: verifica la hora actual, la zona horaria y el estado de sincronización NTP.
  • En un controlador de dominio (o pasarela VPN): revisa sus fuentes NTP y el desfase.
  • Compara la hora de pared con una referencia conocida y buena (tu servidor NTP interno, no tu teléfono).

Segundo: comprobar la accesibilidad NTP y a quién cree el cliente que es su servidor

  • ¿Está permitido UDP/123 en ambos sentidos?
  • ¿Está el cliente configurado para servidores de tiempo internos, o ha caído a algo raro?
  • ¿Hay una política SD-WAN reescribiendo o limitando UDP/123?

Tercero: determinar si el problema es deriva, step o selección de fuente

  • Desfase grande (minutos/horas): la máquina arrancó mal, problema CMOS, reinicio de VM, o NTP estuvo bloqueado por un tiempo.
  • Desfase pequeño pero creciente: el servicio de tiempo no está disciplinando el reloj (estancado), o el oscilador está mal.
  • Desfase fluctuante: múltiples fuentes de tiempo compitiendo, o jitter/asimetría de red confundiendo la selección.

Cuarto: decidir el radio de impacto

  • Si solo una sucursal está fuera: trátalo como un problema de WAN/firewall/servidor NTP local de la sucursal.
  • Si todas las oficinas están fuera: sospecha la cima de tu jerarquía de tiempo (configuración del PDC emulator, servidores NTP internos, alcanzabilidad upstream).
  • Si solo fallan usuarios VPN: revisa la hora de la pasarela VPN y las ventanas de validez de aserciones del IdP.

Tareas prácticas: comandos, salidas, decisiones

Estas son las comprobaciones que pagan la renta. Cada tarea incluye un comando, cómo se ve “bien” y “mal”, y la decisión que tomas a continuación.
Los comandos se muestran con salida de ejemplo; ajusta los nombres de host a tu entorno.

Task 1: Check the current clock and time zone (Linux)

cr0x@server:~$ timedatectl
               Local time: Sun 2025-12-28 09:14:22 UTC
           Universal time: Sun 2025-12-28 09:14:22 UTC
                 RTC time: Sun 2025-12-28 09:14:21
                Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

Qué significa: “System clock synchronized: yes” es una buena señal; “NTP service: active” indica que tu cliente está ejecutándose.
Si la zona horaria es incorrecta, los logs y la validación de certificados pueden seguir pareciendo mal aunque NTP esté bien.
Decisión: Si “synchronized” es “no”, pasa inmediatamente a comprobar el demonio NTP y la accesibilidad.

Task 2: Check chrony tracking (Linux)

cr0x@server:~$ chronyc tracking
Reference ID    : 10.20.1.10 (ntp-hq-1)
Stratum         : 3
Ref time (UTC)  : Sun Dec 28 09:14:18 2025
System time     : 0.000183421 seconds fast of NTP time
Last offset     : +0.000091233 seconds
RMS offset      : 0.000512344 seconds
Frequency       : 12.345 ppm fast
Residual freq   : -0.210 ppm
Skew            : 0.900 ppm
Root delay      : 0.012345 seconds
Root dispersion : 0.001234 seconds
Update interval : 64.0 seconds
Leap status     : Normal

Qué significa: desfases submilisegundo son excelentes; decenas de milisegundos suelen ser aceptables; cientos de milisegundos podrían ser tolerables;
segundos son un problema para la autenticación. Decisión: Si “Leap status” no es normal o el stratum salta alto, inspecciona las fuentes a continuación.

Task 3: Inspect NTP sources and selection (chrony)

cr0x@server:~$ chronyc sources -v
210 Number of sources = 2

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current best, '+' = combined, '-' = not combined.
| /   Reachability register (octal) - valid samples are marked '377'.
||    ----
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* ntp-hq-1                      2   6   377    35   +0.182ms[ +0.210ms] +/-  1.2ms
^+ ntp-hq-2                      2   6   377    34   -0.311ms[ -0.290ms] +/-  1.6ms

Qué significa: reach “377” significa polls recientes exitosos; “^*” es la fuente actual.
Si reach es “0” o bajo, los paquetes no están regresando. Decisión: Un reach bajo te lleva a comprobar firewall/WAN inmediatamente.

Task 4: Verify NTP UDP/123 connectivity (Linux)

cr0x@server:~$ nc -vu -w 2 ntp-hq-1 123
Connection to ntp-hq-1 123 port [udp/ntp] succeeded!

Qué significa: esto solo prueba que el puerto no está inmediatamente bloqueado; no prueba que las respuestas NTP sean correctas.
Decisión: Si esto falla desde una subred de sucursal pero funciona desde HQ, tienes un problema de política de red, no del demonio de tiempo.

Task 5: Check if something else is using UDP/123 or blocking it (Linux)

cr0x@server:~$ sudo ss -ulpn | grep ':123'
UNCONN 0      0            0.0.0.0:123        0.0.0.0:*    users:(("chronyd",pid=812,fd=6))
UNCONN 0      0               [::]:123           [::]:*    users:(("chronyd",pid=812,fd=7))

Qué significa: chronyd está enlazado a UDP/123 y puede servir tiempo.
Si ves varios demonios compitiendo (chronyd y ntpd), eso es un olor de configuración.
Decisión: Si el demonio esperado no está escuchando, arregla el servicio antes de perseguir fantasmas de la WAN.

Task 6: Confirm time sync status and peers (systemd-timesyncd)

cr0x@server:~$ timedatectl timesync-status
       Server: 10.20.1.10 (ntp-hq-1)
Poll interval: 1min 4s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 3
    Reference: 8A0E5F9C
    Precision: 1us (-24)
Root distance: 1.123ms
       Offset: +212us
        Delay: 502us
       Jitter: 147us
 Packet count: 178
    Frequency: +12.3ppm

Qué significa: bueno para clientes simples; si tu entorno es desordenado (jitter WAN, sucursales),
chrony suele ser la mejor opción. Decisión: Si el offset es grande y no mejora, necesitas mejores fuentes o menos jitter.

Task 7: Check Windows time status on a domain member (run in PowerShell)

cr0x@server:~$ w32tm /query /status
Leap Indicator: 0(no warning)
Stratum: 3 (secondary reference - syncd by (S)NTP)
Precision: -23 (119.209ns per tick)
Root Delay: 0.0312500s
Root Dispersion: 0.1093750s
ReferenceId: 0x0A14010A (source IP: 10.20.1.10)
Last Successful Sync Time: 12/28/2025 9:12:41 AM
Source: ntp-hq-1
Poll Interval: 6 (64s)

Qué significa: “Source” debería ser una fuente de tiempo de dominio (típicamente un DC) o tu host NTP interno aprobado.
Si es “Local CMOS Clock” o un servidor público, tienes riesgo de deriva. Decisión: Corrige la jerarquía de tiempo antes de tocar ajustes de Kerberos.

Task 8: Check which Windows server is the time source (domain member)

cr0x@server:~$ w32tm /query /source
ntp-hq-1

Qué significa: confirmación rápida de lo que la máquina cree. Decisión: Si apunta a un servidor inalcanzable,
arregla el enrutamiento/firewall o actualiza la GPO/configuración de tiempo.

Task 9: Verify AD time hierarchy settings on the PDC Emulator

cr0x@server:~$ w32tm /query /configuration
[Configuration]
EventLogFlags: 2 (Local)
AnnounceFlags: 5 (Local)
TimeJumpAuditOffset: 28800 (Local)
MinPollInterval: 6 (Local)
MaxPollInterval: 10 (Local)
MaxNegPhaseCorrection: 172800 (Local)
MaxPosPhaseCorrection: 172800 (Local)

[TimeProviders]
NtpClient (Local)
DllName: C:\Windows\system32\w32time.dll (Local)
Enabled: 1 (Local)
InputProvider: 1 (Local)

NtpServer (Local)
Enabled: 1 (Local)

Qué significa: estás comprobando si la máquina está configurada para actuar como servidor NTP y si el cliente está habilitado.
Decisión: Si el PDC no está configurado para sincronizar desde una fuente fiable, arregla eso primero; todo lo demás heredará el error.

Task 10: Force a resync on Windows and interpret errors

cr0x@server:~$ w32tm /resync /force
Sending resync command to local computer...
The command completed successfully.

Qué significa: si esto falla con “no time data was available”, tu cliente no puede alcanzar una fuente válida.
Decisión: Un resync exitoso pero errores persistentes de autenticación sugiere que la parte autoridad (DC/pasarela VPN) está mal, no el cliente.

Task 11: Detect time jumps and NTP corrections in logs (Linux)

cr0x@server:~$ sudo journalctl -u chronyd --since "2 hours ago" | tail -n 12
Dec 28 07:22:10 branch-app-7 chronyd[812]: Selected source 10.20.1.10
Dec 28 07:22:42 branch-app-7 chronyd[812]: System clock wrong by 1.832 seconds, adjustment started
Dec 28 07:23:14 branch-app-7 chronyd[812]: System clock synchronized
Dec 28 07:58:15 branch-app-7 chronyd[812]: Source 10.20.1.10 replaced with 10.20.1.11
Dec 28 07:58:47 branch-app-7 chronyd[812]: System clock wrong by 0.412 seconds, adjustment started

Qué significa: repetir “System clock wrong by X seconds” indica inestabilidad—o el reloj local se está desviando o el upstream es inestable.
Decisión: Si las correcciones se correlacionan con eventos WAN, considera una fuente de tiempo local en la sucursal o una mejor política WAN para UDP/123.

Task 12: Confirm NTP server is serving and who is querying (Linux server)

cr0x@server:~$ sudo chronyc clients
Hostname                      NTP   Drop Int IntL Last     Cmd   Drop CmdL
===============================================================================
branch-fw-1                     12      0   6    -   42s       0      0    -
branch-dc-2                      8      0   6    -   38s       0      0    -
vpn-gw-1                         6      0   6    -   44s       0      0    -

Qué significa: tu servidor ve clientes; los conteos “Drop” muestran paquetes descartados.
Decisión: Si una sucursal falla pero no aparece aquí, no está alcanzando al servidor—problema de ruta de red.

Task 13: Validate NTP server reachability from a branch router/firewall (Linux-based appliance)

cr0x@server:~$ sudo tcpdump -ni eth0 udp port 123 and host 10.20.1.10 -c 6
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
09:14:10.111111 IP 10.60.8.2.49823 > 10.20.1.10.123: NTPv4, Client, length 48
09:14:10.145678 IP 10.20.1.10.123 > 10.60.8.2.49823: NTPv4, Server, length 48
09:14:11.111209 IP 10.60.8.2.49823 > 10.20.1.10.123: NTPv4, Client, length 48
09:14:11.146001 IP 10.20.1.10.123 > 10.60.8.2.49823: NTPv4, Server, length 48

Qué significa: solicitudes y respuestas son visibles. Si solo ves solicitudes, las respuestas se están descartando (firewall stateful, ACL, NAT).
Decisión: Arregla la política de red antes de afinar chrony; chrony no puede disciplinar un reloj con paquetes faltantes.

Task 14: Check for VM guest time sync conflicts (Linux guest example)

cr0x@server:~$ systemctl is-enabled chronyd; systemctl is-enabled systemd-timesyncd
enabled
disabled

Qué significa: deberías ejecutar un solo cliente de sincronización de tiempo. Decisión: Si ambos están habilitados, deshabilita uno y vuelve a probar la deriva.

Task 15: Detect certificate validity errors tied to clock drift (Linux client)

cr0x@server:~$ openssl s_client -connect vpn.example.internal:443 -servername vpn.example.internal 2>/dev/null | openssl x509 -noout -dates
notBefore=Dec 28 08:00:00 2025 GMT
notAfter=Mar 27 08:00:00 2026 GMT

Qué significa: compara “notBefore” con la hora UTC actual del cliente. Si el cliente está atrasado, puede ver “not yet valid”.
Decisión: No rotar certificados para “arreglar” esto. Arregla el tiempo y vuelve a ejecutar el handshake.

Task 16: Confirm firewall counters for UDP/123 (Linux nftables example)

cr0x@server:~$ sudo nft list ruleset | sed -n '1,80p'
table inet filter {
  chain input {
    type filter hook input priority 0; policy drop;
    ct state established,related accept
    iif "lo" accept
    udp dport 123 ip saddr 10.60.0.0/16 accept
  }
}

Qué significa: permites NTP desde subredes de sucursales. Si la regla no está presente, tu servidor NTP podría estar ignorando sucursales silenciosamente.
Decisión: Haz explícito NTP en la política de firewall; “permitir todo desde interno” es cómo fallas auditorías y aun así pierdes NTP.

Tres microhistorias corporativas (anonimizadas, plausibles y dolorosamente reales)

Microhistoria 1: El incidente causado por una suposición errónea

Una empresa mediana abrió dos oficinas nuevas tras una adquisición. Tenían un bosque AD existente, concentradores VPN en HQ y una PKI interna decente.
El plan de integración fue cuidadoso con DNS y enrutamiento. Se asumió que el tiempo “simplemente funcionaba” porque el dominio Windows “se encarga de eso”.

En el primer día, usuarios en la nueva oficina se quejaron de que iniciar sesión tardaba una eternidad y a veces fallaba. Inicios de sesión VPN funcionaban, luego el cliente se desconectaba tras un minuto.
Mientras tanto, un puñado de jump hosts Linux empezaron a arrojar errores TLS contra APIs internas. El canal de incidentes se llenó de medias verdades:
“La replicación AD está rota.” “La CA emitió malos certificados.” “El firmware de la VPN es inestable.”

El problema real: el firewall de la sucursal tenía una política por defecto que bloqueaba UDP/123 saliente “por seguridad”, y los portátiles nuevos habían estado dormidos semanas.
Despertaron con relojes obsoletos y luego derivaron más porque NTP no podía alcanzar los servidores internos. Kerberos empezó a rechazar tickets y la pasarela VPN—
que validaba aserciones de corta vida—parecía fallar aleatoriamente.

Arreglarlo fue casi insultantemente simple: permitir UDP/123 desde la sucursal hacia los servidores NTP internos y aplicar la jerarquía de dominio para clientes Windows.
La parte difícil fue admitir que la suposición era errónea. El postmortem no fue sobre “alguien olvidó una regla de firewall.” Fue sobre tratar el tiempo como una dependencia,
no como radiación de fondo.

Microhistoria 2: La optimización que salió mal

Otra organización decidió “optimizar el tráfico WAN”. Tenían docenas de sitios pequeños conectados por SD-WAN y querían reducir el ruido.
Alguien notó que NTP era un goteo constante y aplicó una política: limitar la tasa de UDP/123 y alargar los intervalos de sondeo en los clientes.
En papel, parecía una victoria: menos ruido, menos paquetes, gráficos más limpios.

Luego la SD-WAN empezó a hacer lo que hace SD-WAN: cambios de camino. Algunas sucursales pasaron ocasionalmente de MPLS de baja latencia a transporte de Internet de mayor latencia.
Los paquetes NTP llegaban tarde o a ráfagas. Clientes con intervalos de sondeo largos tenían menos muestras, así que confiaron en mediciones ruidosas.
Sus desfases empezaron a oscilar. Algunos hicieron step en hora durante horario laboral. Eso creó rarezas: jobs cron se ejecutaron dos veces, pipelines de logs desordenaron eventos,
y un par de servidores de aplicaciones fallaron en mutual TLS porque sus relojes saltaron.

Lo peor: nada de esto disparó alertas de “NTP caído”, porque NTP no estaba caído. Estaba degradado. El sistema “funcionaba” igual que una silla coja “funciona” hasta que te sientas rápido.

El rollback fue directo: quitar la limitación agresiva de tasa, restaurar sondeos sensatos y añadir relés NTP locales en las pocas sucursales con peor jitter.
La lección fue clásica de operaciones: optimizar un recurso diminuto puede desestabilizar un lazo de control crítico.

Microhistoria 3: La práctica aburrida pero correcta que salvó el día

Una compañía global mantenía un servicio de tiempo interno estricto: dos servidores NTP por región, respaldo GPS en HQ, con monitorización de desfase y alcanzabilidad.
Cada sucursal tenía reglas de firewall explícitas para UDP/123. Los clientes Windows seguían la jerarquía de dominio; Linux usaba chrony con dos fuentes internas.
No era glamuroso. Estaba documentado, revisado y probado durante la puesta en marcha de oficinas.

Durante una gran caída de ISP, una región perdió acceso a referencias upstream. El NTP público fue inalcanzable desde ese segmento.
Los servidores de tiempo entraron en modo “holdover”—seguían sirviendo tiempo, pero ya no se actualizaban desde upstream. Aquí es donde muchas configuraciones fallan.
La diferencia fue que esta organización tenía políticas: máxima deriva permitida antes de alertar, y un runbook que decía exactamente qué verificar al personal on-call.

La monitorización mostró desfases aumentando lentamente pero dentro de límites aceptables. Los clientes continuaron autenticándose porque la jerarquía local permaneció consistente.
Cuando el upstream volvió, los servidores se resintonizaron cuidadosamente sin hacer steps bruscos. Nadie en el negocio se enteró.

La práctica correcta no fue NTS por todas partes ni una compra enorme. Fue hacer del tiempo un servicio de primera clase con redundancia y medición.
Aburrido. Correcto. Efectivo.

Errores comunes: síntoma → causa raíz → solución

1) Los usuarios ven “The time difference between the client and server is too great”

Síntoma: inicios de sesión AD fallan de forma intermitente, especialmente tras suspensión/hibernación o después de una imagen.
Causa raíz: el reloj del cliente deriva más allá de la tolerancia de Kerberos; NTP bloqueado o fuente de tiempo incorrecta.
Solución: restaurar la accesibilidad NTP a servidores internos; aplicar la jerarquía de tiempo de dominio; resincronizar y verificar con w32tm /query /status o chronyc tracking.

2) La VPN funciona para algunos usuarios y falla para otros con errores de validez de token

Síntoma: bucles de autenticación VPN, “assertion expired” o desconexiones después de un éxito inicial.
Causa raíz: la pasarela VPN o el conector IdP tiene la hora equivocada; clientes de sucursal están adelantados/atrasados.
Solución: verificar las fuentes de tiempo de la pasarela; comprobar el desfase en pasarelas e proxies IdP; corregir NTP y evitar cambios manuales de hora.

3) Errores TLS: “certificate not yet valid” justo después de rotación

Síntoma: el despliegue de un nuevo certificado parece “roto” solo en una oficina.
Causa raíz: los clientes de esa oficina están atrasados; la ventana de validez del certificado comienza en el “futuro” relativo a ellos.
Solución: arreglar NTP primero. Reprobar con openssl x509 -noout -dates contra el servicio.

4) Un DC muestra hora diferente a otro

Síntoma: la autenticación funciona contra algunos DCs y falla contra otros; la replicación parece ruidosa.
Causa raíz: múltiples DCs configurados con fuentes NTP independientes; el PDC emulator no actúa como autoridad.
Solución: configurar el PDC para sincronizar con upstreams aprobados; configurar otros DCs para seguir la jerarquía de dominio; auditar con w32tm /monitor.

5) El tiempo “parece bien” pero el desfase es ruidoso y cambia de fuente

Síntoma: el cliente NTP cambia entre servidores; el jitter es alto; pasos ocasionales del reloj.
Causa raíz: jitter/asimetría WAN; shaping agresivo de SD-WAN; pocas muestras por sondeos largos; upstream inestable.
Solución: usar dos o más fuentes internas cercanas; reducir jitter arreglando la política de red; considerar un relé NTP local en la sucursal.

6) Alguien “arregla” la hora manualmente y la empeora

Síntoma: logs inservibles, tareas programadas fallan, bases de datos protestan, incidentes imposibles de reconstruir.
Causa raíz: step manual de tiempo durante operación normal; servicios de sincronización de tiempo en conflicto después.
Solución: detener el servicio de tiempo, corregir la configuración, reiniciar, permitir step controlado solo cuando sea necesario; documentar un runbook para corrección segura.

Chiste #2: Lo único más fiable que la deriva del tiempo es alguien insistiendo en que no puede ser el tiempo porque “NTP está habilitado.”

Listas de verificación / plan paso a paso

Paso a paso: construir un servicio de tiempo resistente entre oficinas

  1. Elige servidores NTP internos autorizados: al menos dos por región principal o HQ. Decide dónde viven las referencias upstream.
  2. Decide la política upstream: usa múltiples fuentes externas o fuentes con GPS. Evita dependencias ascendentes únicas.
  3. Bloquea reglas de firewall: permite explícitamente UDP/123 desde subredes cliente hacia servidores NTP internos; deniega servir a redes no confiables.
  4. Haz correcta la jerarquía de tiempo en AD: configura el PDC emulator con upstream; asegura que otros DCs usen la jerarquía de dominio.
  5. Estándar para clientes: Linux usa chrony; Windows usa w32time; deshabilita doble sincronización (herramientas guest vs demonio NTP).
  6. Define deriva aceptable: elige umbrales de alerta (ejemplo: avisar a 250ms, paginar a 2s en sistemas críticos; más estricto para DCs y pasarelas VPN).
  7. Instrumenta y alerta: colecta métricas de offset/jitter/reach; alerta por pérdida de fuente y por aumento de la pendiente de offset.
  8. Prueba modos de fallo: simula pérdida de WAN en una sucursal; confirma que la sucursal mantiene tiempo estable y se recupera sin grandes steps.
  9. Escribe el runbook: “qué revisar primero” y “cómo arreglar de forma segura” para on-call y equipos de escritorio.
  10. Audita trimestralmente: verifica que no haya servidores NTP fuera de control, que no haya NTP público en clientes y que las reglas de firewall de sucursal sigan existiendo.

Lista de verificación para apertura de sucursal (la que realmente usas)

  • Confirmar que las VLANs de la sucursal pueden alcanzar servidores NTP internos por UDP/123 en ambos sentidos.
  • Confirmar que al menos dos fuentes NTP están configuradas para servidores y equipo de red crítico.
  • Confirmar que el DC de la sucursal (si existe) no apunta a NTP público al azar; debe seguir la jerarquía de dominio.
  • Confirmar que la(s) pasarela(s) VPN en la región se sincronizan desde la misma jerarquía interna.
  • Confirmar que la monitorización ve desfases de sucursal dentro de umbrales en la primera hora tras apertura.

Lista de verificación de respuesta a incidentes: cuando falla la autenticación y sospechas del tiempo

  • Medir el desfase en un cliente que falla y en un DC/pasarela.
  • Comprobar si los paquetes NTP vuelven (tcpdump si es necesario).
  • Comprobar si el cliente está usando la fuente de tiempo correcta.
  • Arreglar la alcanzabilidad primero, luego resincronizar; evitar pasos manuales de tiempo durante horario laboral salvo que sea absolutamente necesario.
  • Tras la corrección, volver a probar la vía de autenticación original (emisión de ticket Kerberos, login VPN, handshake TLS) para confirmar causalidad.

Monitorización y alertas que realmente lo detectan

“Servicio NTP arriba” no es monitorización. Es pensamiento deseoso con métricas.
Necesitas observar el lazo de control: alcanzabilidad, desfase, jitter y cambios de fuente.

Qué medir

  • Desfase del cliente: especialmente en controladores de dominio, pasarelas VPN, proxies IdP y sistemas emisores de certificados.
  • Registro de reach: chrony reach bajando de 377 hacia 0 es un indicador temprano.
  • Cambios de selección de fuente: conmutaciones frecuentes indican inestabilidad o jitter de red.
  • Pasos de tiempo: cualquier step en un sistema crítico debe alertar, porque suele correlacionar con fallos visibles para usuarios.
  • Disponibilidad upstream: servidores NTP internos perdiendo todas las fuentes upstream deben alertar antes de que los clientes deriven demasiado.

Umbrales de alerta (valores por defecto opinados)

  • Controladores de dominio: avisar a 100ms, paginar a 1s, emergencia a 5s.
  • Pasarelas VPN / conectores IdP: avisar a 200ms, paginar a 2s (los tokens son de corta vida y los usuarios impacientes).
  • Servidores generales: avisar a 500ms, paginar a 5s (a menos que el servicio sea cripto/auth-intenso).
  • Estaciones de trabajo: no paginar, pero trazar y reportar. Si ves una sucursal entera derivando, trátalo como problema de política de red.

Qué evitar

  • Alertar por cada pico transitorio de jitter. Harás que todos ignoren las alertas.
  • Usar un solo servidor NTP como dependencia global sin redundancia.
  • Permitir que redes/seguridad bloqueen UDP/123 “temporalmente” sin un proceso de excepción explícito.

Preguntas frecuentes

1) ¿Por qué AD se preocupa tanto por el tiempo?

Kerberos usa marcas de tiempo para evitar ataques de reproducción. Si los relojes difieren demasiado, el sistema no puede distinguir con seguridad entre “tarde” y “repetido”, así que rechaza.

2) ¿Cinco minutos de desfase es siempre el límite?

Es un valor por defecto común, no una ley física. Puedes cambiar las tolerancias, pero aumentar la tolerancia de desfase suele ser la solución equivocada:
debilita la seguridad y enmascara el verdadero problema (distribución de tiempo rota).

3) ¿Las sucursales deberían sincronizarse directamente con NTP de Internet?

Normalmente no. Complica el firewall, la auditoría y la consistencia. Prefiere servidores internos para que todas las oficinas compartan la misma jerarquía y puedas monitorizarla.
Existen excepciones (sitios muy pequeños sin VPN y sin membresía de dominio), pero son excepciones que documentas.

4) chrony vs ntpd vs systemd-timesyncd: ¿qué debería usar?

Para servidores y sucursales con verdadera variabilidad de red, chrony es típicamente la mejor opción porque maneja bien el jitter y la conectividad intermitente.
systemd-timesyncd está bien para clientes simples. ntpd puede funcionar, pero en muchos entornos modernos chrony es operativamente más fácil.

5) ¿Puede SD-WAN romper NTP aunque “UDP esté permitido”?

Sí. El shaping, el policing, los cambios de ruta y el enrutamiento asimétrico pueden aumentar el jitter y distorsionar las estimaciones de retraso.
NTP puede ser alcanzable pero inestable, lo que es peor que un fallo limpio porque produce tiempo inconsistente.

6) ¿Cómo manejo el tiempo en redes aisladas sin Internet?

Ejecuta servidores NTP internos con una referencia local (GPS o oscilador disciplinado) o una estrategia de holdover bien gestionada.
La clave es consistencia: los clientes deben seguir la misma jerarquía interna y debes monitorizar la deriva con el tiempo.

7) ¿Los segundos intercalares rompen cosas?

Pueden. Algunos sistemas manejan mal los segundos intercalares, y el tratamiento inconsistente entre dispositivos puede crear breves desacuerdos de tiempo.
Usar una fuente de tiempo consistente y clientes disciplinados reduce el riesgo; evita mezclar comportamientos “especiales” de tiempo en tu flota.

8) ¿Por qué fallan certificados cuando el tiempo solo está un poco desviado?

Los certificados tienen ventanas de validez estrictas y algunos clientes cachean decisiones dependientes del tiempo.
Una pequeña deriva puede ser suficiente para cruzar un límite de validez, especialmente justo después de una rotación cuando “notBefore” es reciente.

9) ¿Debería permitir NTP desde clientes hacia controladores de dominio, o solo hacia servidores NTP dedicados?

Ambas pueden funcionar, pero elige un modelo y hazlo cumplir. Muchos entornos usan DCs como fuentes de tiempo para miembros del dominio
asegurando que el PDC emulator sea el único DC que tire tiempo externo. Los servidores NTP dedicados pueden ser más limpios para sistemas no Windows y equipamiento de red.

10) Si una máquina está muy desalineada, ¿es seguro hacer step inmediatamente?

La seguridad depende de la carga de trabajo. Para un portátil, hacer step suele ser aceptable. Para bases de datos, brokers de mensajes y cualquier cosa con orden sensible, el step puede ser dañino.
Prefiere la corrección controlada: arregla NTP y permite que el servicio de tiempo corrija apropiadamente, haciendo step solo cuando sea necesario y idealmente en una ventana de mantenimiento.

Siguientes pasos (el camino sensato)

Si ejecutas AD, VPN o cualquier cosa con certificados, trata el tiempo como un servicio de plataforma interno. No como una característica en segundo plano. Un servicio.
Construye una jerarquía, restríngela, monitorízala y prueba sus modos de fallo.

Pasos prácticos que puedes hacer esta semana:

  1. Identificar el PDC emulator y verificar que sus fuentes de tiempo upstream sean correctas y redundantes.
  2. Elegir dos servidores NTP internos por región y hacer explícita la alcanzabilidad UDP/123 en la política de firewall.
  3. Auditar un puñado de clientes en cada oficina: confirmar sus fuentes, desfases y que no estén usando NTP público.
  4. Añadir alertas sobre offset y reach (no solo tiempo de vida del demonio) para DCs, pasarelas VPN, componentes IdP y servidores NTP internos.
  5. Realizar una prueba de fallo de WAN en sucursal: confirmar que el tiempo permanece estable y la recuperación no causa grandes steps.

Haz esto y evitarás una categoría de incidencias que parecen “rareza de seguridad”, “inestabilidad de red” y “Windows siendo Windows”,
pero que en realidad tienen la misma raíz aburrida: deriva del tiempo que no mediste.

← Anterior
Estados P y C: qué hace tu CPU cuando está inactiva
Siguiente →
Ubuntu 24.04: UFW te dejó fuera — recupera acceso SSH de forma segura desde la consola

Deja un comentario