Haikos Blog Blog von Haiko Hertes zu allen Themen rund um Microsoft und Datacenter

28Jun/180

PowerShell – Windows Client oder Windows Server als NTP Server benutzen

Sicherlich ist den Meisten bekannt, dass Windows seit vielen Generationen out-of-the-box als NTP-Client genutzt werden kann - also die Uhrzeit von einem NTP-Server beziehen kann. Aber dass sowohl Windows Server (seit WS2003) als auch Windows Client (seit Win XP) auch mit Bordmitteln als NTP-Server genutzt werden können, dürfte weitgehend unbekannt sein. Das Ganze lässt sich in einigen wenigen Schritten erreichen:

  • Windows Zeitdienst W32Time auf automatischen Start setzen
  • W32Time als NTP-Server konfigurieren (Registrierungsschlüssel)
  • W32Time Dienst neustarten
  • Firewall auf udp/123 für Verbindungen von außen öffnen

Natürlich kann man das sehr effizient mittels PowerShell erledigen. Dazu habe ich ein einfaches Script geschrieben:

# This script makes a Windows 10 PC acting as a NTP server 
 
#Enable autostart for W32Time Service
Set-Service -Name W32Time -StartupType Automatic
 
# Configure W32Time Service to act as a NTP server
Set-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer -Name Enabled -Value 1
 
# Update W32Time service
w32tm.exe /config /update
 
# Restart W32Time service
Restart-Service -Name W32Time
 
# Check configuration - VMICTimeProvider / Enabled should be "1" now
w32tm.exe /query /configuration
 
# Create an inbound rule for the Windows Firewall
New-NetFirewallRule -DisplayName "Allow NTP UDP/123 Incomming" -Profile Any -Action Allow -Direction Inbound -LocalPort 123 -Protocol udp -Enabled true
15Feb/160

AD Domänen Controller: Zeitdifferenz / Time Skew zum PDC-Emulator

Bei der Prüfung von SCOM-Warnungen fiel mir diese hier besonders ins Auge:

ADTime0

ADTime1

Die Meldung “The Time Skew latency is above the configured threshold” besagt im Wesentlichen, dass die Zeitdifferenz zwischen einem “normalen” DC und dem PDC-Emulator zu hoch ist, in diesem Fall bei 267 Sekunden liegt und damit über der Warnungs-Schwelle von 5 Sekunden. Und tatsächlich, die Server haben eine sichtbare Zeitdifferenz:

ADTime2

Nun ist es ja so, dass alle Server einer Domäne die Uhrzeit beim PDC-Emulator abholen – oder es zumindest sollten. Dieser wiederum sollte so konfiguriert sein, dass er die Zeit von einer gültigen externen Zeitquelle empfängt. Das erreicht man recht einfach mit folgenden Aufrufen:

w32tm.exe /config /manualpeerlist:”0.de.pool.ntp.org 1.de.pool.ntp.org 2.de.pool.ntp.org 3.de.pool.ntp.org” /syncfromflags:manual /reliable:YES /update

w32tm.exe /config /update

PS: Restart-Service w32time

Im festen Glauben, dass dies auch in meiner Umgebung so ist, habe ich dies dennoch gegengeprüft:

Der Aufruf

netdom query fsmo

liefert die Verteilung der FSMO-Rollen, u.a. erfährt man eben auch, welcher DC aktuell der PDC-Emulator ist.

ADTime3

Nun kann man mit

w32tm /monitor

auf einem der DCs prüfen, welcher DC woher seine Zeit bekommt:

ADTime4

Und siehe da – die beiden DCs, die nicht PDC-Emulator sind bekommen ihre Zeit von irgend einem Server “frei im Internet”. Dies kann z.B. daran liegen, dass diese DCs früher mal PDC-Emulator waren und daher noch auf die Synchronisierung mit einer externen Quelle eingestellt sind. Dies lässt sich sehr leicht auf den betreffenden DCs (also denjenigen, die kein PDC-Emulator mehr sind) beheben. Dazu ist lediglich der Aufruf

w32tm /config /syncfromflags:domhier /update

net stop w32time

net start w32time

notwendig:

ADTime5

Nach kurzer Zeit sollte die Uhrzeit dann wieder passen. Zur Sicherheit kann man dies nun noch einmal mit

w32tm /monitor

überprüfen:

ADTime6

Jetzt sieht man, dass die beiden ersten DCs (beide kein PDC-Emulator) von HVSRV10 (dem PDC-Emulator) synchronisieren und dieser wiederum von einer externen Zeitquelle (stammt aus dem NTP-Pool).

Nun stimmen auch die Zeiten aller DCs wieder überein:

ADTime7