Pi-hole Uhrzeit: DNSSEC-Probleme nach Stromverlust beheben

Einige Pi-holes werden über Nacht abgeschaltet, um Strom zu sparen. Dies führt jedoch zu Problemen, wenn DNSSEC auf dem Pi-hole aktiv ist, da der Raspberry Pi (bis einschließlich die 4er-Generation) über keine Hardware-Echtzeituhr (RTC) verfügt. Bei einem Stromausfall bleibt die Zeit ungefähr auf dem Stand zum Zeitpunkt des Stromausfalls. Für den Authentifizierungsprozess in DNSSEC muss die Zeit aber exakt sein. Und genau hier liegt das Problem: Raspberry Pis sind auf externe Zeitserver angewiesen, um ihre Zeit exakt zu halten. Bei der Abfrage der hinterlegten Zeitserver kommt es dann aufgrund der Zeitabweichung zu BOGUS-DNSSEC-Meldungen und die NTP-Domain wird nicht in die dazugehörige IP-Adresse aufgelöst. Die Folge: Die Zeit des Pi-hole kann nicht synchronisiert werden und alle DNS-Anfragen der Clients werden mit BOGUS beantwortet. Ein Totalausfall, da kein Client mehr in der Lage ist, eine Website/Domain aufzurufen.

Dieses Problem lässt sich auf unterschiedliche Varianten lösen:

  • Den Raspberry Pi nicht ausschalten
  • Eine externe Hardware-Echtzeituhr (RTC) anschließen
  • DNSSEC deaktivieren
  • […]

Anbei eine softwareseitige Lösung, die in Kombination mit einer Fritz!Box einfach zu realisieren ist. Loggt euch auf dem Pi-hole via SSH ein und bearbeitet die Konfiguration des timesync-Daemon wie folgt:

sudo nano /etc/systemd/timesyncd.conf
#NTP=
#FallbackNTP=0.debian.pool.ntp.org 1.debian.pool.ntp.org 2.debian.pool.ntp.org 3.debian.pool.ntp.org
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048
NTP=192.168.50.1

Ganz am Ende wird NTP=192.168.50.1 hinzugefügt und anschließend die Konfiguration gespeichert. Die IP-Adresse 192.168.50.1 müsst ihr mit der IPv4-Adresse eurer Fritz!Box ersetzen.

Hinweis

Standardmäßig ist der NTP-Zeitserver auf der Fritz!Box aktiv. Über das Webinterface der Fritz!Box -> Heimnetz -> Netzwerk -> Netzwerkeinstellungen -> Zeitsynchronisation kann das kontrolliert werden. Dort muss bei FRITZ!Box als Zeitserver im Heimnetz bereitstellen ein Häkchen gesetzt sein.

Anschließend wird der timesync-Daemon neu gestartet:

systemctl restart systemd-timesyncd.service

Im Anschluss kann man überprüfen, ob der hinterlegte NTP-Server für die Zeitabfrage verwendet wird:

timedatectl timesync-status

Output:

Server: 192.168.50.1 (192.168.50.1)
Poll interval: 34min 8s (min: 32s; max 34min 8s)
         Leap: normal
      Version: 4
      Stratum: 2
    Reference: 812879C6
    Precision: 1us (-20)
Root distance: 16.021ms (max: 5s)
       Offset: +84us
        Delay: 1.310ms
       Jitter: 494us
 Packet count: 16
    Frequency: -2.800ppm/

Zur Sicherheit kann die /etc/crontab nun erweitert werden, um einen Zeitabgleich nach einem Neustart zu erzwingen:

sudo nano /etc/crontab
@reboot root    timedatectl set-ntp true

Der Raspberry Pi muss nun keine NTP-Domain auflösen (die aufgrund der Zeitabweichung in Kombination mit DNSSEC nicht beantwortet wird), sondern nutzt die lokale IP-Adresse der Fritz!Box, um seine Zeit zu synchronisieren. Problem gelöst.

Unterstütze den Blog mit einem Dauerauftrag! Mitmachen ➡