Servidor de hora (tiempo) en Active Directory

Publicado el Dejar un comentario Etiquetas: , , ,

Aquesta entrada també està disponible en: Catalán

En un entorno de Active Directory es muy importante tener la hora correcta en todos los equipos. Y ya no sólo en los equipos que pertenecen al Active Directory sino en todos los dispositivos que forman el sistema informático: switchs, NAS, cabinas, sistemas de gestión, cortafuegos, etc…. para poder tener una foto clara en caso de una actuación forense.

Últimamente me habéis hecho y me he encontrado muchas consultas referente a problemas derivados de una mala sincronización de la hora. Recordad que un dominio Active Directory se rige por tiquets Kerberos para validación de permisos. Estos tiquets, por defecto, tienen una vida de 5 minutos. Eso quiere decir que si tengo un desfase horario más grande de 5 minutos tengo el equipo fuera del dominio. Si es una estación de trabajo el problema puede no ser tan grave (que lo es porque el usuario no puede trabajar), pero si eso me pasa en un servidor de archivos donde todos los usuarios van a buscar y guardar información, tengo un problema muy grave.

Por lo tanto, no se puede obviar y dejar de lado o por defecto esta configuración. Tiene que ser la primera cosa a hacer en todas las instalaciones después de crear el controlador de Active Directory.

A continuación os dejo el video explicativo sobre lo que pienso y como solucionarlo.

Servidor de hora autoritario

Este acostumbra a ser un único servidor en la empresa. Personalmente utilizo un controlador de Active Directory, al que se deben hacer unas pequeñas modificaciones en el registro, para que vaya a buscar la hora al exterior y la reparta al resto de equipos mediante la sincronización del propio Active Directory.

Para la modificación de estos parámetros, mediante el Editor de Registro (regedit), localizamos la clave de registro del servicio de hora: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time.

Carpeta Config:

Parámetro Valor Descripción
AnnounceFlags 0x00000004 (4) Marca el servidor de hora como servidor fiable, para los servidores miembros o clientes el valor es 10.
MaxAllowedPhaseOffset 300 Tiempo de desplazamiento máximo (en segundos) para intentar ajustar el reloj utilizando la velocidad de reloj. Si es superior, se ajusta directamente. Recordad que 300 segundos corresponde al desfase de kerberos (5 minutos)
MaxNegPhaseCorrection 3600 Corrección de hora negativa (atrás) más grande, en segundos, que puede hacer. Para los equipos de dominio será 0xFFFFFFFF que quiere decir que siempre tiene que hacer la corrección de tiempo. Para el servidor autoritario dejar el valor a 54.000 (15 horas) es suficientemente grande para corregir si hay un desfase.
MaxPosPhaseCorrection 3600 Corrección de hora positiva (adelante) más grande, en segundos, que puede hacer. Para los equipos de dominio será 0xFFFFFFFF que quiere decir que siempre tiene que hacer la corrección de tiempo. Para el servidor autoritario dejar el valor a 54.000 (15 horas) es suficientemente grande para corregir si hay un desfase.

Carpeta Parameters:

Parámetro Valor Descripción
NtpServer pool.ntp.org,0x8 Servicio NTP externo donde se tiene que sincronizar esta máquina. Aquí hay que indicar la dirección del servicio de hora que se quiere utilizar, en mi caso utilizo el internacional NTP asociado al pool de equipos que ofrecen la hora. En caso de disponer de un servicio de hora interno se asignaría su IP o bien cualquier otro servicio, como por ejemplo el oficial Español: hora.roa.es.
Type NTP La sincronización se hace con un recurso externo definido en el parámetro NtpServer

Carpeta TimeProviders\NtpClient:

Parámetro Valor Descripción
Enabled 1 Actívalo como cliente del servicio de hora

Carpeta TimeProviders\NtpServer:

Parámetro Valor Descripción
Enabled 1 Actívalo como servidor del servicio de hora

O bien, en lugar de utilizar directamente el Editor de Registro, como que son varios los parámetros a modificar y siempre son los mismos, se puede hacer con la PowerShell. Así se evita tener que pensar cada vez y posibles errores.

$rootPath = "HKLM:\SYSTEM\CurrentControlSet\Services\W32Time"
# Configuración
$workPath = $rootPath + "\Config"
Set-ItemProperty -Path $workPath -Name "AnnounceFlags" -Value 10
Set-ItemProperty -Path $workPath -Name "MaxAllowedPhaseOffset" -Value 300
Set-ItemProperty -Path $workPath -Name "MaxNegPhaseCorrection" -Value 3600
Set-ItemProperty -Path $workPath -Name "MaxPosPhaseCorrection" -Value 3600
# Parámetros autoritativo
$workPath = $rootPath + "\Parameters"
Set-ItemProperty -Path $workPath -Name "NtpServer" -Value "pool.ntp.org,0x8"
Set-ItemProperty -Path $workPath -Name "Type" -Value "NTP"
# Cliente
$workPath = $rootPath + "\TimeProviders\NtpClient"
Set-ItemProperty -Path $workPath -Name "Enabled" -Value 1
# Servidor
$workPath = $rootPath + "\TimeProviders\NtpServer"
Set-ItemProperty -Path $workPath -Name "Enabled" -Value 1
# Reiniciar servicio
get-service W32time |restart-service
# Comprobar la sincronización externa
w32tm /query /status

Ir comprobando con el w32tm /query /status a que haga la sincronización correcta con el servidor NTP. Si no lo hace, sólo muestra para el reloj interno (LOCL – Local CMOS clock). Dadle un cierto tiempo que pueda hacer la sincronización externa.

 

Configurar el servidor de hora en el resto de clientes del Active Directory

Pueden ser muchos equipos, y ¿no iremos uno por uno a comprobar o modificar su configuración, no? Por eso tenemos las GPOs y nada mejor que configurar una única GPO que se asigna a la unidad organizativa donde residen los equipos. Lo único a tener en cuenta es que esta GPO no se aplique al servidor que se ha seleccionado como autoritario.

Abrimos el Administrador de Directivas de Grupo. Desde el administrador del Servidor, el menú superior de la derecha, hacer clic en Herramientas y en Administración de Directivas de Grupo.

Localizar la carpeta Objetos de Directivas de Grupo. Botón derecho sobre la carpeta y hacer clic en Nuevo.

Introducir un nombre descriptivo, por ejemplo, Sincronización horaria y hacer clic en el botón OK.

Botón derecho sobre la nueva directiva que se acaba de crear y hacer clic en Editar.

El servicio de hora es un servicio asociado a la máquina, por lo tanto, desplegamos las opciones de Configuración de Equipo y localizamos la carpeta:

Directivas > Plantillas Administrativas > Sistema > Servicio de hora de Windows

Desplegar la carpeta para localizar Proveedores de Tiempo. En la parte derecha, hacer clic en la opción Configurar cliente NTP de Windows.

Seleccionar Activar. Y asegurar en Tipos el valor NT5DS. El resto se puede dejar por defecto. Hacer clic en OK para cerrar la configuración.

Para asegurar que el cliente de hora funciona, hacer clic en la opción Activar el cliente NTP de Windows.

Seleccionar Activar. Hacer clic en OK para cerrar la configuración. Tambien se puede cerrar la ventana del editor de Directivas.

Sólo queda aplicar esta directiva en la unidad organizativa donde haya los equipos a los que se quiera aplicar la directiva. Botón derecho sobre la Unidad Organizativa donde se quiere aplicar, con herencia, hacer clic en Enlazar GPO existente y seleccionar la GPO que se acaba de crear.

O bien crear un filtro para que se aplique a todos los equipos menos al servidor autoritario de hora. En este caso, en la carpeta WMI filters, botón derecho, hacer clic en Nuevo.

Indicar un nombre descriptivo, una descripción y hacer clic en el botón Añadir para crear una nueva consulta.

Seleccionar el Namespace, en este caso, root\CIMv2. Escribir la consulta, por ejemplo, seleccionar todos los equipos que no tengan el nombre srvDC16, que correspondería al servidor autoritario de hora:

SELECT * FROM Win32_ComputerSystem where Name <> "srvDC16"

Hacer clic en el botón OKGuardar para almacenar el filtro.

Hacer clic sobre la directiva de sincronización de hora. Asegurar que estamos en la pestaña Ámbito. En la parte inferior, en el apartado Filtros WMI, seleccionar el filtro que se acaba de crear.

Se nos pregunta para confirmar que aplicamos un filtro a la Directiva. Hacer clic en el botón .

Si en los equipos clientes ejecutamos un GPUPDATE /FORCE y después un GPRESULT /R, se puede comprobar que se aplica correctamente la directiva a los equipos MENOS al servidor con el nombre srvDC16.

 

Configurar el heartbeat del servidor de hora en nodos de virtualización

Es uno de los puntos más importantes, ya que nos hace bailar mucho la estructura. La mayoría de incidencias que he tenido han venido porque el servidor físico se avanzaba o retrasaba y, provocaba un error de hora en toda la red. Si bien lo más importante es la máquina que contiene el servidor autoritario de hora, en este punto ya recomiendo hacerlo en todas las máquinas. Así me evito muchos problemas.

Microsoft Hyper-V

 

Para los nodos de Microsoft Hyper-V, desde la consola de administración de Hyper-V, en cada máquina virtual, botón derecho sobre ella y hacer clic en Configuración.

En el menú de la izquierda, en el apartado administración. Seleccionar Servicios de Integración.

Desmarcar el checkbox en Sincronización de Hora y hacer clic en el botón OK para aplicar los cambios.

Esto puede ser un poco pesado para todas las máquinas virtuales, y siguiendo la metodología DevOps, abrimos una consola de PowerShell con privilegios de administrador. Recuperamos la lista de todas las máquinas virtuales creadas en el nodo y aplicamos la configuración del servidor de hora:

Get-VM | Disable-VMIntegrationService -Name "Time Synchronization"

Para comprobar en que estado está en todas las máquinas virtuales podéis ejecutar el comando:

Get-VM | Get-VMIntegrationService -Name "Time Synchronization" |ft VMName, Enabled

 

VMware

Sí, también toca en VMware gestionar el servicio de hora. En este caso, con el entorno FLASH (a fecha de creación de este artículo la versión HTML no lo permite hacer), seleccionar la máquina virtual en concreto, botón derecho del ratón sobre ella y hacer clic en Editar configuración.

En el menú superior, hacer clic en opciones VM.

Hacer clic en VMware Tools para desplegar sus opciones.

Desmarcar el checkbox de sincronizacion de hora con el anfitrión y hacer clic en el botón Aceptar para aplicar los cambios.

 

Configurar el servidor de hora en el resto de dispositivos

Aquí ya sólo puede intervenir la configuración de cada dispositivo utilizando el protocolo NTP. Indicando como servidor de NTP el servidor que hemos definido como autoritario o bien el controlador de Active Directory que tengamos más a mano.

Os dejo algún ejemplo:

Conmutadores Cisco

Configuración para consola, como no, y donde 192.168.0.11 correspondería a la dirección IP del servidor de hora autoritario.

sntp server 192.168.0.11 
sntp broadcast cliente

Conmutadores Hewlett Packard Enterprise / Aruba

Configuración para consola,

timesync sntp
sntp unicast
sntp server priority 1 192.168.0.11

Cabinas de almacenamiento NetApp

Com no, configuración para la consola.

En 7-mode, repetirlo en todos los nodos, no es correcto que unos lo tengan y otros no:

options timed.sched 1h
options timed.window 15s
options timed.servers 192.168.0.11
options timed.proto ntp
options timed.enable on

En Cluster DataOnTAP:

cluster time-service ntp server show
cluster time-service ntp server create -server 192.168.0.11 -version auto -preferred true

¿Te ha gustado el artículo? Lo puedes compartir en las redes sociales. También puedes dejar tu opinión, comentario o sugerencia. ¡Gracias!

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *