Zeitsynchronisation in Netzwerken

Nahezu überall spielt das Datum und die uhrzeit eine wichtige Rolle. Jede Datei hat ein Datum und uhrzeit der Erstellung und letzten Änderung. E-Mails passieren die Netzwerke und Zeitzonen und protokollieren die Stationen im Kopf der Nachricht mit.

Wenn viele Systeme zusammen arbeiten, dann ist eine korrekte Einstellung der uhrzeit nicht nur hilfreich sondern teilweise absolut notwendig. Einige System (z.B. NetWare NDS) sind ohne Zeitsynchronisation nicht betriebsfähig, und auch das Active Directory benutzt Zeitstempel, um bei Konflikten bei der Replikation die aktuellsten Daten zu übernehmen. Auch die Autorisierung mittels Kerberos nutzt Gültigkeitszeiten, so dass Computer die mehrere Stunden daneben liegen, Probleme bekommen.

Aber auch wir als Administratoren profitieren von einer synchronen uhrzeit, da viele Probleme nicht auf ein System bezogen werden können und die Auswertung von Protokolldateien, Ereignisprotokollen (Eventlog) etc. sehr viel einfacher möglich ist, wenn alle Systeme die gleiche uhrzeit haben.

Auch für Anwender ist die korrekte uhrzeit notwendig und sinnvoll, damit z.B. das Datum einer Mail korrekt ist und damit Termineinladungen als auch die Erinnerungen daran richtig erfolgen. Sobald über diesen Weg auch Termine abgesprochen werden, muss die Zeitzone mit berücksichtigt werden. Da 9:00 in Berlin eben nicht 9:00 uhr in London bedeutet.
Daher ist neben einer genauen und synchronen Zeit auch die korrekte Einstellung der Zone notwendig.  Aber was ist eigentlich die "richtige Zeit" ?

Zeitzonen

Ein Wort vorab. Es gibt keine absolute Zeit. Zeit ist immer etwas relatives. Ich möchte gar nicht so weit gehen, wie der Physiker Einstein mit der Relativitätstheorie, dass die Zeit sogar unterschiedlich schnell läuft, abhängig von der eigenen Geschwindigkeit, aber die Erde ist rund und dreht sich und für jeden Menschen steht mittags die Sonne im Zenit. Die Folge davon ist, dass es auf unserer Erde mehrere Zeitzonen gibt. (24 Stück und einige Sonderzonen), welche unterschiedliche uhrzeiten anzeigen. Demnach ist 12 uhr Mittag nicht überall auf der Welt 12 uhr Mittag. So einleuchtend diese Trivialität ist, so tief greifend ist die Bedeutung für die IT-Branche.

Aus diesem Grunde hat sich die Menschheit darauf geeinigt, die uhrzeit ein Greenwich, England als Basis zu nutzen. Dies ist die Zeitzone 0 oder auch GMT (Greenwich Meantime) bezeichnet. Alle anderen Zeitzonen sind relativ dazu zu sehen. Jede Zeitzone hat dazu eine dreistellige Abkürzung. MET steht für „midle european time“ und ist immer eine Stunde der GMT voraus, Der Faktor beträgt also +0100.

Aus der uhrzeit 08:00 GMT wird bei der Anzeige auf einem System in Deutschland die uhrzeit 09:00 MET. Zumindest währen der Winterzeit. Entsprechend gilt dies auch für andere Zeitzonen auf unserer Welt. Neben den 24 Zonen gibt es einige Sonderzonen, z.B.: Inseln und besondere Staaten, die sich eine eigene Zeitzone gegeben haben und um eine halbe Stunde vor oder nachlaufen. Auch sind die Zeitzonen nicht alle gleich verteilt. Einige Zeitzonen sind breiter, um die Ländergrenzen einzuschließen. Nur auf den Ozeanen verlaufen die Zeitzonen nahezu gerade von Pol zu Pol

Sommerzeit und Winterzeit

Weil dies nicht schon genug Aufwand bedeutet, wurden nun bei einigen Zonen auch noch die Sommerzeit eingeführt. Auf Gründen der Energieeinsparung wurde versucht, das Arbeitsleben an die Sonnenscheindauer anzupassen, damit der Bedarf an Energie für Beleuchtung etc. reduziert wird. Daher ändern einige Staaten zweimal im Jahr ihre uhrzeit. Sie ändern dabei nicht ihre Zeitzone, sondern verstellen nur die uhr. Das Ergebnis ist, dass unsere Zeitzone in Europa gerne als MET-1MEST bezeichnet wird. Im Sommer verstellen wir unsere uhr zusätzlich um eine Stunde. Auf dieser Information geht aber nicht hervor, wann diese Umstellung erfolgt. Und je nach Betriebssystem, Version, Patchlevel oder Einstellung des Administrators sind die Werte eventuell falsch. Weiterhin wurde die umschaltzeit von Sommerzeit auf Winterzeit vor einigen Jahren geändert, so dass die umschaltzeiten bei älteren Systemen falsch eingetragen sind. Als Quintessenz müssen wir daher darauf achten:

  • Korrekte Zeitzoneneinstellung
  • Aktivierung der umschaltung Sommerzeit und Winterzeit
  • Korrekte Parameter der umschaltzeiten

Systeme ohne automatische Umstellung bedürfen der manuellen Anpassung der uhrzeit als auch der Anpassungsparameter der Zone. Ein Beispiel hierzu ist der Mailserver Mercury.NLM (SMTP-Server als NLM für NetWare), welchem manuell korrigiert werden muss.

Änderung der Zeitzone

Nun könnte man nahe legen, dass eine falsche Zeitzone einfach wieder geändert werden kann und alles ist in Ordnung. Dies stimmte auch für alle Ereignisse, die ab diesem Zeitpunkt eintreffen.
Aber vorherige Ereignisse könnten sich ungeplant verschieben. Immer dann nämlich, wenn die Software nicht die lokale Zeit speichert, sondern die GMT-Zeit intern zum Speichern verwendet. Dies macht z.B. das NTFS-Dateisystem genauso wie Outlook für die Speicherung von Terminen. Wird nun die Zeitzone verändert, verschieben sich die Termine ebenso. Dies ist durchaus gewollt, wenn ein Mitarbeiter um die halbe Welt reist und auf den Notebook die Zeitzone anpasst. Dann ist es normal, dass ein Termin, der in Europa nachmittags stattfindet, im Kalender plötzlich früh morgens angezeigt wird. Schließlich muss ich frühmorgens in den uSA nach Deutschland anrufen, da dort schon später Abend ist. Wird die Zeitzone aber anhand einer falschen Einstellung korrigiert, dann ist die Verschiebung der Termine nicht gewünscht. Darauf ist zu achten.

Die Einstellung der Zeitzone ist stark vom Betriebssystem abhängig und dort nachzulesen. In der Regel wird die Zeitzone eingetragen oder aus einer Liste ausgewählt:

  • Zeitzone in Europa: MET-1MEST (Normalzeit)
  • umschalten von Winter auf Sommerzeit: letzter Sonntag im März um 2:00 plus 1 h
  • umschalten von Sommerzeit auf Winterzeit: letzter Sonntag im Oktober um 3:00 minus 1

Je nach Betriebssystem erfolgt dies automatisch oder manuell.

Achtung: eine korrekte Zeitzone ist auch für den Betrieb mit Outlook sehr wichtig

Die korrekte uhrzeit

Nachdem wir nun die Zeitzone der Systeme korrekt gesetzt haben, können wir sicher sein, dass alle Systeme die gleiche relative uhrzeit nutzen. Nun fehlt noch ein Weg, allen Systemen die "richtige" uhrzeit zu gegeben, denn gegen eine falsch laufende uhr helfen auch korrekte Zeitzonen nicht. Daher müssen wir uns erst einmal die uhrzeit besorgen. Dazu gibt es mehrere Quellen:

  • Armbanduhr des Administrator
    Jeder Administrator kann die uhrzeit seines Servers von Hand aktualisieren. Sicher nicht optimal aber ein Anfang. Abweichungen von einigen Minuten sind nicht immer kritisch, solange alle Systeme gleich "falsch" gehen.
  • Funkuhr (DCF-77)
    Diverse Produkte erlauben es, die amtliche deutsche uhrzeit per Kurzwellenfunk zu erhalten und an den Computer weiter zu leiten.
  • Funkuhr (GPS)
    Das globale Positionierungssystem basierte darauf dass der Empfänger von mehreren Satelliten eine "genaue" uhrzeit erhält und er anhand der Verzögerung durch die unterschiedlichen Entfernungen zum Satellit seine Position berechnet. Auch diese uhrzeit kann genutzt werden, da sie sehr genau und weltweit verfügbar ist.
  • Internet uhren (NTP)
    Viele genaue uhren (z.B. auch die Funkuhrquelle) sind über das Internet zu erreichen (NTP). Zwar verhindern hier die unterschiedlichen Laufzeiten der Pakete eine hochgenaue Übernahme, aber wenn Sie eine Abweichung von vielleicht 10 Millisekunden nicht stört, ist die ein praktikabler Weg, vor allem wenn Funkuhren aufgrund der Abschirmung ihres Rechenzentrums nicht funktionieren.

Gerade der Bezug der Zeit über Internet ist heute hinreichend genau und ohne weitere Kosten möglich, da viele Provider für ihre Kunden entsprechende Zeitserver anbieten. Selbst wenn der Provider keinen "nahen" Server anbietet, gibt es jede Menge frei erreichbare Server. Einige Betreiber wünschen sich vorab eine Information, wer ihren Server hier denn abfragt.

Über diesen Weg sollte auf jeden Fall ihr PDC-Emulator der Root-Domäne eine korrekte uhrzeit erhalten. Auf dem Bild sehen Sie aber schon, dass auch andere DCs in der gleichen Domäne, Mitgliedsserver und andere DCS von anderen Domänen in diesem Forest ihre uhrzeit beziehen. Auch die erfolgt über das Protokoll NTP.

Verteilen der Zeit - NTP

Nun geht es darum, diese Zeit allen Systemen im LAN bereitzustellen. Auch wenn viele Hersteller eigene Protokolle und Techniken entwickelt haben  (Angefangen bei der Integration in den NetWare Client bis zum Aufruf von "NET TIME \\server /SET /YES" per AT-Jobs) so gibt es heute nur noch eine sinnvolle Möglichkeit, die uhrzeit im Netzwerk zu verteilen:

Das Network Time Protokoll (NTP) bzw. die vereinfachte Version SNTP  (Simple NTP) erlaubt es, über wenige IP-Pakete (genaugenommen Protokoll UDP Port 123) die uhrzeit von einem NTP-Server zu beziehen. Bleiben also nur noch die Fragen:

  • Welche Struktur der Verteilung muss ich bereithalten
  • Wie komme ich sicher an einen NTP Server durch meine Firewall
  • Wie mache ich meinen Server zum NTP Server ?
  • Wie mache ich meine Clients zum NTP Client ?

Infrastruktur

Inwieweit sie mehrere Zeitserver an verschiedenen Standorten ihres unternehmens bereitstellen um die Belastung des WAN zu reduzieren und eine Fehlerredundanz und Lastverteilung zu erreichen, kann ich ihnen in wenigen Sätzen nicht beschreiben. Allerdings sollten Sie ab einer bestimmten Größe auch mehrere NTP-Server zentral bereitstellen, die z.B. per DNS mit dem gleichen Namen erreichbar sind. (Round Robin). Auf der anderen Seite bedeutet ein Client, der alle 6 Stunden seine Zeit abfragt, gerate mal 128 Byte Netzwerklast, so dass sie auch sehr viele Clients über WAN anbinden können. Die Belastung durch Broadcasts, WINS, DNS-Abfragen, Routingprotokolle etc. ist um ein vielfaches höher. Daher eher weniger Server, die dann aber kontrolliert werden anstelle vieler lokaler Server, die aufwändiger zu kontrollieren sind.

Achtung bei der Einführung eines Active Directory. Mit dem AD kommt automatisch eine funktionierende Zeitsynchronisation mit, bei der Domain Controller als NTP Server dienen, die sich ihre Zeit vom PDC Emulator holen welche ihre Zeit von der übergeordneten Domäne bzw. dem Forrest Master holen. Aber dies ist alles konfigurierbar.

Server

Lesen Sie die Dokumentationen zu ihrem Server und sie werden feststellen, dass die meisten Server heute sowohl als NTP Client als auch NTP-Server dienen können. Dies trifft auf die aktuellen Versionen von Windows 2000 ebenso zu wie auf NetWare 5.x und eigentlich alle Derivate von Unix und LINuX. ältere Versionen wie NetWare 3.x 4.x und Windows NT 4.0 können mit Drittsoftware (kostenfrei) NTP-tauglich gemacht werden, z.B. mit dem W32TIME-Dienst für Windows NT 4.0.

Client

Bei den Clients sieht es etwas anders aus. Clients müssen nur die uhrzeit von einem vertrauenswürdigen Server beziehen. Dies muss nicht unbedingt per NTP geschehen. Verschiedene Systeme haben eigene Wege hierzu implementiert. So wird in einer Umgebung mit NetWare Client die uhrzeit automatisch an die Zeit des Servers angepasst. Gerade mit Windows NT haben aber normale Anwender überhaupt nicht mehr das Recht, die uhrzeit des Computers zu ändern, so dass alle Hilfsprogramme im Anmeldeskript fehlt schlagen. Aber Anmeldeskripte sind auch keine Hilfe, da sie nicht immer und regelmäßig ausgeführt werden. Daher muss die uhrzeitkorrektur Bestandteil des Kernsystems werden und unabhängig von Anwendern sein.

  • DOS und Windows 3.1 Clients
    Hier gibt es keine Rechte aber auch lange Zeit kein TCP/IP. Daher sind auch keine Funktionen für NTP eingebaut. Auch Hintergrundprogramme und Dienste sind aufgrund Speicherüberlegungen nicht sonderlich hilfreich Tipp: Nutzen Sie hier weiterhin Anmeldeskripte und Programme wie NETTIME (NetWare), NET TIME (Microsoft) oder eine der vielen Freeware Tools zur Zeitsynchronisation (Siehe Links) 
  • Windows 9x Clients
    Auch wenn Windows 95 neuer ist und TCP/IP zum Standard gehört, ist NTP nicht eingebaut. Auch hier: Anmeldeskript oder Drittprogramme.
  • Windows NT4 Workstation
    Installieren und konfigurieren Sie den W32TIME-Dienst aus dem Ressource Kit oder dem Link unten und sie haben einen sorgenfreien kleinen Dienst mehr, der die uhrzeit aktuell hält
  • Windows 2000 Professional
    Der Windows Zeitdienst ist schon Bestandteil und aktiv. Ohne ein Active Directory finden Sie seine regelmäßigen Warnungen im Eventlog. Sie können den Dienst mit der Kommandozeile NET TIME /SETSNTP:name_des_timeservers  darüber informieren, woher er sich die uhrzeit holen soll.
  • unix / Linux
    Einfach mal MAN NTP eingeben oder einen der vielen Links und Hinweise lesen. Es sollte kein Problem darstellen, den NTP-Prozess zu konfigurieren und zu starten.
  • Macintosh
    Die meisten MAC Systeme können von hause aus NTP. Es muss nur konfiguriert werden. Hier einige Hinweise:
    Mac OS 8.5.x: "Network time server did not respond" http://docs.info.apple.com/article.html?artnum=30936
    Mac OS X: How to Set the Date and Time Automatically http://docs.info.apple.com/article.html?artnum=61273

Hier möchte ich die Abhandlung der Thematik Zeitsynchronisation beenden. Ich hoffe die ein oder anderen Hinweise und Tipps gegeben zu haben. Nutzen Sie auch die Linksliste für weitergehende Informationen . Eine umfassendere Aufarbeitung des Themas unter Berücksichtigung anderer Betriebssysteme finden Sie hier: Netzwerkzeitsynchronisation

NTP Einstellungen unter Windows 2000 und 2003

Zuerst sollten Sie sich eine gültige, erreichbare, zuverlässige Zeitquelle suchen. Das kann durchaus eine Internetadresse wie "time.windows.com", "pool.ntp.org" oder "de.pool.ntp.org" oder ein anderer interner NTP-Server sein. Wichtig ist nur, dass alle Systeme ihres Netzwerks möglichst die gleiche Zeit haben. Extern im Internet erreichbare Zeitserver erfordern natürlich eine Namensauflösung, ein Loch in der Firewall für UDP123 ausgehend und passende Leitwege und NAT.

Normalerweise holen Sich sowohl Windows 2000, Windows XP und Windows 2003 ihre uhrzeit anhand des Active Directory vom "richtigen" Server. Aber der PDC-Emulator der obersten Domäne muss trotzdem die uhrzeit irgendwo her bekommen. Selbst wenn eine Atomuhr die Systemzeit setzt, muss Windows wissen, dass "seine" Zeit richtig ist, damit der Server diese an Clients weiter gibt. Meist wird aber das "Internet" per NTP befragt. Auch das ist zu konfigurieren. Dazu dient der W32TIME-Service

Bei Windows 2000 können Sie einfach mit NET TIME die IP-Adresse des Servers angeben. Führen Sie in einer DOS-Box dazu folgende Befehle aus:

net stop w32time
net time /setsntp:time.windows.com
net start w32time
w32tm.exe /once

Bei Windows 2003 hat sich der Aufruf der Konfiguration geändert.

w32tm /config /syncfromflags:manual /manualpeerlist:time.windows.com /update /reliable:YES

Diese Zeile setzt den Zeitserver auf "Manuelles update" von "time.firma.tld" und gibt sich dann als "zuverlässiger" Zeitserver aus und holt sich sofort die Zeit.

Seit Windows 2003 ist es auch möglich, ein Debuglog für den W32TIME-Dienst zu aktivieren. Speichern Sie einfach folgende Zeilen als REG-Datei und importieren Sie diese

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config]
"FileLogName"="c:\\temp\\ntp.log"
"FileLogSize"=dword:01000000
"FileLogEntries"="0-116"

Ab Windows 2008 kann dies per Kommandozeile konfiguriert werden:

w32tm /debug /enable /file:C:\Temp\w32tmdebug.log /size:10485760 /entries:0-300

w32tm /debug /disable

Vergessen Sie am Ende nicht, das Diagnoseprotokoll wieder abzuschalten. Bei Windows 2000 können Sie die "w32tm /once" eine interaktive Verbindung zum NTP-Server in der Konsole beobachten. Auch im Systemeventlog hinterlässt W32TIME entsprechende Meldungen, wenn ein Fehler auftritt.

Status

Mit der Kommandozeile W32TM kann man auch einen Status erhalten:

w32tm /query /status

Das ganze sieht dann auf einem Member-Server einer Domain wie folgt aus:

Über das RESYNC-Kommando können Sie einen Abgleich forcieren.

w32tm /resync

Autoritativer Zeitserver

Wenn es nun keinem ihrer Domänencontroller möglich ist, eine Zeit von einer vertrauenswürdigen NTP-Quelle zu bekommen, dann sollten Sie natürlich einen DC zur maßgeblich Zeitquelle deklarieren und dort sicherstellen, dass dessen Uhrzeit möglichst genau geht. Dies könnte dann eine Hardwareuhr (DCF77 o.ä.) sein, die einfach die lokale Uhr immer wieder korrigiert.

Um einen Windows Server nun zu einer "Referenz" zu deklarieren, müssen Sie per Regedit zwei Schlüssel setzen. Speichern Sie einfach diesen Text z.B. als "W32HWTime.reg und importieren diesen auf dem PDC-Emulator der Stammdomäne

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"LocalNTP"=dword:00000001
"ReliableTimeSource"=dword:00000001

Danach müssen Sie den Windows Zeitdienst einmal durchstarten (net stop w32time && net start w32time). Sorgen Sie dann noch dafür, dass alle Clients und anderen Server die Zeit neu holen (z.B.: durch Eingabe von "w32tm -s" und kontrollieren Sie das Eventlog.

Andere Weg der Zeitsynchronisation

Für den Fall, dass Sie keine Zugriffe per NTP nach außen zulassen oder der Provider dies, warum auch immer, sperrt, können Sie immer noch eine eigene ATOM-uhr einsetzen. Sie können aber auch HTTP-Anfragen nutzen, da die meisten Webserver mit ihrer Antwort auch eine "Zeit" mit liefern. Hier ein Mitschnitt einer Abfrage der Startseite von Google und die Antwort.

Im HTTP-Response steht hier auch eine uhrzeit samt Zeitzone drin. Natürlich muss man noch etwas Grips rein stecken und z.B. die Laufzeit eines großen HTTP-Pakets gegenüber einem kleinen UDP-Paket relativieren. Auch könnten Provider Antworten "Cachen", so dass man auch dies prüfen muss. Und natürlich sollte der angefragte Webserver auch einen halbwegs aktuelle Zeit bereit stellen. Der Administrator erwartet schließlich nicht, dass sein Webserver als "Zeitquelle" genutzt wird. Windows selbst unterstützt diese Art der "Zeitquelle" nicht.

Weiterhin gibt es spezielle Webseiten, die auf einen HTTP-Get einen Zeitstempel zurückliefern wie z.B. ebay und http://www.uhrzeit.org/sys/synchro.php, wobei ich keine Liste von Webseiten und deren Qualität der Zeit habe. Entsprechende Zusatzsoftware kann solche Server abfragen wie z.B.

Zeitabgleich und Virtualisierung

Immer wieder ein Problem ist die Kombination von Windows mit Virtualisierungsplattformen. Warum auch immer installieren VMWare als auch HyperV entsprechende Tools, die per Default auf den Gästen die uhrzeit an den Host anpassen. Das mag im allgemeinen ja nicht falsch sein, aber für einen virtuellen DC kann das nur schädlich sein. Wenn der Host dann auch noch von diesem DC sich die uhrzeit holt und durch Laufzeiten um ein paar Millisekunden sich verzieht, im nächsten Moment aber die Zeit des Gast anhand seiner nun etwas falschen Zeit anpasst, dann können Sie sich schon selbst ausmalen, wohin das führt.

Selbst eine manuelle Änderung der Zeit auf dem Gast-DC per NET TIME, NTP oder W32Time wird nach kürzester Zeit z.B. bei Hyper-V wieder zurück gestellt. Einzig das Eventlog ist ein Hinweis darauf.

Log Name:      System
Source:        Microsoft-Windows-Kernel-General
Date:          8/13/2010 6:32:35 PM
Event ID:      1
Task Category: None
Level:         Information
Keywords:      Time user:          NETATWORK\Administrator
Computer:      NAWDC003.netatwork.de
Description:
The system time has changed to 8/13/2010 4:32:35 PM from 8/13/2010 4:35:56 PM.

Schön. dass das bei Hyper- V schon der Kernel macht. Damit brauchen Sie nicht weiter nach "Diensten" oder "Registry-Keys" zu suchen, um das Verhalten abzuschalten. Einziger Weg diese Verhalten abzuschalten ist die Checkbox in dein Eigenschaften der VM.

Prüfen Sie dies bitte und passen Sie die Einstellungen korrekt an.

Funkuhr

Auch wenn der Zugriff per NTP über Internet auf die Zeitserver der PTB eigentlich problemlos ist, so strahlt die PTB die uhrzeit auch noch über Funkwellen (Amplidutenmodulation) mit 1 Bit /Sekunde aus. Und mit einer passenden Funkuhr lassen sich diese Daten auch einlesen. Sehr viele Seiten im Internet beschäftigen sich mit der Thematik

Und Es gibt natürlich fertige Funkuhrmodule, die an einem PC angeschlossen werden. Früher war das einfach ein COM-Port, auf dem die Signale "getaktet" wurden. Neuere Funkuhren liefen die uhrzeit und aktuelle Modelle gibt es auch mit USB-Anschluss. für die Bastler habe ich aber auch noch ein paar Links zu, Selbstbau einer Funkuhr

Diverse Funkuhrmodule haben so gar direkt einen RS232 Ausgang wie z.B. das DFC77 Modul von Conrad

  • C-Control DCF-Empfängerplatine (641138) ca 10€
    http://www.conrad.de/ce/de/product/641138/DCF-EMPFAENGERPLATINE  (Link auf Bitten des Ziels nicht anklickbar)
  • Conrad DFC 77 Modul (641960)
    Nicht mehr lieferbar, RS232 Ausgang
  • Synchronising your network to a Conrad DCF77 receiver
    http://www.sput.nl/time/dcf77.html

Weitere Links