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
|