¿Cómo solucionar problemas de hora en Windows Server? Los servicios de hora son mucho más útiles e importantes de lo que la mayoría de las personas piensan. Es posible que haya técnicos que no les prestan atención, probablemente porque todavía no han sufrido problemas relevantes en servicios críticos ocasionados por una mala sincronización de hora.
¿Qué son los servicios de hora?
Los servicios de hora se encargan de asegurar que la hora de nuestros sistemas está sincronizada con alguna fuente central, que, por lo general, será un servidor externo de una fuente reconocida.
Entre otras cosas, estos servicios se encargan de que todos los servidores y todas las máquinas cliente tengan la misma hora, siendo especialmente sensible en infraestructuras donde se tiene Active Directory Domain Services (AD DS), donde una máquina con una hora distinta puede generar problemas y puede mostrar ese mensaje de “Se ha perdido la relación de confianza con el dominio” que todo administrador ha visto alguna vez a lo largo de su vida laboral.
Todos los equipos, tanto servidores como clientes, que pertenecen a un dominio, sincronizan su hora desde el Controlador de Domino (DC) que hace las veces de PDC (Primary Domain Controler). Pero podemos encontrarnos con equipos, a los que por la razón que sea, se ha cambiado la fuente de la que sincronizan, por ejemplo, para validarse contra otro servicio o por un error de operativa.
El único elemento del dominio que no toma la hora del PDC es el propio PDC, que como raíz del bosque de dominio toma la hora de un origen externo.
A la hora de tratar los problemas de hora y como afrontarlos distinguiremos dos tipos distintos:
- En sistemas antiguos. Sistemas como Windows Server 2003, Windows Server 2008 o Windows Server 2012, que, por su antigüedad cuentan con versiones de PowerShell menos actualizadas, o limitadas. En estos sistemas, usaremos una solución basada en el “command” de Windows o en claves de registro, pudiendo funcionar algunos comandos de PowerShell.
- En sistemas nuevos. Sistemas operativos como Windows Server 2016, Windows Server 2019 o Windows Server 2022. Cuentan con las últimas versiones de PowerShell por lo que podremos trabajar directamente con comandos de este entorno, aunque también funcionarán los comandos de “command” antiguos.
Comprobación del estado del servicio de hora:
Una de las primeras cosas que podemos hacer para comprobar el estado de los servicios de hora en nuestro servidor es revisar la configuración del registro.
La configuración del registro se puede comprobar de varias maneras, la primera y más arcaica es revisar a mano el estado, es decir, abriendo el Editor de Registros (regedit.exe) e ir desplegando el siguiente árbol: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters
Otra forma más rápida de hacerlo es mediante el comando “reg query” que hacer consultas directas al registro del sistema. Para hacerlo, bastará con poner el siguiente comando en la línea de comandos, ya sea esta el clásico CMD de Windows o PowerShell.
# reg query HKLMSYSTEMCurrentControlSetServicesW32TimeParameters
Otra forma de visualizar el estado del servicio es haciendo uso del comando “w32tm /query /peers”, que hace una consulta directamente al servicio de tiempo, preguntándole por los servidores de los que sincroniza. Nuevamente, podemos lanzar el comando tanto en la línea de comandos de Windows, como en PowerShell.
La última forma de ver la configuración y el estado es usando directamente PowerShell, concretamente el comando “Get-ItemProperty”.
# Get-ItemProperty -Path «HKLM:SYSTEMCurrentControlSetServicesw32timeTimeProvidersNtpServer»
Arranque y parada de los servicios de hora:
En ocasiones, los servicios quedan en un estado indeterminado, o sea, dicho vulgarmente, los servicios se quedan tontos, y hay que hacer un reinicio de estos para ver si su estado se normaliza, siendo esto lo más común.
Como es habitual, tenemos varias formas de solucionar estos problemas de hora, y aquí vamos a explicar un par de ellas.
La primera forma de hacerla es mediante el comando “net” que tanto tiempo ha acompañado al administrador de sistemas Microsoft.
Pudiendo hacer una parada y un arranque del servicio:
# net stop w32time
# net start w32time
Pudiendo ejecutarse estos comandos desde el CMD o PowerShell indistintamente.
En caso de querer reiniciar el servicio de tiempo desde un sistema con soporte para PowerShell, podremos hacer uso de los comandos de gestión de servicios como “Stop-Service”, “Start-Service”, “Restart-Service”, lanzando directamente
# Restart-Service w32Time
O
# Stop-Service w32Time
# Start-Service w32Time
Reconfiguración de los servicios de hora:
Como no podía ser de otra manera, a la hora de configurar los servicios de tiempo de Windows Server podemos actuar de varias maneras:
- Podemos tocar directamente las claves de registro de manera manual, cosa que puede ser muy tediosa, sobre todo si hay que cambiar varios servicios.
- Podemos usar un script que vuelque valores al registro.
- Podemos usar comandos de “command”.
- Podemos usar comandos de PowerShell en aquellos servidores que lo soporten.
Configurar el servicio de tiempo tocando el registro a mano:
Este es un proceso que, aunque he de decir que lo he hecho más de una vez y no he tenido problemas, no recomendaría hacerlo más que si estamos en un equipo viejo en el que no tenemos otra opción.
Si queremos tocar el registro a mano, deberemos arrancar el Editor de Registro (RegEdit) desde ejecutar, buscándolo en el menú de Inicio o accediendo a “C:Windows” y buscando el ejecutable, cosa que normalmente no creo que hagamos ninguno.
NOTA: Siempre que se hace una reconfiguración del registro de Windows es recomendable hacer una copia de seguridad de este para poder recuperarla desde el modo a prueba de fallos en caso de ser necesario.
Después, habrá que navegar hasta la rama donde queramos hacer los cambios, en este caso en “HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeConfig” e introducirlos de manera manual, con la posibilidad de cometer errores, etc.
Los parámetros a configurar deberían ser:
- MaxNegPhaseCorrection=dword:ffffffff
- MaxPosPhaseCorrection=dword:00000e10
- AnnounceFlags=dword:00000005
- [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters]
- Type=NTP
- NtpServer= hora.rediris.es,0x1
- [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProviders]
- NtpServer=dword:00000001
- [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClient]
- SpecialPollInterval=dword:00000384
- [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpServer]
- Enabled=dword:00000001
Donde NtpServer=hora.rediris.es,0x1 contiene la dirección del servidor al que se tiene que conectar para sincronizar.
NOTA: En este caso, se ha escogido un servidor de tiempos de RedIris, el servidor “hora.rediris.es”, pero existen infinidad de servidores a los que se puede apuntar, como los de Microsoft, Google, entes gubernamentales. Para encontrarlos basta con hacer una búsqueda en internet con el topic “servidores NTP” o similar.
Esta misma operativa la podríamos hace run poco más automatizada, escribiendo un archivo de texto plano (típico Notepad) con el siguiente contenido, que si se revisa es idéntico a lo que hemos puesto en el paso anterior.
EGEDIT4
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeConfig]
«MaxNegPhaseCorrection»=dword:ffffffff
«MaxPosPhaseCorrection»=dword:00000e10
«AnnounceFlags»=dword:00000005
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeParameters]
«Type»=»NTP»
«NtpServer»=»time.windows.com,0x1»
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProviders]
«NtpServer»=dword:00000001
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpClient]
«SpecialPollInterval»=dword:00000384
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesW32TimeTimeProvidersNtpServer]
«Enabled»=dword:00000001
El archivo debe guardarse con extensión “.reg” y después lanzar el comando “regedit” para que la configuración tome efecto.
# regedit /s ARCHIVO.reg
Como, por ejemplo:
# regedit /s f:ntpconfig.reg
Tras esto, se debería reiniciar el servicio o el sistema para ver si todo ha ido bien.
Configuración del registro mediante comandos:
Una manera mucho más sencilla de hacerlo es mediante comandos del “command” de Windows, o sea de los de toda la vida. Los comandos que usaremos son los clásicos de gestiónde tiempos, “net” y “w32tm”.
En este pequeño proceso, lo primero que debemos hacer siempre es consultar el estado del servicio de tiempo, para ver si se está ejecutando y de donde está sincronizándose:
# w32tm /query /peers
Una vez hecho esto, se puede comprobar que el servidor que se va a configurar es alcanzable mediante un ping y cuando se tiene claro que, sí que es alcanzable, se puede lanzar el comando de configuración siguiente:
# w32tm /config /syncfromflags:MANUAL /manualpeerlist:SERVIDOR_NTP
Donde SERVIDOR_NTP debe ser sustituido por el servidor al que queremos vincular nuestro servicio de hora, por ejemplo “hora.rediris.es”.
# w32tm /config /syncfromflags:MANUAL /manualpeerlist:hora.rediris.es
NOTA: Si da un error como por ejemplo “Error: falta un parámetro : /syncfromflags” o algo similar, el problema puede venir dado por un espacio tras los “:”, y esto puede darse, tanto en “/syncfromflags:” como en “/manualpeerlist:”.
Tras introducir el nuevo valor, el cambio no se hace efectivo a menos que se reinicie el servicio por lo que se deberán lanzar los siguientes comandos:
# net stop w32time
# net start w32time
Por último, es recomendable hacer una nueva consulta de sincronización para ver si el servicio se está ejecutando correctamente y de donde está sincronizándose la hora:
# w32tm /query /peers
Con esto ya tendríamos configurado el servicio correctamente.
Configuración del registro mediante PowerShell:
En caso de tener un sistema moderno, la mejor opción es usar PowerShell, ya que es la consola más potente, y que debemos acostumbrarnos a usar.
Lo primero que haremos es comprobar laconfiguración del registro de Windows para el servicio de hora, concretamente con el comando “Get-ItemProperty”.
# Get-ItemProperty -Path «HKLM:SYSTEMCurrentControlSetServicesw32timeTimeProvidersNtpServer»
Si el servicio no está activado se deberá activar, para ello, se usaré el comando “Set-ItemProperty”.
# Set-ItemProperty -Path «HKLM:SYSTEMCurrentControlSetServicesw32timeTimeProvidersNtpServer» -Name “Enabled” -Value 1
# Set-ItemProperty -Path «HKLM:SYSTEMCurrentControlSetServicesw32timeTimeProvidersNtpServer» -Name “AnnounceFlags” -Value 5
Por último, reiniciamos el servicio con el comando “Restart-Service”.
# Restart-Service w32Time
Y con esto ya lo tendríamos configurado.
Problemas típicos de Servicio de hora:
Un problema bastante recurrente, es encontrarse con equipos que han perdido la confianza debido al fallo de la pila de la placa base.
Por eso, cuando veamos un problema de este tipo, lo primero que debemos mirar es como está la hora en la BIOS y si aparece una hora extraña tipo “01/01/2000” o similar, se debe cambiar la pila, volver a poner en hora la BIOS y reiniciar el sistema para ver si el problema ha remitido, que suele ser lo normal en estos casos.
Otra de las fuentes clásicas de fallos de servicio de hora son los firewalls con unas reglas muy restrictivas, por lo que se recomienda revisar si el puerto UDP 123 está abierto y si no lo está, abrirlo.
En los equipos conectados a un dominio también existe la posibilidad de que el equipo haya quedado en un estado inestable y sea necesario sacar el equipo del dominio y volver a darlo de alta.
El resto de los errores, suelen estar vinculados a una mala configuración del servicio de tiempo por lo que se podrá hacer una reconfiguración tal como se muestra en los puntos anteriores.
Conclusiones de cómo solucionar problemas de hora:
Tal como hemos visto, tener bien configurada la hora de nuestros sistemas, conservando no solo una buena configuración, sino una coherencia entre ellos es una tarea de primer orden, por lo que debemos tenerlo que revisar las configuraciones, si es posible, monitorizarlas, y saber como solucionar problemas de hora típicos que puedan surgirnos.
A lo largo de este artículo, hemos hablado de la importancia que tiene el servicio, de algunos de los problemas más comunes y de como consultar el estado, reiniciarlo, o incluso reconfigurarlo.
Esperamos que esta información pueda resultaros de utilidad en caso de encontraros con algún problema de este tipo. ¡Gracias por leernos!