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
-
Erstellen Sie eine
.env-Datei basierend auf dem Beispiel (.env.example). -
Starten Sie den Container:
docker run -d \ --name netbox-dns-sync \ --env-file .env \ -v ./zones:/zones \ git.klenzel.net/admin/coredns-netbox:latest