Skip to main content

⚙️ Automatisierung von root.hints in Unbound

Nachdem Unbound erfolgreich eingerichtet und getestet wurde,
kannst du die Root-Hints-Datei automatisch aktualisieren lassen.
Dadurch bleibt dein DNS-Resolver immer auf dem neuesten Stand,
ohne dass du die Datei manuell herunterladen oder Unbound neu starten musst.

💡 Hinweis:
Die folgenden Schritte richten einen Systemd-Service und einen Timer ein,
die monatlich automatisch die aktuelle Datei root.hints
von IANA abrufen, installieren und anschließend den Unbound-Dienst neu laden.


👤 Unbound-Konto prüfen und aktiv halten

Prüfe, ob das Unbound-Systemkonto aktiv ist, und setze es ggf. zurück:

sudo chage -E -1 -M 99999 -I -1 unbound

💡 Hinweis:
Damit stellst du sicher, dass das Systemkonto „unbound“,
unter dem der Unbound-DNS-Server läuft, nicht abläuft
und dauerhaft aktiv bleibt.


🧾 sudo-Berechtigung für Unbound anlegen

Erstelle eine neue Datei im Verzeichnis /etc/sudoers.d/:

sudo nano /etc/sudoers.d/unbound

Füge genau diese eine Zeile ein (eine Zeile, keine Umbrüche!):

unbound ALL=(ALL) NOPASSWD: /usr/bin/install -m 644 /tmp/root.hints.new /etc/unbound/root.hints, /usr/bin/systemctl start reload-unbound.service

Dateirechte setzen und Syntax prüfen:

sudo chmod 0440 /etc/sudoers.d/unbound
sudo visudo -c

⚠️ Wichtig:
Eine falsche Syntax in der Datei /etc/sudoers.d/unbound
kann den Zugriff auf das System blockieren.
Überprüfe daher immer mit visudo -c, ob keine Fehler gemeldet werden.


🔄 Reload-Service erstellen

Erstelle die Datei /etc/systemd/system/reload-unbound.service:

sudo nano /etc/systemd/system/reload-unbound.service

Inhalt:

[Unit]
Description=Reload Unbound service (need sudo)

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl reload unbound.service

🌍 Service zum Aktualisieren der Root-Hints anlegen

Erstelle die Datei /etc/systemd/system/update-root-hints.service:

sudo nano /etc/systemd/system/update-root-hints.service

Inhalt:

[Unit]
Description=Update root hints file and reload Unbound
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
User=unbound
Group=unbound
ExecStart=/bin/sh -c '/usr/bin/curl -fsS -o /tmp/root.hints.new https://www.internic.net/domain/named.cache && /usr/bin/sudo /usr/bin/install -m 644 /tmp/root.hints.new /etc/unbound/root.hints'
ExecStartPost=/usr/bin/sudo /usr/bin/systemctl start reload-unbound.service

[Install]
WantedBy=multi-user.target

💡 Hinweis:
Dieser Service lädt regelmäßig die aktuelle root.hints-Datei von IANA,
ersetzt die alte Version und lädt anschließend den Unbound-Dienst neu.

Die Ausführung erfolgt über den Benutzer unbound mit temporärer
sudo-Berechtigung für genau die beiden erlaubten Befehle.


⏱️ Systemd-Timer für monatliches Update

Erstelle die Datei /etc/systemd/system/update-root-hints.timer:

sudo nano /etc/systemd/system/update-root-hints.timer

Inhalt:

[Unit]
Description=Run the update-root-hints.service monthly

[Timer]
OnCalendar=monthly
Persistent=true

[Install]
WantedBy=timers.target

🔁 Systemd neu laden und Timer aktivieren

Systemd-Konfiguration neu einlesen:

sudo systemctl daemon-reload

Timer aktivieren (startet sofort):

sudo systemctl enable --now update-root-hints.timer

Manuell testen (optional):

sudo systemctl start update-root-hints.service

Status prüfen:

sudo systemctl status update-root-hints.service --no-pager --full

🧩 Kontrolle und Überprüfung

Nächsten Laufzeitpunkt des Timers anzeigen:

systemctl list-timers update-root-hints.timer

Alle aktiven Timer-Einheiten anzeigen:

sudo systemctl list-timers

Änderungszeit der Datei prüfen (sollte aktuell sein):

ls -l /etc/unbound/root.hints

Reload-Vorgang im Log anzeigen:

journalctl -u reload-unbound.service -b --no-pager

Ergebnis:
Dein System aktualisiert nun automatisch die Root-Hints-Datei
und lädt den Unbound-Dienst regelmäßig neu –
sicher, wartungsfrei und ohne manuelle Eingriffe.