Logo Juerg Wenger

Zeitsynchronisation

Jeder Computer besitzt eine Uhr. Und diese Uhr geht nach einer gewissen Zeit grundlegend falsch. Dieser Misstand muss mit regelmässigen Zeitsynchronisationen ausgeglichen werden. Das ist anstregend und mühsam. Erschwerend kommt hinzu, wenn diese Computer noch regelmässige Arbeiten wie Backup oder Steuerungsaufgaben übernehmen IST man auf eine genau Zeit ANGEWIESEN. Was liegt also näher, als alle Computer im Internet mit einem Zeitserver zu synchronisieren ?

Wo bleibt da aber der Freak-Faktor ? Selber machen lautet die Devise ! Also packen wir's an. Ist ja eigentlich (mit Linux) nicht so eine Sache... denkste ! Die benötigten Pakete sind ja noch schnell installiert. Konfiguriert werden müssen lediglich die Referenzserver und fertig ist der eigene Zeitserver im Netzwerk. Wie gesagt, das war die Idee...

In der Praxis ergeben sich dann aber schnell mal ein paar Probleme. Begonnen mit der Freigabe der notwendigen IP-Adressen / Ports in der Firewall, dann die Bemühungen den Linuxserver mit den Referenzservern zu synchronisieren geschweige denn, die Computer im Netzwerk zu veranlassen die Zeit vom "neuen" Zeitserver zu übernehmen. Windows weigert sich mit einem Zeitserver zusammenzuarbeiten, welcher unter seiner Würde (Stratum) liegt. Also muss der Zeitserver "gefakt" werden und dann geht's... Aber der Reihe nach.

Ich verwende ausschliesslich Debian (zurzeit Version Lenny). Die benötigten Packete sind:

  • ntp
  • ntpdate

    Die Konfiguration ist relativ einfach, laut Dokumentation müssen lediglich die Referenzserver eingetragen werden und der Server mit /etc/init.d/ntp start gestartet werden. Es empfielt sich jedoch VOR dem Starten einiges zu beachten.

    Die Konfiguration des Zeitservers ist in der Datei /etc/ntp.conf abgelegt. In meinem Beispiel verwende ich die beiden Server swisstime.ethz.ch (Stratum 2) sowie ntp.metas.ch (Stratum 3). Im Falle eines Synchronisationsproblems übernimmt die lokale Systemuhr mit Stratum 12. Die fertige Konfiguration (getestet und funktioniert) sieht bei mir wie folgt aus:

    Nach dieser Konfiguration sollte einmalig die Zeit manuell synchronisiert werden. Dies geschieht mit mittels des Befehls ntpdate -u swisstime.ethz.ch. Danach kann der Server mittels /etc/init.d/ntp start gestartet werden. Nach wenigen Sekunden sollte beim Befehl ntpq -p folgendes erscheinen:

    Wichtig ist hier nun, dass ein Eintrag (möglichst nicht bei "LOCAL") ein Sternchen (*) hat. Dies bedeutet, dass der Zeitserver mit diesem Server synchronisert ist. Klingt banal ist aber W-I-C-H-T-I-G und ist Voraussetzung für eine korrekte Funktion. Bei mir half die Anweisung fudge in der Konfiguration um einen "besseren" Stratum vorzutäuschen. Das Problem liegt bei Windows. Ein Windowsrechner kann sich angeblich NUR mit einem Stratum 2 oder tiefer (besser) synchronisieren. Ohne die fudge - Anweisung synchronisierte mir kein Windows-Rechner mit meinem Zeitserver. Dieses Problem benötigte auch entsprechend Zeit um es zu lösen. Wie immer bei Netzwerkproblemen verwende ich den Sniffer Etherreal/Wireshark um mir die Kommunikation genauer anzuschauen. Folgendes konnte ich erkennen (oben ohne und unten mit der fudge - Anweisung.

    NTP-Meldung vom Server ohne der Fudge-Anweisung
     
    NTP-Meldung vom Server mit der Fudge-Anweisung

    Es fällt auf, dass unten das Stratum angegeben wird. --> Fazit: fudge-Anweisung ist notwendig ! (Auch wenn mir die genaue Bedeutung dieser Anweisung nach wie vor unklar ist. Vorallem hätte ich erwartet, dass nun Stratum 1 gesendet würde wie in der Konfiguration angegeben). Naja egal, so läuft es seither perfekt

    Fragen oder Anmerkungen zu dieser "Quick and Dirty" Anleitung bitte hier platzieren.

  •