Zeitserver NTPD

Laufen mehrere Rechner zusammen in einem Netzwerk, ist es nach einer Weile etwas irritierend, wenn die Zeitangaben auf diesen Rechnern unterschiedlich sind. Um zum Beispiel Ereignisse in Logdateien auf verschiedenen Rechnern einander zuordnen zu können, ist ein zumindest sekundengenauer Zeitabgleich zwischen den Rechnern wünschenswert.

Da das Nachstellen der Systemzeiten von Hand unerquicklich ist, versucht man, sich diese Arbeit von den Rechnern abnehmen zu lassen. Dieses lässt sich mit den Programmen "netdate" bzw. "ntpdate" oder mit dem NTP-Dämon NTPD bewerkstelligen, die zudem noch die genaue Zeit aus dem Internet beziehen können.


   Programm "netdate"

Das Programm "netdate" holt sich Uhrzeit und Datum von den angegebenen Zeitservern, sucht sich dann den "besten" aus und stellt die Systemzeit nach. Auf welche Weise netdate den "besten" Zeitserver ermittelt, ist in der Manpage zu "netdate" beschrieben.

  • Aufruf (weitere Optionen siehe "man netdate"):

      netdate [protocol] hostname...

    wobei für "hostname..." mehrere Zeitserver angegeben werden können und für "protocol" die Protokolle UDP (default) oder TCP.

  • "netdate" schickt die Anfrage an Port 37 (Dienst "time") des Zeitservers. Einige Zeitserver lassen nur das Protokoll UDP zu, andere beide Protokolle.

  • Den Zeitabgleich kann man nach dem Booten oder auch als Cronjob starten.

  • Ein Linux-Rechner beantwortet "netdate"-Anfragen, wenn in der Datei "/etc/xinetd.d/time" der Service "time" aktiviert ist.

    Damit Änderungen in dieser Datei wirksam werden, muss der "xinetd" mit dem Kommando "rcxinetd restart" neu gestartet werden.

  • Soll der Linux-PC auch "time"-Anfragen aus dem Internet beantworten können, müssen die entsprechenden Ports in der Firewall geöffnet werden.

  • Die Systemzeit wird durch "netdate" unmittelbar auf den neuen Wert eingestellt. Dadurch können jedoch Sprünge in der Systemzeit verursacht werden. Der nachfolgend beschriebene NTPD hingegen führt die Zeit langsam nach, so dass keine Zeitsprünge vorkommen können. Zudem ist der NTPD genauer.


   Installation und Einrichtung des Timeservers NTPD

Der Dämon NTPD ist zugleich Zeitserver und -client. Aus mehreren vorgegeben Zeitservern sucht er sich die "beste" Quelle aus, stellt die Systemzeit mit und stellt die Zeit als Server wieder für andere Rechner zur Verfügung. Die Zeitabstände des Abgleichs mit anderen Zeitservern werden selbsttätig optimiert. Im Gegensatz zu "netdate" wird die Systemzeit nicht abrupt verstellt, sondern langsam nachgeführt, so dass keine Sprünge in der Systemzeit entstehen können.

Mit im Paket "xntp" enthalten ist das Programm "ntpdate", das ähnlich wie "netdate" die Systemzeit durch einen einmaligen Aufruf mitstellt.

  • Mit YaST das Paket xntp (n) installieren.

  • Leider gibt es keine Manpages zu den einzelnen Programmen und Dateien. Im Verzeichnis "/usr/share/doc/packages/xntp" befinden sich einige Hinweise.

    Die aktuellen Programme und Dokumentationen befinden sich auf der NTP-Homepage http://www.ntp.org.

  • Anpassung der Konfigurationsdatei "/etc/ntp.conf":

      # Timeserver (Hostnamen durch Zeitserver ersetzen)
      server abc.timeserver1.de
      server def.timeserver1.de
      server klm.timeserver2.de
      server uvw.timeserver3.de
      server xyz.timeserver3.de
      # ...
    
      # Hardwareuhr des Rechners
      server 127.127.1.0
      fudge 127.127.1.0 stratum 10
    
      # Files
      driftfile /var/lib/ntp/drift/ntp.drift
      logfile /var/log/ntp
    • Im ersten Abschnitt sind die Zeitserver eingetragen, von denen der NTPD die aktuelle Zeit beziehen soll. Dieses können Internetserver, aber auch lokale Server sein.

    • Im zweiten Abschnitt wird die Uhr des Rechners selbst eingetragen, auf die der NTPD dann zugreift, wenn keine externen Hosts erreichbar sind. Mit "fudge" (engl. "zurechtpfuschen", "schwindeln") wird dem NTPD mitgeteilt, dass die lokale Hardwareuhr nur als Notlösung anzusehen ist. Dabei ist der "Stratum"-Wert die Position eines NTPD in der Kette mehrerer Zeitserver. Eine exakte Zeitquelle wie eine Funkuhr hat den Stratum-Wert "0", der erste NTPD, der diese Zeitquelle verwendet, den Stratum-Wert "1". Der zweite NTPD, der den ersten als Zeitquelle verwendet, hat dann den Stratum-Wert "2" usw. Die eigene Rechneruhr wird also mit der Zuweisung des Stratum-Wertes "10" als so ungenau eingestuft, dass der NTPD sie nur verwendet, wenn er keine bessere Zeitquelle findet.

    • Die Datei "ntp.drift" im dritten Abschnitt enthält einen Wert, der die Gangungenauigkeit der Hardwareuhr des Rechners wiedergibt. Der NTPD ermittelt beim ersten Start diesen Wert und schreibt ihn nach etwa 15-30 Minuten in diese Datei. Erst nachdem der NTPD diese Datei erstellt hat, arbeitet er auch als Zeitserver. Bei den folgenden Aufrufen ist diese Datei bereits vorhanden, und der NTPD arbeitet sofort als Zeitserver.

    • Verfügt der Rechner selbst über ein Zeitnormal wie z.B. eine DCF77-Funkuhr oder einen GPS-Empfänger, kann auch dieser in die Konfigurationsdatei eingetragen werden. Näheres dazu steht in der Default-Konfigurationsdatei.

  • Steuerung des Servers:

    Aufruf mit dem Start-/Stop-Skript:

    • rcxntpd start
    • rcxntpd stop
    • rcxntpd status
    • rcxntpd restart

    Der Server kann auch mit dem Kommando "ntpd" gestartet werden. Mit dem Aufruf "ntpd -d" (Debug-Mode) gibt der Server zahlreiche Kontrollausgaben aus. Der Aufruf "xntpd" ist ein symbolischer Link für "ntpd".

  • Mit "insserv xntpd" wird der Server beim Booten mit gestartet.

  • Der NTPD verwendet den Dienst "ntp" (Port 123) mit dem Protokoll UDP. Die zugehörige Firewall-Variable muss also um "ntp" ergänzt werden:

      FW_SERVICES_EXT_UDP = "ntp"

Mit dieser Konfiguration stellt der NTPD Systemzeit und -datum auf die Werte ein, die er von den Zeitservern aus dem Internet bezieht.


   Weitere Programme zum Timeserver NTPD

Im Paket "xntp" sind u.a. die folgenden weiteren Programme enthalten:

  • Das Programm "ntpdate" stellt ähnlich wie "netdate" die Systemzeit direkt nach. Es lässt sich nur aufrufen, wenn der Zeitserver NTPD nicht läuft.

  • "ntpq" und "ntpdc" sind interaktive NTP-Abfrageprogramme. Werden sie ohne Parameter aufgerufen, bekommt man mit "help" die zur Verfügung stehenden Kommandos aufgelistet. "help <cmd>" gibt Hilfen zu den einzelnen Kommandos aus. Die beiden Programme lassen sich mit Parametern auch direkt aufrufen. Beispiele:

    • ntpq/ntpdc -p: Angaben über die vom NTPD verwendeten Zeitserver
  • Weitere Programme sind:

    • ntptime: Kernel-Time-Variablen auslesen
    • ntptrace: Gibt die Kette der Zeitserver aus

   Zeitserver für das lokale Netz

Der so eingerichtete NTPD kann nun als Zeitserver für die Rechner des lokalen Netzes dienen. Damit braucht sich nicht jeder Rechner die Zeit aus dem Internet zu holen, sondern kann den lokalen Zeitserver verwenden.

  • Um den lokalen Zeitserver von den anderen Rechnern im LAN mit Namen ansprechen zu können, kann man einen Alias-Namen (z.B. "ntp1") in die Zone-Datei des Nameserves eintragen. Der lokale Zeitserver ist dann z.B. mit mit "ntp1.local.netw" ansprechbar.

  • Auf jedem weiteren Linux-Rechner im LAN wird das Paket "xntp (n)" installiert wie oben beschrieben. In die Konfigurationsdatei "/etc/ntp.conf" werden als Server nur der lokale Zeitserver und die Hardwareuhr eingetragen:

      server ntp1.local.netw
      server 127.127.1.0
      fudge 127.127.1.0 stratum 10
      driftfile /var/lib/ntp/drift/ntp.drift
      logfile /var/log/ntp
  • NTP-Clients für die verschiedensten Betriebssysteme sind auf der NTP-Homepage aufgeführt, so dass sich zum Beispiel auch die Windows-PCs im LAN mit dem lokalen Zeitserver automatisch synchronisieren können.

  • Windows-PCs können ihre Systemzeit auch mit dem Kommando "net time" mit dem Samba-Server auf dem Linux-PC abgleichen.


   Hardwareuhr und Systemzeit

Linux verwendet die Hardwareuhr des Rechners nur beim Booten, um nach den Angaben der Hardwareuhr die Systemzeit zu setzen. Danach führt Linux die Systemzeit unabhängig von der Hardwareuhr weiter.

Mit dem Kommando "hwclock -r" kann man die Angaben der Hardwareuhr auslesen. Mit der Zeile "hwclock -r ; date" kann man also die Hardwareuhr nahezu unmittelbar mit der Systemzeit vergleichen.

Beim Start des Linux-Rechners können die Hardware- und Systemzeit um einen größeren Wert voneinander abweichen. Ist dieser Wert größer als 1000s, geht der NTPD davon aus, dass ein systematischer Fehler vorliegt, korrigiert die Systemzeit nicht und beendet sich mit einer Warnung. Liegt die Abweichung darunter, führt der NTPD die Systemzeit langsam nach, was einige Zeit dauern kann.

In der Dokumentation wird deshalb empfohlen, vor dem Start des NTPD zuerst das Kommando "ntpdate" aufzurufen, um die Systemzeit sofort zu setzen, wenn auch möglicherweise etwas ungenau, und erst danach den NTPD zu starten, der die kleine Ungenauigkeit dann stetig korrigiert.

Bei laufendem Betrieb des NTPD kann "ntpdate" nicht aufgerufen werden, "netdate" jedoch wohl, so dass man auch den NTPD schon beim Booten starten und dann mit "netdate", falls nötig, die Systemzeit unmittelbar nachstellen kann, wenn der Rechner Online geht.

"ntpdate" verändert die Hardwareuhr nicht, der NTPD hingegen wohl, wenn er "meint", dass die genaue Zeit ermittelt ist. Durch diese ständige Nachführung der Hardwareuhr steht beim nächsten Booten wieder die bestmögliche Zeit zur Verfügung.

Die beschriebenen Vorgänge lassen sich gut verfolgen, wenn man den NTPD beendet, die Systemzeit mit "date" absichtlich etwas falsch setzt und dann die falsche Systemzeit mit "hwclock -w" (bzw. "hwclock -wu", falls die Hardwareuhr die UTC verwendet) in die Hardwareuhr überträgt. Die Zeitkorrekturen nach den Aufrufen "ntpdate" bzw. "netdate" oder dem Start des NTPD kann man dann mit "hwclock -r ; date" schön verfolgen.


   Zeitserver im Internet

Im Internet gibt es viele öffentliche Zeitserver. Auch größere Einwahlprovider sollten die Zeit über Zeitserver zur Verfügung stellen.

Eine Liste mit öffentlichen Zeitservern befindet sich auf der NTP-Homepage http://www.ntp.org. Dort sind auch die Zeitserver der Physikalisch-Technischen Bundesanstalt (PTB) aufgeführt, die in Deutschland mit der "Darstellung und Verbreitung der gesetzlichen Zeit" beauftragt ist.

Um einzelne Zeitserver nicht zu überlasten, gibt es einen Pool von Zeitservern. Anstelle von bestimmten Zeitservern werden aus einem weltweiten Pool zufällige Zeitserver ausgewählt. Dazu trägt man in die Datei "/etc/ntp.conf" ein:

  server 0.pool.ntp.org
  server 1.pool.ntp.org
  server 2.pool.ntp.org

Möchte man die zufällig ausgewählten Zeitserver auf Europa beschränken, um die Zeit durch kürzere Entfernungen etwas genauer zu synchronisieren, kann man in die Datei "/etc/ntp.conf" eintragen:

  server 0.europe.pool.ntp.org
  server 1.europe.pool.ntp.org
  server 2.europe.pool.ntp.org
  server 3.europe.pool.ntp.org

Die Genauigkeit der Synchronisation liegt im Bereich von Millisekunden.


   Links

http://www.ntp.org   NTP-Homepage

Nach oben

© 1996-2018 Alfred Fokken