Refactor: Generalisierung der Konfiguration und atomares Schreiben der Zonefiles
This commit is contained in:
69
README.md
69
README.md
@@ -4,8 +4,8 @@ Dieser Container automatisiert die Generierung von DNS-Zonendateien für CoreDNS
|
||||
|
||||
## Funktionen
|
||||
|
||||
* **Automatische Synchronisation:** Ruft periodisch Daten von NetBox ab (Standard: alle 10 Minuten).
|
||||
* **Ausfallsicherer Betrieb:** Wenn NetBox nicht erreichbar ist oder Fehler zurückgibt, werden die bestehenden Zonendateien beibehalten, um `NXDOMAIN`-Probleme zu vermeiden.
|
||||
* **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.
|
||||
|
||||
@@ -19,55 +19,54 @@ Die Konfiguration erfolgt vollständig über Umgebungsvariablen.
|
||||
| :--- | :--- |
|
||||
| `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. |
|
||||
| `ZONE_NAME` | `klenzel.net` | Der Name der zu verwaltenden DNS-Zone. |
|
||||
| `REVERSE_ZONE_NAME` | `172.in-addr.arpa` | Der Name der Reverse-Lookup-Zone. |
|
||||
| `OUTPUT_FILE_FWD` | `/zones/db.klenzel.net` | Pfad im Container für die Forward-Zonendatei. |
|
||||
| `OUTPUT_FILE_REV` | `/zones/db.reverse.arpa` | Pfad im Container für die Reverse-Zonendatei. |
|
||||
| `FALLBACK_NS_HOSTNAME`| `fks-01-cl-cdns` | Hostname, der als NS-Eintrag verwendet wird, falls keiner in NetBox existiert. |
|
||||
| `FALLBACK_NS_IP` | `172.25.16.152` | IP-Adresse für den Fallback-NS-Glue-Record. |
|
||||
| `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. |
|
||||
|
||||
## Verwendung
|
||||
|
||||
### Docker
|
||||
### Docker (CLI Beispiel)
|
||||
|
||||
1. **Image bauen:**
|
||||
```bash
|
||||
docker build -t local/dns-sync .
|
||||
```
|
||||
Starten Sie den Container mit folgendem Befehl. Passen Sie die Werte entsprechend Ihrer Umgebung an.
|
||||
|
||||
2. **Mit Umgebungsvariablen starten:**
|
||||
```bash
|
||||
docker run -d \
|
||||
--name klzDNS-worker \
|
||||
--restart unless-stopped \
|
||||
--net=container:klzDNS-coredns \
|
||||
-v klzDNS-data:/zones \
|
||||
-e NETBOX_URL="http://172.30.242.99" \
|
||||
-e NETBOX_TOKEN="dein-geheimes-token" \
|
||||
local/dns-sync
|
||||
```
|
||||
```bash
|
||||
docker run -d \
|
||||
--name netbox-dns-sync \
|
||||
--restart unless-stopped \
|
||||
--network host \
|
||||
-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" \
|
||||
local/dns-sync
|
||||
```
|
||||
|
||||
*(Hinweis: 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:
|
||||
```bash
|
||||
cp .env.example .env
|
||||
# Bearbeiten Sie die .env und fügen Sie Ihre Zugangsdaten hinzu
|
||||
```
|
||||
1. Erstellen Sie eine `.env`-Datei basierend auf dem Beispiel (`.env.example`).
|
||||
2. Starten Sie den Container:
|
||||
|
||||
2. Starten Sie den Container unter Verweis auf die Datei:
|
||||
```bash
|
||||
docker run -d \
|
||||
--name klzDNS-worker \
|
||||
--restart unless-stopped \
|
||||
--net=container:klzDNS-coredns \
|
||||
-v klzDNS-data:/zones \
|
||||
--name netbox-dns-sync \
|
||||
--env-file .env \
|
||||
-v ./zones:/zones \
|
||||
local/dns-sync
|
||||
```
|
||||
```
|
||||
Reference in New Issue
Block a user