OpenWrt: NTP verschlüsseln via NTS und chrony
Das NTP (Network Time Protocol) dient der Synchronisation der Uhrzeit von Endgeräten über ein Netzwerk, wie z.B. das Internet. Die Kommunikation erfolgt dabei standardmäßig ungesichert (keine Verschlüsselung, keine Authentifizierung etc.) über Port UDP/123. Mit NTS (Network Time Security) gibt es seit 2020 aber eine auf Basis von TLS verschlüsselte und somit abgesicherte Alternative (Details siehe RFC 8915 sowie NTS: Absicherung von NTP gegen MITM-Angriffe).
Meinen OpenWrt-Router habe ich mittlerweile von NTP auf NTS umgestellt. Wie ich das mittels chrony umgesetzt habe, erfahrt ihr in folgendem Beitrag.
Standard-NTP-Dienst von OpenWrt deaktivieren
Da wir zukünftig chrony für die Zeitsynchronisation verwenden, benötigen wir den Standard-NTP-Dienst von OpenWrt nicht mehr. Aus diesem Grund kann dieser deaktiviert werden. Das könnt ihr bspw. direkt über die Weboberfläche per LuCI vornehmen. Dazu wählt im Menü System - System - Time Synchronization
und entfernt das Häkchen bei Enable NTP client
. Anschließend klickt noch auf Save & Apply
, um die Änderungen zu übernehmen.
chrony mit NTS einrichten
chrony installieren
Als erstes installiert chrony mit NTS-Unterstützung unter OpenWrt mit folgenden Befehlen:
chrony konfigurieren
Da ich nie mit UCI zum Konfigurieren von OpenWrt-Diensten warm geworden bin und die UCI-Konfigurationsdatei von chrony auch nicht alle Konfigurationen von chrony zulässt, habe ich als erstes den kompletten Inhalt der /etc/config/chrony
-Datei entfernt. Die Datei bleibt weiter vorhanden, aber ist leer und wird nicht weiter verwendet.
Die eigentliche Konfiguration erfolgt in /etc/chrony/chrony.conf
. Bei mir sieht die Konfigurationsdatei derzeit wie folgt aus:
Im Großen und Ganzen habe ich die Konfigurationsdatei, die das GrapheneOS-Projekt für seine Infrastruktur verwendet, als Vorlage verwendet. Was die einzelnen Konfigurationswerte bedeuten, könnt ihr der chrony-Dokumentation entnehmen.
Die letzten zwei Zeilen benötigt ihr nur, wenn chrony auch als NTP-Server agieren soll (siehe auch OpenWrt: Router als NTP-Server einrichten).
chrony-Dienst aktivieren & starten
Nachdem ihr die Konfiguration entsprechend vorgenommen habt, könnt ihr nun den chrony-Dienst starten:
chrony - Status überprüfen
Um sicherzugehen, dass alles korrekt funktioniert, bietet chrony einige Befehle. Als erstes überprüft, ob eure NTS-Server verwendet werden und erreichbar sind. In der Reach
-Spalte sollte im Bestfall eine 377 stehen. (Details siehe chrony-Dokumentation)
Des Weiteren könnt ihr sicherstellen, dass die Authentifizierung mit den NTS-Servern erfolgreich war:
Die Spalten KeyID
, Type
und KeyLen
sollte keine 0-Werte enthalten.
Allgemeine Statistiken bietet der Befehl chronyc -N serverstats
.
Falls ihr, wie ich, eure Clients so konfiguriert habt, dass euer OpenWrt-Router als NTP-Server hinterlegt ist, kann der Befehl chronyc -N clients
genutzt werden, um zu prüfen, ob und wann die Clients das letzte mal eine Anfrage gestellt haben.
Fazit
Die Umstellung von NTP auf das sichere NTS zur Zeitsynchronisation funktioniert unter OpenWrt dank chrony