Raspberry Pi mit NTP
Inhaltsverzeichnis
Zusammenfassung
Nach diesem Tutorial synchronisiert sich die Systemzeit des Raspberry Pi automatisch mit einem beliebigen Zeitserver im Internet oder einem lokalen Zeitserver im Heimnetz wie z. B. der FritzBox.
Hintergrund
Da ein Raspberry Pi aus Kostengründen keine eigene Real Time Clock (RTC) besitzt, wie man es von herkömmlichen PCs kennt, synchronisiert Raspbian die Zeit mit Internetservern und speichert die jeweils aktuelle Zeit in einer Datei. Ist der Rasberry Pi mehrere Stunden vom Strom getrennt (z. B. bei einem Umzug, Stromausfall o. Ä.) versucht er eine Zeitsynchronisation mit Internetservern. Ist der Pi jedoch für das Internet gesperrt oder das Internet aus anderen Gründen nicht erreichbar, lädt er die zuletzt bekannte Zeit aus dieser Datei und zählt die Zeit dort weiter. Dadurch kommt es zu einer Differenz zwischen der Systemzeit und der tatsächlichen Zeit. Dies mag bei einigen Anwendungen kein Problem, in anderen Fällen jedoch unerwünscht sein. So führt dies dazu, dass z. B. der PiHole nicht mehr funktioniert und folglich alle Endgeräte nicht mehr auf das Internet zugreifen können.
Für solche Fälle gibt es die Möglichkeit die Systemzeit mit einem lokalen Zeitserver im Heimnetzwerk zu synchronisieren. Die FritzBox kann hierfür genutzt werden. Diese Funktion ist standardmäßig eingeschaltet. Falls nicht, findest du die entsprechende Einstellung in der Oberfläche unter:
Heimnetz > Netzwerk > Netzwerkeinstellungen > Zeitsynchronisation
Einrichtung als NTP-Client
Der Raspberry Pi muss dafür als NTP-Client eingerichtet werden. Dafür installieren wir zunächst das NTP-Paket.
sudo apt-get install ntp
Anschließend schalten wir die aktuelle Zeitsynchronisation zunächst folgendermaßen aus. Es sollte neben der Verwendung von ntp kein weiterer Zeitabgleich stattfinden.
sudo systemctl stop systemd-timesyncd
sudo systemctl disable systemd-timesyncd
sudo /etc/init.d/ntp stop
sudo /etc/init.d/ntp start
Nun öffnen wir die Konfigurationsdatei.
sudo nano /etc/ntp.conf
Dort kommentierst du die Standardserver mit # aus und fügst die IP deines eigenen Servers ein. Bei der FritzBox ist dies häufig: 192.168.178.1. An dieser Stelle können natürlich auch beliebige Zeitserver im Internet eingetragen werden, sollte dies in deinem Fall notwendig sein.
#/etc/ntp.conf, configuration for ntpd
driftfile /var/lib/ntp/ntp.drift
statsdir /var/log/ntpstats/
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example
# IP adress of my FritzBox to get local time. Some Users said that they have to add iburst behind the IP address like in the following line. Give it a try if it does not work with my solution.
# server 192.168.178.1 iburst
server 192.168.178.1
# pool.ntp.org maps to more than 300 low-stratum NTP servers.
# Your server will pick a different set every time it starts up.
# *** Please consider joining the pool! ***
# *** ***
# 0.cz.pool.ntp.org iburst
# 1.cz.pool.ntp.org iburst
# 2.cz.pool.ntp.org iburst
# 3.cz.pool.ntp.org iburst
...
Speichere und schließe die Datei mit [STRG+X], bestätige mit [Y] und dann mit [Enter]. Anschließend muss der ntp Dienst neugestartet werden.
sudo /etc/init.d/ntp restart
Kontrolle der Synchronisation
Mit folgendem Befehl kann die Zeitsynchronisation dann ausgegeben und kontrolliert werden. Sollte dabei der Fehler No Association IDs zurückgegeben werden, hilft häufig ein Neustart des gesamten Systems.
sudo ntpq -pn
Du erhältst dann etwa folgende Ausgabe. Die Werte werden für eine bessere Verständlichkeit unten kurz erläutert.
remote refid st t when poll reach delay offset jitter
==============================================================================
192.168.178.1 195.113.144.238 2 u 26 64 1 58.571 0.797 68.634
remote
IP-Adresse des NTP-Servers. Dies sollte der IP-Adresse entsprechen, die du oben in der Konfigurationsdatei eingetragen hast, in unserem Fall 192.168.178.1.
refid
IP-Adresse des Servers, der zur Zeitsynchronisation vom ntp-Server genutzt wird.
st (stratum)
Dieser Wert steht für die Genauigkeit der Zeit und wird in Werten von 0 bis 15 angegeben. Wenn hier eine 16 auftaucht, bedeutet dies, dass der ntp-Server nicht vertrauenswürdig ist. Die Atomuhr hätte hier einen Wert von 0 (beste Genauigkeit), ein Computer hat in der Regel den Wert 1, in unserem Fall liegt der Wert bei 2.
ST 0 – Ist die Zeitreferenz selbst
ST 1 – Ist der NTP-Server, der direkt die Referenz abfragt
ST 2 – Ist der NTP-Server, der einen ST1-Server abfragt
ST 3 – Ist der NTP-Server, der einen ST2-Server abfragt
when
Zeigt die vergangene Zeit in Sekunden seit der letzten Synchronisation an.
poll
Zeitlicher Abstand in Sekunden zwischen zwei Anfragen an den ntp-Server.
reach
Anzahl erfolgreicher Anfragen.
delay
Verzögerung zwischen Anfrage und Antwort des ntp-Servers.
offset
Zeitdifferenz zwischen der Systemzeit (Raspberry Pi) und dem Zeitserver (FritzBox) in Millisekunden.
jitter
Ist der zeitliche Unterschied in Millisekunden zwischen zwei Anfragen.
Stimmt die IP-Adresse und werden unter reach Werte > 0 angezeigt, hat die Einrichtung funktioniert. Der Raspberry Pi erhält fortan die Systemzeit aus dem Heimnetzwerk.
Einrichtung als NTP-Server
Nachdem der Raspberry Pi die Zeit mit einem Router oder einem Server im Internet synchronisiert hat, kannst du ihn als NTP-Server im Netzwerk zur Verfügung stellen. So können andere Geräte im Netzwerk ihre Systemzeit mit dem Raspberry Pi synchronisieren. Solltest du bereits deinen Router als Zeitserver bereitstellen, ist dies mit dem Raspberry Pi natürlich nicht notwendig. Dazu öffnen wir wieder das Konfigurationsfile des NTP daemon und fügen folgende Zeilen weiter unten in der Datei ein.
Die Netzwerk IP-Adresse 192.168.178.X muss dabei in beiden Zeilen an deinen Adressraum angepasst werden. Die Zeile mit 224.0.1.1 sollte hingegen nicht geändert werden.
...
# Clients from this subnet have unlimited access,
# but only if cryptographically authenticated
restrict 192.168.178.0 mask 255.255.255.0
# If you want to provide time to your local subnet, change the next line.
broadcast 192.168.178.255
broadcast 224.0.1.1
# If you want to listen to time broadcasts on your local subnet,
# de-comment the next lines. Please do this only if you trust everybody
# on the network!
#disable auth
#broadcastclient
Speichere und schließe die Datei mit [STRG+X], bestätige mit [Y] und dann mit [Enter]. Anschließend starten wir den ntp Dienst neu.
sudo /etc/init.d/ntp restart
Danach kannst du Endgeräte die Systemzeit mit dem Raspberry Pi abgleichen lassen. Trage dazu einfach die IP-Adresse des Pi als Server für die Systemzeitsynchronisierung des Betriebssystems ein.
Hi,
danke für den hilfreichen Artikel.
Leider kann ich nur berichten, dass diese Konfiguration nicht funktioniert. Hänge schon
seit mehreren Wochen an meinem NTP-Netzwerk und schaffe es nicht, dass der Server die Zeit an weitere Teilnehmer des Netzes weiterleitet.
Habe auch „iburst“ und „server“ benutzt, jedoch ohne Erfolg. Hast du da noch einige Tipps oder kennst das Problem sogar selbst?
Viele Grüße
Hallo
Die Konfiguration mit „server“ und „iburst“ bezieht sich nur auf die Konfiguration als Client, spricht, dass der Pi die Systemzeit von dem lokalen Router bezieht. Für die Konfiguration als Server für weitere Geräte im Netzwerk musst du die Konfiguration weiter unten in meinem Artikel für die Servereinrichtung durchführen.
Beste Grüße
Danke für die kurze und knackige Anleitung 🙂
Aber die Beschreibung zu „Stratum (ST)“ ist falsch. Der Wert gibt nicht die Qualität des Zeitservers an, sondern der „wievielte Platz“ hinter der Zeitreferenz er ist:
ST 0 – Ist die Zeitreferenz selbst
ST 1 – Ist der NTP-Server, der direkt die Referenz abfragt
ST 2 – Ist der NTP-Server, der einen ST1-Server abfragt
ST 3 – Ist der NTP-Server, der einen ST2-Server abfragt
…
Hallo Thomas
Meine Beschreibung ist nicht falsch. Durch die Angabe des Platzes wird auch die Qualität der Zeit angegeben, da mit jeder Serverstufe die Zeit auch etwas ungenauer wird. Allerdings ist das vielleicht missverständlich bei mir ausgedrückt. Daher ergänze ich die Erklärung mit deiner Auflistung :).
Beste Grüße
Danke für diese Anleitung. Funktioniert bei mir auf einem Raspberry Pi 4 ohne den Eintrag iburst.
Es hat nicht funktioniert.
Erst mit iburst (wie bei den auskommentierten) hinter dem eigenen Server hat es funktioniert.
Hallo Marcell
Das ist interessant und habe ich bisher noch nirgendwo als Einstellung gesehen. Trotzdem ist das vielleicht für einige Leser relevant. Welches Betriebssystem nutzt du denn?
Beste Grüße
Philipp
Funktioniert auch bei nur mit iburst hinter meiner Server-IP
Des Weiteren ist der Offset mit 65000 noch sehr hoch und die Zeiten differieren deswegen sehr stark.
Mein NTP-Server arbeitet auf Windows 10 Systemen.
Hallo Themaster,
vielen Dank für diese hilfreiche Anleitung.
Ich habe seit 2 Tagen versucht, dieses Problem mit hilfe diverser Foren/Artikel zu beheben.
Leider ohne Erfolg.
Heute hat es dank Ihrem detailierten, und ausführlichem Artikel funktioniert.
Danke 🙂
Hallo,
vielen Dank für diese hilfreiche Anleitung.
Damit die Konfiguration jedoch auf meinem Raspberry Pi funktionierte, musste ich die IP noch mit dem Statement „server“ ergänzen.
Um dein Beispiel zu verwenden:
# IP address of my FritzBox to get local time
server 192.168.178.1
Viele Grüße
Danke für den Hinweis, ich habe den Fehler korrigiert.