Network Time Protocol auf Linux

Synchronisation von Datum und Zeit

Es gibt erstaunlich viele Möglichkeiten, um die Systemuhr eines PC mit einem Zeit-Standard zu synchronisieren. Wählen sie daraus nach technischer Möglichkeit, Kosten und ihrem Bedarf an Genauigkeit.
Im Internet-Zeitalter sollte es keine ungenauen PC-Uhren mehr geben ...
NTP Das Network Time Protocol zur Synchronisation der Zeit
NTP-Linux NTP auf Linux
Konfiguration Linux-Zeitserver und Linux Client
DHCP Bekanntgabe des Zeitservers mit DHCP
Windows-Client Windows-PC als Client des Linux-Servers
Kontrolle Laufende Wartung und Kontrolle des NTP Servers
Verwandte Themen Datum & Zeit, NTP, NTP auf Windows

NTP auf Linux

Alle gängigen → Linux-Distributionen enthalten einen NTP-Server + Client.

Der NTP-Demon (Server-Dienst) arbeitet als Server und Client.
Das kann zu Missverständnissen führen: Als Client holt der NTP-Demon die Zeit von einem hochgenauen externen Zeit-Server, als Server bedient er alle anderen PC im lokalen Netzwerk mit der genauen (und vor allem mit der gleichen) Zeit.
In einem eigenen lokalen Netzwerk (LAN) sollte stets genau 1 Zeitserver laufen. Alle Arbeits-(Client)-PC verwenden den eigenen Zeitserver, der sich selbst mit einem externen Zeitserver synchronisiert. Damit sorgt man für klare Zeit-Verhältnisse im LAN.

Ein Linux-Zeitserver kann und soll von allen anderen PC im LAN genutzt werden, unabhängig von deren Betriebssystem. Insbesondere kann der Server auch von → Windows-Client-PC verwendet werden.
ntpd
Der Server-Dienst läuft unter den Namen ntpd oder xnpt. Dieses Programm wird beim Systemstart automatisch gestartet und läuft (wie alle anderen Dienste = demons) ohne Oberfläche.

Nach Installation des Betriebssystems ist der NTP-Server normalerweise installiert, jedoch nicht immer gestartet.
Tipp: Stellen sie die PC-Uhr vor dem Start des Zeitservers erst einmal manuell ein. Der Server findet viel schneller zur stabilen Synchronisation, wenn die zur korrigierenden Abweichungen klein (<5 Minuten) sind.

Auf SuSE-Linux konfigurieren sie den NTPD mit YAST | Netzwerkdienste | NTP-Client. Damit wird auch der automatische Start eingerichtet (Kontrolle mit YAST | System | Runlevel Editor | ntp )

Der professionelle Linux ntpd Server wurde vom deutschen Unternehmen Meinberg kostenfrei auf → Windows portiert. Das ist jedoch nur dann sinnvoll, wenn in ihrem lokalen Netzwerk kein Linux-Server läuft.
Die übergeordnete Konfiguration erfolgt (auf SuSE-Linux) mit der Text-Datei
/etc/sysconfig/ntp
Nach den Angaben der Dateien dieses Verzeichnisses werden die eigentlichen Konfigurations-Dateien automatisch geschrieben.
Das ist für den NTP-Dienst die Text-Datei
/etc/ntp.conf
Beide Dateien sind gut kommentiert. Weitere Hilfe finden sie in der integrierten Hilfe der jeweiligen Distribution und im Internet.

Um eine Änderung von ntp.conf wirksam zu machen, muss man den Dienst neu starten, z.B. an der Shell-Konsole mit
# /etc/init.d/ntp restart
Das aktuelle Verhalten des ntpd erfahren sie mit dem ↓ Konsolen-Programm ntpq

Konfiguration des NTPD Zeit-Servers

ntpd
Der Server-Dienst läuft unter den Namen ntpd oder xnpt. Dieses Programm wird beim Systemstart automatisch gestartet und läuft (wie alle anderen Dienste = demons) ohne Oberfläche.

Auf SuSE-Linux konfigurieren sie den NTPD mit YAST | Netzwerkdienste | NTP-Client. Damit wird auch der automatische Start eingerichtet (Kontrolle mit YAST | System | Runlevel Editor | ntp)
Die übergeordnete Konfiguration erfolgt über die Text-Datei
/etc/sysconfig/ntp
Nach den Angaben der Dateien dieses Verzeichnisses werden meist die eigentlichen Konfigurations-Dateien automatisch geschrieben.
Das ist für den NTP-Dienst die Text-Datei
/etc/ntp.conf
Beide Dateien sind gut kommentiert, weitere Hilfe finden sie in der integrierten Hilfe der jeweiligen Distribution und im Internet.
Um eine Änderung von ntp.conf wirksam zu machen, muss man den Dienst neu starten.
Das aktuelle Verhalten des ntpd erfahren sie mit dem ↓ Konsolen-Programm ntpq

NTPD-Konfiguration für einen Linux Server-PC

Zuerst wird die eigene Uhr LCL als Server eingetragen. Sie wird nur dann verwendet, wenn keine Verbindung mit einem externen Server möglich ist.

Mit fudge wird das Vertrauen zum angegebenen Server (LCL) definiert. Die Zahl nach stratum gibt die Zuverlässigkeit an (0=optimal bis 12=unzuverlässig).

Danach folgen die gewünschten Zeitserver, am besten der passende nationale Pool. Deren Zuverlässigkeit liegt meist bei stratum=1 oder stratum=2. Damit ist gewährleistet, dass bei funktionierender Verbindung der externe Zeitserver verwendet wird, ansonsten die eigene Uhr.

Einige restrict-Anweisungen regeln die Zugriffs-Rechte: Die Verbindungen mit dem eigenen PC, mit dem lokalen Netzwerk (LAN) und mit dem Server-Pool werden erlaubt, alle anderen verboten.

In der Konfiguration werden auch die Pfade zur Drift-Datei und zur Log-Datei festgelegt. Kontrollieren sie diese Dateien später, wenn der Server einige Synchronisations-Aufträge durchgeführt hat.
Beispiel für eine Server-Konfigurations-Datei /etc/ntp.conf (ohne Gewähr):

# Eigene Uhr LCL - wenn keine Verbindung moeglich
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
# Zeit vom externen NTP-Server lesen
# server at.pool.ntp.org
# server ch.pool.ntp.org
server de.pool.ntp.org
# Verbindung mit dem Server-(Pool) erlauben
restrict de.pool.ntp.org
# Verbindung vom eigenen PC erlauben
restrict 127.0.0.1
# Verbindung vom eigenen LAN erlauben
restrict 192.168.0.0 mask 255.255.255.0
# Alle anderen Verbindungen verbieten
restrict default notrust nomodify nopeer
# Dateien
driftfile /var/lib/ntp/ntp.drift
logfile /var/log/ntp

Eine Änderung der Konfiguration tritt erst bei Neu-Start des NTP-Servers in Kraft:
# /etc/initd./ntp restart

NTPD-Konfiguration für einen Linux Client-PC

Der NTP-Server des eigenen lokalen Netzwerks (LAN) wird unter Server eingetragen. Ersetzen sie 192.168.0.1 durch die Adresse des Zeit-Servers in ihrem LAN. Danach wird der Client-Zugriff (Zeit lesen) auf diesen Server und auf die eigene Adresse 127.0.0.1 beschränkt.
Zuletzt wird ein Pfad für die Drift-Datei angegeben.

Der ntpd korrigiert die → Hardware-Uhr ca. alle 13 Minuten. Die maximale Korrektur beträgt +/- 15 Minuten. In sehr seltenen Fällen und nur bei extremer Prozessor-Belastung kann eine PC-Uhr um größere Beträge abweichen. In diesem Fall öffnen sie die Datei
/etc/sysconfig/ntp
und folgen den gut kommentierten Anweisungen zu NTPD_ADJUST_CMOS_CLOCK
Beispiel für eine Client-Konfigurations-Datei /etc/ntp.conf

# Zeit vom eigenen Server lesen:
server 192.168.0.1
restrict 192.168.0.2
restrict 127.0.0.1
restrict default notrust nomodify nopeer
driftfile /var/lib/ntp/ntp.drift

Ersetzen sie die Adresse 192.168.0.2 durch jene ihres eigenen LAN Zeitservers.

Bekanntgabe des NTP-Servers mit DHCP

DHCP-Server

Seit auch in kleinen Heim-Netzwerken fertig konfigurierte LAN/WLAN-Router verbreitet sind, gibt es kaum noch Netzwerke ohne automatische Konfiguration durch DHCP. Die wichtigste Aufgabe eines DHCP-Servers ist zwar die Koordination der IP-Adressen, darüber hinaus kann (und sollte) jeder DHCP-Server jedoch auch andere wichtige Daten des lokalen Netzwerks bekanntgeben.

Eine der optionalen Aufgaben des DHCP-Servers ist die Bekanntgabe des zu verwendenden Zeit-(NTP)-Servers.
Am Linux DHCP-Server ist die Konfuguration in der Text-Datei /etc/dhcpd.conf festgelegt.
In dieser Datei sollte die IP-Adresse des eigenen NTP-Servers eingetragen sein, z.B.
option ntp-servers 192.168.0.2;
Die Bekanntgabe des eigenen NTP-Servers mit DHCP ist sinnvoll, jedoch für die Client-PC nicht bindend. Man kann unabhängig von dieser Empfehlung andere NTP-Server verwenden. Details zu DHCP und zur Konfiguration eines eigenen DHCP-Servers.

Konfiguration eines Windows-PC als NTPD Zeit-Client

In gemischten Netzwerken arbeitet sinnvoll ein Linux Server, der allen PC des LAN die gemeinsamen Dienste anbietet, unabhängig von deren Betriebssystem (Standard → LAMP-Server).
Der Linux Server übernimmt sinnvoll auch die Aufgabe des Zeitserver. Das funktioniert rasch, sicher und problemlos.
Auf allen neueren Windows Systemen (Win2000, WinXP, Vista) ist ein NTP Client installiert und normalerweise automatisch gestartet.
Die Verwendung eines Zeitservers muss daher nicht installiert sondern nur konfiguriert werden.

Voraussetzungen am Linux Server:

Stellen sie sicher, dass der Linux Zeitserver ntpd läuft ↓ und auf eine Anfrage reagiert.

Stellen sie sicher, dass der Firewall des Servers Zeit-Anfragen erlaubt. Es muss eine Regel existieren, welche die Kommunikation auf → Port 123 fär alle PC des LAN erlaubt, also z.B. für den → IP-Bereich 192.168.0.0 / 255.255.255.0 bzw. 192.168.0.0/24

Details zu den Themen IP-Adresse, IP-Bereich, Port

Voraussetzungen am Windows Client

Wenn der Server bereits (für andere Dienste) erfolgreich verwendet wird, dann sind meist alle Voraussetzungen erfüllt.
Stellen sie sicher, dass die Netzwerk-Verbindung zum Linux-Server funktioniert, z.B. mit
C:\> ping 192.168.0.2
Stellen sie sicher, dass der Firewall des Client Zeit-Anfragen erlaubt. Meist gibt es bereits eine Regel, welche die Kommunikation mit dem eigenen Server auf allen Ports erlaubt.
Für NTP Zeit-Anfragen muss mindestens der → Port 123 zur → Adresse des Servers (z.B. 192.168.0.2) erlaubt sein.
Tipp: Fehlende Konfiguration des Client-Firewall ist die häufigste Ursache für nicht funktionierende Zeit-Synchronisation.

NTPD-Konfiguration für einen Windows Client-PC

Wenn die Voraussetzungen erfüllt sind, dann muss man lediglich Name oder Adresse des eigenen Servers bekanntgeben. Das kann mit unterschiedlichen Methoden erfolgen. Wählen sie eine der 3 angeführten Varianten:


Tray-Uhr
Rechtsklick auf die Uhr in der rechten unteren Bildschirm-Ecke, Befehl Datum / Uhrzeit ändern, Register Internetzeit
Tragen sie Name oder Adresse ihres Servers in die Server-Liste ein, z.B. 192.168.0.2
Tipp: Die Verwendung weit entfernter US-Server ist ungünstig, weil die Genauigkeit wegen der vergleichsweise langen Transportzeiten wesentlich geringer ist als jene der nationalen Pool-Server. Am besten ist in jedem Fall die Synchronisation mit dem eigenen Zeitserver.
Markieren sie das Kästchen Automatisch mit einem Internetzeitserver synchronisieren.
Klicken sie Jetzt aktualisieren und beachten sie den genau darunter angezeigten Text.
Nach einer Wartezeit von 10..30 Sekunden sollte die korrekte Synchronisation bestätigt werden.

Tipp: Die (korrekte) Server-Adresse funktioniert immer, der Server-Name nur bei richtig konfigurierter Namens-Auflösung.
Details auf der Seite → NTP auf Windows.
Konsole
Öffnen sie eine → Konsole cmd.exe ("Eingabeaufforderung").
Tipp: Verstellen sie die Zeit, damit sie den Erfolg der Einstellung beobachten können. Die Abweichung sollte <1 Stunde sein, da die Synchronisation sonst evtl. abgelehnt wird.
C:\> echo %time%
Stoppen sie das Zeitserver-Programm des Windows-PC, konfigurieren sie ihren Linux-Server als Zeit-Quelle und starten das Programm mit der geänderten Konfiguration:
C:\> net stop w32time
C:\> net time /setsntp:192.168.0.2
C:\> net start w32time
C:\> w32tm /config /update
Kontrolle: Die PC-Zeit sollte nun richtig synchronisiert sein:
C:\> echo %time%

Registry-Datenbank
Diese Methode zur Client Konfiguration ist fortgeschrittenen AnwenderInnen vorbehalten.
Details zu NTP auf Windows

Kontrolle des NTPD Zeit-Servers

Dazu sollten sie als Administrator root angemeldet sein.

Prozess:

Der Zeitserver läuft normalerweise unter dem Namen ntpd
Das Beispiel zeigt die Anzeige der PID-Nr (gleichzeitig die Bestätigung, dass der Server läuft) und die Anzeige aller Prozesse.
Ebenso wie die meisten anderen Server-Programme (Dienste, demons) schreibt auch der ntpd seine aktuelle PID in eine Datei.

Anzeige der PID
# ps -C ntpd
# ps -e
Pfad zur PID-Datei (je nach System / Version variabel):
/var/run/ntp/ntpd.pid
/var/lib/ntp/var/run/ntp/ntpd.pid

Start & Stop

Der ntpd liest seine Konfigurations-Datei wie die meisten anderen Server-Programme nur einmalig beim Start. Damit eine Änderung der Konfiguration in Kraft tritt, muss man den Dienst neu starten.
Dazu verwendet man am besten das dafür vorgesehenen Script-Programm (Beispiel rechts).
Linux bietet je nach Version eines dieser Scripts an:
/etc/init.d/ntp
/etc/init.d/xntp

Anzeige der Script-Optionen, des NTP-Status, Neustart:
# /etc/init.d/ntp
# /etc/init.d/ntp status
# /etc/init.d/ntp restart

Drift:

Jede interne PC-Uhr weicht mehr oder weniger von der "genauen" Zeit ab. Diese Abweichung (Drift) wird bei der Synchronisation mit einem externen NTP-Zeitnormal gemessen und in einer Datei (driftfile) aufgezeichnet.
Der Pfad zur Drift-Datei ist in der Konfiguration festgelegt, z.B. mit
/var/lib/ntp/drift/ntp.drift

Aus den aufgezeichneten Drift-Daten wird die durchschnittliche Abweichung berechnet und kompensiert.
So behält die PC-Uhr auch dann eine hohe Genauigkeit, wenn längere Zeit hindurch kein Kontakt zu einem NTP-Server möglich war. Das funktioniert umso besser, je weniger sich Umgebung (Temperatur) und rozessor-Auslastung ändern.
ntpq
Das Konsolen-Programm ntpq bietet eine Reihe nützlicher Optionen. Man kann damit sowohl lokale als auch entfernte NTP-Server ansprechen.
# ntpq
ntpq> help
Mit Befehl help wird die eingebaute Hilfe angezeigt.
Manual, Konfig-Beispiele und Scripts finden sie auf
/usr/share/doc/packages/xntp/
ntpdate
Zur schnellen manuellen Synchronisation dient das Konsolen-Programm ntpdate:
So synchronisieren sie mit einem externen NTP-Server
# ntpdate de.pool.ntp.org
So synchronisieren sie mit einem NTP-Server im eigenen LAN
# ntpdate 192.168.0.1
Typische Ausgabe des NTP-Status:
# ntpq -p
  remote       refid     st t when poll reach    delay  offset  jitter
=======================================================================
 LOCAL(0)      .LOCL.    12 1   30   64   377    0.000   0.000   0.000
*GENERIC(0)    .DCFa.     0 -   24   64   377    0.000   0.033   0.003
+131.130.1.11  .PPS.      1 u   36   64   377    1.234  -0.015   0.035
remote
IP-Adresse externer Quellen, bzw. LOCAL für die interne Uhr oder GENERIC für Quellen wie DCF77. Ein führendes Zeichen '*' bezeichnet die vom ntpd bevorzugte Quelle
refid
Type der Quelle. LOCAL oder LCL für "lokal", PPS für "pulse per second".
st
Stratum-Zahl der Quelle: Hier 0 (beste Quelle, z.B. DCF77, GPS) für bis 12 (interne Uhr, unbekannte Quelle, ...).
t
Type (local, unicast, multicast, broadcast)
when und poll
Die Quelle wird befragt, wenn der Zähler when die Vorgabe poll erreicht. Bei jeder Anfrage wird Qualität (Stratum) und Erreichbarkeit der Quelle bewertet.
reach
zeigt die letzten 8 Anfragen in Form eines 8-Bit-Schieberegisters als Zahl im → Oktal-System (Basis 8).
Anfangs wird reach=000 gesetzt. Bei jeder Anfrage wird 1 Bit von rechts eingeschoben - bei Erfolg 1, ansonsten 0. Bei mehreren erfolgreichen Anfragen ändert sich daher die Anzeige 0, 1, 3, 7, 17 ... 377. Der ntpd muss eine Quelle mehrmals erfolgreich erreichen, bevor deren Daten zur Synchronisation verwendet werden.
delay, offset, jitter
Delay: Laufzeit (Round trip time) für Anfrage und Antwort in ms.
Offset: Differenz zwischen ServerZeit und ClientZeit in ms.
Jitter: Streuung zwischen mehreren Anfragen in ms.

Letzte Änderung dieser Seite: 2012-03-03 13:24:59