# CoreDNS NetBox Sync Dieser Container automatisiert die Generierung von DNS-Zonendateien für CoreDNS (oder BIND), indem er Daten aus [NetBox](https://github.com/netbox-community/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. ```bash 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: ```bash docker run -d \ --name netbox-dns-sync \ --env-file .env \ -v ./zones:/zones \ git.klenzel.net/admin/coredns-netbox:latest ```