CoreDNS NetBox Sync

Dieser Container automatisiert die Generierung von DNS-Zonendateien für CoreDNS (oder BIND), indem er Daten aus NetBox synchronisiert. Er ruft IPAM-Daten (aktive IPs mit DNS-Namen) und DNS-Plugin-Einträge ab.

Funktionen

  • Automatische Synchronisation: Ruft periodisch Daten von NetBox ab.
  • Ausfallsicherer Betrieb: Wenn NetBox nicht erreichbar ist oder Fehler zurückgibt, werden die bestehenden Zonendateien beibehalten. Das Schreiben erfolgt atomar, um Korruption bei Abstürzen zu verhindern.
  • Dual-Zone-Unterstützung: Generiert sowohl Forward- als auch Reverse-(PTR)-Zonen.
  • Intelligenter Fallback: Konfiguriert automatisch einen Fallback-Nameserver, falls in NetBox keine NS-Einträge definiert sind.
  • Healthcheck: Überwacht den Sync-Status und ermöglicht Docker-Restarts bei anhaltenden Fehlern.

Konfiguration

Die Konfiguration erfolgt vollständig über Umgebungsvariablen.

Erforderliche Variablen

Variable Beschreibung
NETBOX_URL Die vollständige URL zur NetBox-Instanz (z.B. http://netbox.local).
NETBOX_TOKEN Das API-Token zur Authentifizierung (Nur-Lese-Berechtigungen sind ausreichend).
ZONE_NAME Der Name der zu verwaltenden DNS-Zone (z.B. example.com).
REVERSE_ZONE_NAME Der Name der Reverse-Lookup-Zone (z.B. 1.168.192.in-addr.arpa).

Optionale Variablen

Variable Standardwert Beschreibung
REFRESH_INTERVAL 600 Synchronisationsintervall in Sekunden.
NETBOX_SSL_VERIFY true SSL-Zertifikatsprüfung aktivieren (true/false). Bei selbstsignierten Zertifikaten auf false setzen.
NETBOX_EXTRA_FILTER "" Zusätzliche Filterparameter für die NetBox-API-Abfrage (z.B. &vrf=internal oder &tag__n=external).
OUTPUT_FILE_FWD /zones/db.fwd Pfad im Container für die Forward-Zonendatei.
OUTPUT_FILE_REV /zones/db.rev Pfad im Container für die Reverse-Zonendatei.
FALLBACK_NS_HOSTNAME ns1 Hostname, der als NS-Eintrag verwendet wird, falls keiner in NetBox existiert.
FALLBACK_NS_IP 127.0.0.1 IP-Adresse für den Fallback-NS-Glue-Record.
HEALTH_FILE /tmp/healthy Pfad zur Statusdatei für den Docker Healthcheck.

Verwendung

Docker (CLI Beispiel)

Starten Sie den Container mit folgendem Befehl. Passen Sie die Werte entsprechend Ihrer Umgebung an.

docker run -d \
  --name netbox-dns-sync \
  --restart unless-stopped \
  --net=container:coredns \
  -v ./zones:/zones \
  -e NETBOX_URL="http://netbox.example.com" \
  -e NETBOX_TOKEN="0123456789abcdef0123456789abcdef01234567" \
  -e ZONE_NAME="example.com" \
  -e REVERSE_ZONE_NAME="1.168.192.in-addr.arpa" \
  -e OUTPUT_FILE_FWD="/zones/db.example.com" \
  -e OUTPUT_FILE_REV="/zones/db.192.168.1" \
  -e FALLBACK_NS_HOSTNAME="ns1" \
  -e FALLBACK_NS_IP="192.168.1.5" \
  -e REFRESH_INTERVAL="300" \
  git.klenzel.net/admin/coredns-netbox:latest

Hinweis zum Netzwerk (--net): Falls Ihr CoreDNS-Container (hier beispielhaft coredns genannt) via macvlan angebunden ist, verwenden Sie --net=container:coredns, damit der Sync-Container denselben Netzwerk-Stack nutzen kann. Andernfalls verwenden Sie ein passendes Docker-Netzwerk (z.B. --network host oder ein Bridge-Netzwerk).

(Hinweis zum Volume: Der Pfad ./zones muss auf dem Host existieren und schreibbar sein)

Verwendung einer .env-Datei

  1. Erstellen Sie eine .env-Datei basierend auf dem Beispiel (.env.example).

  2. Starten Sie den Container:

    docker run -d \
      --name netbox-dns-sync \
      --env-file .env \
      -v ./zones:/zones \
      git.klenzel.net/admin/coredns-netbox:latest
    
Description
No description provided
Readme 68 KiB
Languages
Python 94.2%
Dockerfile 5.8%