Sincronização de hora no Windows Server e configuração NTP

Visão geral

Este artigo explica como funciona a sincronização de tempo em um ambiente de domínio do Windows Server.
Cobrimos o desenho com o PDC Emulator como referência, a configuração do serviço w32time, a padronização por GPO e pontos de atenção em ambientes virtualizados.


Referência de variáveis

Variável Exemplo Descrição
<<PDC_HOST>> DC01.contoso.local PDC Emulator (referência de tempo do domínio)
<<SECONDARY_DC>> DC02.contoso.local Outro controladores de domínio
<<NTP_SERVER>> ntp.nict.jp Servidor NTP externo (nome ou IP)
<<CLIENT_HOST>> SRV01.contoso.local Servidor membro ou cliente
<<DOMAIN_NAME>> contoso.local Nome do domínio do Active Directory

Etapa 1: Hierarquia básica de tempo no domínio

Em Active Directory, a sincronização segue uma hierarquia:

Nível Fonte de sincronização Descrição
PDC Emulator NTP externo Única fonte de tempo confiável do domínio
Demais DCs PDC Emulator Mantêm a hierarquia de tempo do domínio
Membros / Clientes DC mais próximo Sincronizam automaticamente para consistência do Kerberos

Em workgroup, cada máquina deve apontar manualmente para uma fonte NTP.


Etapa 2: Configurar NTP externo no PDC Emulator

Configure o PDC como a fonte de tempo confiável do domínio.

# Definir servidores NTP externos (múltiplos são aceitos)
w32tm /config /manualpeerlist:"ntp.nict.jp time.google.com" /syncfromflags:manual /reliable:yes /update

# Anunciar como fonte confiável
reg add HKLM\SYSTEM\CurrentControlSet\Services\W32Time\Config /v AnnounceFlags /t REG_DWORD /d 5 /f

# Reiniciar o serviço
net stop w32time && net start w32time

Verificação:

w32tm /query /configuration
w32tm /query /status

Etapa 3: Configurar DCs e membros para usar a hierarquia

Por padrão, outros DCs e membros seguem o PDC; ainda assim é possível forçar a configuração:

# Seguir a hierarquia do domínio
w32tm /config /syncfromflags:domhier /update
net stop w32time && net start w32time

Forçar sincronização e checar status:

w32tm /resync /force
w32tm /query /status

Etapa 4: Política unificada de tempo via GPO (PowerShell)

Padronize as definições de tempo com GPO e PowerShell — consulta, configuração e aplicação fim-a-fim.


1. Carregar módulo de GPO e auditar políticas

Import-Module GroupPolicy

# Listar GPOs
Get-GPO -All | Select-Object DisplayName, Id, GpoStatus

# Conferir a Default Domain Policy
Get-GPO -Name "Default Domain Policy" | Select-Object DisplayName, ModificationTime

2. Consultar configurações atuais de tempo

# Valores existentes (se ausentes, ainda não configurados na GPO)
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

Uma mensagem “não encontrado” indica apenas ausência de valor — situação normal quando ainda não configurado.


3. Habilitar e configurar o cliente NTP

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

# Modo de sincronização (NT5DS=hierarquia do domínio / NTP=externo)
Set-GPRegistryValue -Name "Default Domain Policy" `
  -Key "HKLM\SOFTWARE\Policies\Microsoft\W32Time\TimeProviders\NtpClient" `
  -ValueName Type -Type String -Value "NT5DS"

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

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

4. Verificar vínculo e escopo da GPO

# Relatório em HTML do vínculo/escopo
Get-GPOReport -Name "Default Domain Policy" -ReportType Html -Path "$env:TEMP\DefaultDomainPolicy.html"

5. Aplicar GPO e validar

# Aplicar imediatamente
gpupdate /force

# Validar políticas aplicadas
gpresult /r

# Relatório detalhado (HTML)
Get-GPResultantSetOfPolicy -ReportType Html -Path "$env:TEMP\gpresult.html"

6. Conferir valores efetivamente aplicados no Registro

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

Exemplo de saída:

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

Observações para ambientes virtualizados

Em Hyper-V/VMware, podem ocorrer conflitos se host e guest sincronizarem simultaneamente.

Cenários típicos:

  • Sincronização ativa tanto no host quanto na VM
  • PDC virtualizado apontando para uma fonte NTP diferente
  • Snapshots/migrações causando salto ou regressão de tempo

Recomendações:

  • Desative a sincronização de hora do host no PDC Emulator
  • Outras VMs podem usar a hora do host
  • Entre DCs, padronize apenas com w32time

Testes e troubleshooting

# Teste de NTP (latência/desvio)
w32tm /stripchart /computer:"<<NTP_SERVER>>" /dataonly /samples:5

# Status do serviço
Get-Service w32time

# Últimos 10 eventos do serviço de tempo
Get-WinEvent -LogName System | Where-Object {$_.ProviderName -eq "Microsoft-Windows-Time-Service"} |
  Select-Object TimeCreated, Id, LevelDisplayName, Message -First 10

Resumo

  • O PDC Emulator é a única fonte de tempo confiável do domínio.
  • Somente o PDC usa NTP externo; demais sistemas seguem domhier.
  • Em VMs, desative a sincronização do host no PDC para evitar conflitos.