Sincronizzazione oraria e configurazione NTP in Windows Server

Panoramica

Questo articolo spiega in dettaglio il funzionamento della sincronizzazione oraria in un ambiente di dominio Windows Server, con configurazione basata su PowerShell.
Sono inclusi la progettazione basata sul PDC Emulator, la configurazione del servizio w32time, l’unificazione tramite GPO e le considerazioni per gli ambienti virtualizzati.


Riferimenti delle variabili

Variabile Esempio Descrizione
<<PDC_HOST>> DC01.contoso.local PDC Emulator (riferimento orario del dominio)
<<SECONDARY_DC>> DC02.contoso.local Altri controller di dominio
<<NTP_SERVER>> ntp.nict.jp Server NTP esterno o IP
<<CLIENT_HOST>> SRV01.contoso.local Server membro o client
<<DOMAIN_NAME>> contoso.local Nome del dominio Active Directory

Step 1: Architettura di sincronizzazione del tempo nel dominio

In un dominio Active Directory, la sincronizzazione segue una struttura gerarchica:

Livello Origine di sincronizzazione Descrizione
PDC Emulator Server NTP esterno Fonte principale e unica di tempo “attendibile” per il dominio
Altri DC PDC Emulator Mantengono la coerenza temporale nel dominio
Server membri / Client Controller di dominio più vicino Sincronizzazione automatica per l’integrità di Kerberos

In un ambiente Workgroup, ogni server deve essere configurato manualmente con un server NTP.


Step 2: Configurazione NTP esterna per il PDC Emulator

Il PDC Emulator deve essere impostato come unica fonte di tempo attendibile del dominio.

# Impostazione server NTP esterni (multipli possibili)
w32tm /config /manualpeerlist:"ntp.nict.jp time.google.com" /syncfromflags:manual /reliable:yes /update

# Annuncio come fonte di tempo attendibile
reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config /v AnnounceFlags /t REG_DWORD /d 5 /f

# Riavvio del servizio
net stop w32time && net start w32time

Verifica:

w32tm /query /configuration
w32tm /query /status

Step 3: Configurazione di altri DC e server membri

Gli altri controller di dominio e server membri si sincronizzano automaticamente con il PDC, ma è possibile configurare manualmente:

# Seguire la gerarchia del dominio
w32tm /config /syncfromflags:domhier /update
net stop w32time && net start w32time

Forzare la sincronizzazione e verificarne lo stato:

w32tm /resync /force
w32tm /query /status

Step 4: Unificazione delle impostazioni tramite GPO (PowerShell)

Le impostazioni di sincronizzazione possono essere applicate a tutto il dominio tramite Group Policy (GPO).
Tutti i passaggi vengono gestiti tramite PowerShell senza usare l’interfaccia grafica.


1. Caricamento modulo GPO e verifica policy esistenti

Import-Module GroupPolicy

# Elenco di tutte le GPO
Get-GPO -All | Select-Object DisplayName, Id, GpoStatus

# Verifica della Default Domain Policy
Get-GPO -Name "Default Domain Policy" | Select-Object DisplayName, ModificationTime

2. Controllo impostazioni di sincronizzazione correnti

# Verifica delle impostazioni correnti (se assenti → non configurate)
Get-GPRegistryValue -Name "Default Domain Policy" `
  -Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
  -ValueName Type

Get-GPRegistryValue -Name "Default Domain Policy" `
  -Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
  -ValueName NtpServer

Se viene mostrato un errore “non trovato”, significa che il valore non è ancora impostato.


3. Abilitazione e configurazione del client NTP

# Abilitare client NTP
Set-GPRegistryValue -Name "Default Domain Policy" `
  -Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
  -ValueName Enabled -Type DWord -Value 1

# Modalità di sincronizzazione (NT5DS = gerarchia dominio / NTP = esterno)
Set-GPRegistryValue -Name "Default Domain Policy" `
  -Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
  -ValueName Type -Type String -Value "NT5DS"

# Server NTP esterno (solo per PDC)
Set-GPRegistryValue -Name "Default Domain Policy" `
  -Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
  -ValueName NtpServer -Type String -Value "<<NTP_SERVER>>,0x8"

# Intervallo di polling (secondi)
Set-GPRegistryValue -Name "Default Domain Policy" `
  -Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
  -ValueName SpecialPollInterval -Type DWord -Value 3600

4. Verifica collegamento e ambito della GPO

# Generazione report collegamenti GPO (HTML)
Get-GPOReport -Name "Default Domain Policy" -ReportType Html -Path "$env:TEMP\DefaultDomainPolicy.html"

5. Applicazione e verifica della GPO

# Applicazione immediata
gpupdate /force

# Verifica policy applicate
gpresult /r

# Report dettagliato in HTML
Get-GPResultantSetOfPolicy -ReportType Html -Path "$env:TEMP\gpresult.html"

6. Verifica dei valori nel registro

reg query "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient"

Esempio output:

Enabled       REG_DWORD  0x1
Type          REG_SZ     NT5DS
NtpServer     REG_SZ     ntp.nict.jp,0x8
SpecialPollInterval REG_DWORD 0xe10

Note per ambienti virtualizzati

In ambienti Hyper-V o VMware possono verificarsi conflitti di sincronizzazione tra host e VM.
Situazioni comuni:

  • Sincronizzazione attiva sia su host che su VM
  • PDC virtualizzato con sorgente NTP differente
  • Snapshot o migrazioni che causano rollback temporali

Configurazione consigliata:

  • Disattivare la sincronizzazione host sul PDC Emulator
  • Permettere la sincronizzazione host su altre VM se necessario
  • Tra DC, usare esclusivamente il servizio w32time

Test e troubleshooting

# Test sincronizzazione NTP
w32tm /stripchart /computer:"<<NTP_SERVER>>" /dataonly /samples:5

# Stato servizio
Get-Service w32time

# Ultimi 10 eventi W32Time
Get-WinEvent -LogName System | Where-Object {$_.ProviderName -eq "Microsoft-Windows-Time-Service"} |
  Select-Object TimeCreated, Id, LevelDisplayName, Message -First 10

Conclusione

  • Il PDC Emulator è l’unica fonte di tempo attendibile nel dominio.
  • Solo il PDC deve usare server NTP esterni; gli altri seguono la gerarchia domhier.
  • In ambienti virtualizzati, evitare conflitti disabilitando la sincronizzazione host sul PDC.