Configurar NTP en Windows Server y Active Directory: guía completa paso a paso

La sincronización precisa de la hora es crucial para Kerberos, los registros de eventos y prácticamente cualquier aplicación distribuida. Este tutorial explica cómo Windows maneja el protocolo NTP por defecto y muestra la forma recomendada de configurarlo en entornos empresariales y en la nube, paso a paso y con ejemplos prácticos.

Índice

Servidor NTP predeterminado en Windows

En todas las ediciones modernas de Windows el servicio Windows Time (W32Time) se instala y arranca de manera automática. El comportamiento varía según el equipo pertenezca o no a un dominio:

  • Equipos en grupo de trabajo (workgroup): adoptan la directiva “NtpClient → time.windows.com,0x9”. Es decir, consultan el host time.windows.com mediante NTP/UDP 123 cada 7 días (2Stratum 15).
  • Equipos unidos a un dominio AD: ignoran interiores las fuentes públicas y utilizan el controlador de dominio que detecten como más cercano. No generan tráfico NTP externo.

En escenarios híbridos o de laboratorio este comportamiento puede crear confusión; basta ejecutar w32tm /query /source para comprobar la fuente real en cada caso.

Jerarquía de sincronización en Active Directory

Active Directory implementa su propia jerarquía, sustentada en el rol PDC Emulator (Flexible Single Master Operation, FSMO):

  1. El PDC Emulator obtiene la hora de fuentes externas o, en la nube, de un servicio de hora interno (p. ej. 169.254.169.123 en AWS).
  2. Los demás controladores de dominio se sincronizan con el PDC Emulator.
  3. Los equipos miembro consultan al DC que les ha autenticado (sitio AD local).

Este diseño minimiza el uso de enlaces WAN y reduce el riesgo de bucles NTP o discrepancias entre subredes.

Verificación y comandos útiles

ComandoPropósitoSalida significativa
w32tm /query /statusDiagnóstico en vivoLeap Indicator, Stratum, Last Successful Sync Time
w32tm /query /sourceFuente actualtime.windows.com, 169.254.169.123, nombre DNS o dirección IP
w32tm /query /configurationParámetros efectivosBloque [TimeProviders] con NtpClient y lista de servidores

Tip: en máquinas EC2 de Amazon, la plantilla estándar inserta 169.254.169.123 como origen predeterminado. Mientras el PDC Emulator use la misma fuente, la coherencia interna está garantizada.

Buenas prácticas para entornos de producción

RecomendaciónMotivo
Definir al menos 2–4 fuentes externas en el PDC Emulator:
w32tm /config /manualpeerlist:"0.pool.ntp.org,0x8 1.pool.ntp.org,0x8" /syncfromflags:manual /update
Resiliencia y consenso estadístico (algoritmo Falseticker)
Forzar resincronización inmediata:
w32tm /resync /rediscover
Aplica la configuración sin reiniciar servicios
Restringir el puerto UDP 123 en el perímetro; permitir solo DC ⇄ fuentes externas y DC ⇄ equipos internosReduce superficie de ataque contra spoofing NTP y DDoS de reflexión
Ajustar SpecialPollInterval (p. ej. 900 s) y límites MaxPosPhaseCorrection / MaxNegPhaseCorrectionEvita saltos bruscos que desordenan registros o rompen Kerberos
Activar registro detallado:
w32tm /debug /enable /file:C:\Logs\w32time.log /size:10000000 /entries:0‑300
Facilita auditoría, alertas y RCA (Root Cause Analysis)
Monitorizar el stratum con SCOM, Zabbix o PrometheusUn aumento inesperado indica pérdida de la fuente primaria
Documentar la cadena de confianza: ubicación de servidores, métodos de respaldo GPS o PTP, ventanas de mantenimientoEvita errores durante migraciones o desastres

Procedimiento completo paso a paso

Preparar el PDC Emulator

  1. Localiza el PDC Emulator: netdom query fsmo.
  2. Crea una lista de servidores NTP confiables (ideal: dos de la NTP Pool, uno de tu ISP y uno PPS/GPS local).
  3. Ejecuta la configuración manual mostrada antes.
  4. Verifica con w32tm /query /status que el Stratum se reduzca (normalmente a 2 o 3).
  5. Crea una política de grupo para asegurarte de que nadie sobrescriba la lista.

Asegurar los demás controladores de dominio

W32TM /config /syncfromflags:domhier /update
W32TM /resync

Con domhier se indica que estos DC confíen sólo en la jerarquía nativa de AD, descartando cualquier configuración residual.

Aplicar la configuración a estaciones y servidores miembro

Cuando el PDC Emulator y los demás DC estén alineados, las estaciones heredarán la hora correcta en el siguiente ciclo de autenticación o al ejecutar gpupdate /force. Para acelerar el proceso se puede lanzar:

W32TM /resync /computers:NombreEquipo

Verificar desde un host Linux externo

$ chronyc sources -v
$ ntpdate -q nombre.del.pdc

Estos comandos permiten comprobar el desfase (offset) y la fiabilidad (reach) sin depender de herramientas Microsoft.

Integración con servicios en la nube

Los hipervisores modernos ofrecen un canal de sincronía interno, pero conviene entender sus matices:

  • AWS Time Sync Service: dirección 169.254.169.123; Stratum 4 distribuido por cada zona de disponibilidad.
  • Azure Time: time.windows.com resolviendo hacia una IP anycast dentro de Azure. Se recomienda fija y con ,0x8.
  • Google Cloud Time Service: mecanismo híbrido NTP y PTP, accesible sin costo en la red 10.128.0.0/9.

Siempre que el PDC Emulator apunte a la fuente que ofrezca la nube, todo el bosque AD aprovechará la ventaja de la baja latencia sin exponer puertos al exterior.

Impacto de una hora incorrecta

No es raro subestimar el problema hasta que se rompen procesos críticos. Algunos síntomas habituales:

  • Mensajes “Clock Skew” en autenticación Kerberos (TGS expired).
  • Errores al unirse al dominio: “Target principal name is incorrect”.
  • Logs desordenados que complican correlación de eventos de seguridad.
  • Fallos SAML/OAuth por tokens marcados como fuera de ventana.
  • Incoherencias en clústeres SQL Always On o Hyper‑V Replica.

La hora es una “dependencia invisible”; invertir tiempo en un diseño sólido evita horas de depuración posterior.

Automatización con PowerShell

Para quienes gestionan cientos de dominios es preferible industrializar el proceso:

$NtpServers = "0.europe.pool.ntp.org,0x8","1.europe.pool.ntp.org,0x8"
Invoke-Command -ComputerName (Get-ADDomainController -Filter *).HostName `
  -ScriptBlock {
    param($Peers)
    w32tm /config /manualpeerlist:"$($Peers -join ' ')" /syncfromflags:manual /update
    w32tm /resync
  } -ArgumentList $NtpServers

Al centralizar el cambio se eliminan errores humanos y se garantiza homogeneidad.

Puntos clave para recordar

  • El único equipo que debería hablar con servidores NTP externos es el PDC Emulator.
  • No mezcles Hyper‑V IC TimeSync con NTP; deshabilita uno de los dos para evitar bucles.
  • Revisa periódicamente que el drift frente a fuentes de estrato 1 sea inferior a ±2 ms en LAN y ±50 ms en WAN.
  • Documenta excepciones: cabinas de almacenamiento, cortafuegos o appliances que requieran sus propias fuentes.

Con una jerarquía clara, validaciones automatizadas y un puñado de buenas prácticas, tu dominio permanecerá dentro de los márgenes de tolerancia que exigen Kerberos y los sistemas distribuidos modernos.

Índice