Initial commit

This commit is contained in:
Gemini Agent
2025-12-04 05:19:36 +00:00
commit 76dffc4c0d
4 changed files with 343 additions and 0 deletions

75
README.md Normal file
View File

@@ -0,0 +1,75 @@
# CoreDNS NetBox Sync
Dieser Container synchronisiert DNS-Records aus [NetBox](https://github.com/netbox-community/netbox) in lokale Zonefiles, die von [CoreDNS](https://coredns.io/) (oder BIND) genutzt werden können.
## Features
- **Automatische Synchronisation:** Holt alle 10 Minuten (konfigurierbar) Daten aus NetBox.
- **Forward & Reverse Zones:** Erstellt A/AAAA und PTR Records.
- **Ausfallsicherheit:** Wenn NetBox nicht erreichbar ist oder die API Fehler wirft, werden **keine** leeren Dateien geschrieben. Die alten Zonefiles bleiben erhalten, um `NXDOMAIN` Antworten zu verhindern.
- **Fallback NS:** Konfigurierbarer Fallback-Nameserver, falls in NetBox keine NS-Records für die Zone definiert sind.
## Installation & Nutzung
### 1. Image bauen
```bash
docker build -t local/dns-sync .
```
### 2. Container starten
Da die Standardwerte im Dockerfile hinterlegt sind, reicht dein bisheriger Befehl völlig aus, solange sich an der Konfiguration nichts geändert hat:
```bash
docker run -d \
--name klzDNS-worker \
--restart unless-stopped \
--net=container:klzDNS-coredns \
-v klzDNS-data:/zones \
local/dns-sync
```
### 3. Konfiguration anpassen (Optional)
Möchtest du Werte ändern (z.B. URL, Token oder Interval), kannst du diese als Umgebungsvariablen (`-e`) übergeben:
```bash
docker run -d \
--name klzDNS-worker \
--restart unless-stopped \
--net=container:klzDNS-coredns \
-v klzDNS-data:/zones \
-e NETBOX_URL="http://deine-netbox-url" \
-e NETBOX_TOKEN="dein-neuer-token" \
-e REFRESH_INTERVAL=300 \
local/dns-sync
```
Alternativ kannst du eine `.env` Datei erstellen:
```ini
# .env Datei
NETBOX_URL=http://192.168.1.50
REFRESH_INTERVAL=60
```
Und diese einbinden:
```bash
docker run -d ... --env-file .env local/dns-sync
```
## Verfügbare Variablen
| Variable | Standardwert | Beschreibung |
| :--- | :--- | :--- |
| `NETBOX_URL` | `http://172.30.242.99` | URL zur NetBox Instanz |
| `NETBOX_TOKEN` | `0b74...` | API Token (Read-Only reicht) |
| `ZONE_NAME` | `klenzel.net` | Die zu verwaltende DNS-Zone |
| `REVERSE_ZONE_NAME` | `172.in-addr.arpa` | Reverse Lookup Zone |
| `REFRESH_INTERVAL` | `600` | Sync-Intervall in Sekunden |
| `OUTPUT_FILE_FWD` | `/zones/db.klenzel.net` | Pfad zur Forward Zone im Container |
| `OUTPUT_FILE_REV` | `/zones/db.reverse.arpa` | Pfad zur Reverse Zone im Container |
| `FALLBACK_NS_HOSTNAME`| `fks-01-cl-cdns` | Hostname des NS, falls keiner in NetBox definiert ist |
| `FALLBACK_NS_IP` | `172.25.16.152` | IP des Fallback NS (für Glue Record) |