Introducción
Este artículo explica cómo configurar Windows como un servidor NTP para que equipos Linux sincronicen su reloj mediante el protocolo NTP. Se requiere el puerto UDP 123 habilitado en la red.
Configuración en Windows (PowerShell con privilegios de administrador)
Habilitar el servicio NTP mediante el registro
Para activar la función de servidor NTP, establecer el sistema como fuente de tiempo confiable y configurar el modo de sincronización.
# Activar el proveedor NTP en el registro
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer" -Name "Enabled" -Value 1 -Type DWord -Force
# Definir indicadores de anuncio para fuentes confiables (valor 5 combina opciones)
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\W32Time\Config" -Name "AnnounceFlags" -Value 5 -Type DWord -Force
# Especificar el tipo de sincronización como NTP
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\W32Time\Parameters" -Name "Type" -Value "NTP" -Type String -Force
Reiniciar el servicio de tiempo y configurar el inicio automático
# Detener y reiniciar el servicio w32time para aplicar cambios
Stop-Service w32time -Force
Start-Service w32time
# Establecer el servicio para iniciar automáticamente con el sistema
Set-Service w32time -StartupType Automatic
Crear una regla de firewall para permitir el tráfico UDP 123
# Eliminar reglas existentes con nombre similar para evitar conflictos
Get-NetFirewallRule -DisplayName "Servidor NTP" | Remove-NetFirewallRule -ErrorAction SilentlyContinue
# Crear una nueva regla de entrada que permita conexiones UDP en el puerto 123
New-NetFirewallRule -DisplayName "Servidor NTP" -Direction Inbound -Protocol UDP -LocalPort 123 -Action Allow -Profile Any
Verificar la configuración del servidor NTP
# Consultar la configuración actual del servicio de tiempo
w32tm /query /configuration
# Comprobar que el puerto 123 está en escucha
netstat -an | findstr "UDP" | findstr ":123"
Configuración en Linux (con acceso root)
Detener servicios de tiempo que puedan bloquear el puerto NTP
# Desactivar servicios de tiempo del sistema que usan el puerto 123
systemctl stop ntpd chronyd systemd-timesyncd
systemctl disable ntpd chronyd systemd-timesyncd
Instalar la herramienta ntpdate si no está disponible
Para distribuciones basadas en Debian/Ubuntu:
apt-get update && apt-get install -y ntpdate
Para distribuciones basadas en RHEL/CentOS:
yum install -y ntpdate
Sincronizar la hora con el servidor NTP de Windows
Reemplaza la dirección IP con la del servidor Windows.
# Ejemplo de sincronización con una IP específica
ntpdate 192.168.1.100
Persistir la hora en el hardware del sistema
hwclock --systohc
Configurar una tarea cron para sincronización periódica (opcional)
Para sincronizar cada 15 minutos, edita las tareas cron del usuario.
# Abrir el editor de crontab
crontab -e
Añade la siguiente línea al archivo:
*/15 * * * * /usr/sbin/ntpdate 192.168.1.100 > /dev/null 2>&1
Para listar las tareas programadas:
crontab -l
Solución de errores comunes
Error en Linux: el socket NTP está en uso
Esto ocurre si un servicio de tiempo del sistema sigue activo. Ejecuta los pasos de desactivación mencionados anteriormente.
Error en Linux: no se encontró un servidor adecuado para la sincronización
Causas posibles y soluciones:
- Dirección IP del servidor incorrecta: verifica con
ipconfigen Windows. - Firewall bloqueando el puerto UDP 123: asegúrate de que la regla está creada en Windows.
- Bloqueo de red entre subredes: prueba desactivando temporalmente el firewall de Windows con
Set-NetFirewallProfile -Profile Domain,Private,Public -Enabled Falsepara diagnóstico. - Alternativa usando SSH para sincronización sin NTP: ejecuta
ssh 192.168.1.100 "date +%Y%m%d%H%M%S" | xargs date -sdesde Linux.
Indicadores de éxito
En Windows, ejecuta netstat -an | findstr ":123" y confirma la presencia de entradas UDP en escucha. En Linux, al ejecutar ntpdate, la salida debe mostrar un ajuste de tiempo exitoso, similar a "adjust time server 192.168.1.100 offset -0.012345 sec".