Ein kleines Missgeschick in der /etc/hosts-Datei führte bei einem Administrator zu einem Dominoeffekt: Ein falscher Hostname löste eine Kettenreaktion aus, die Proxmox-Knoten, Ceph-Speicher und virtuelle Maschinen lahmlegte. Solche manuellen Fehler gehören mit einer GitOps-basierten DNS-Lösung der Vergangenheit an.
In dieser Anleitung zeigen wir, wie Sie mit dnsmasq, GitHub und einem Bash-Skript eine zuverlässige, automatisierte DNS-Verwaltung für Ihr Homelab einrichten. Jede Änderung wird versioniert, auf Fehler geprüft und bei Bedarf sofort übernommen – ohne manuelles Eingreifen.
Warum GitOps für DNS im Homelab?
Die manuelle Pflege von DNS-Einträgen im Homelab ist fehleranfällig. Ein falsch gesetzter Hostname oder eine vergessene IP-Adresse kann zu Ausfällen führen, die sich wie eine Kettenreaktion ausbreiten. GitOps bietet hier eine strukturierte Alternative:
- Versionierung aller Änderungen: Jede Anpassung wird in einem Git-Repository dokumentiert und lässt sich bei Bedarf rückgängig machen.
- Automatisierte Synchronisation: Änderungen im Repository werden automatisch auf den DNS-Server übertragen.
- Einheitliche Quelle der Wahrheit: Die Konfiguration ist zentral und immer aktuell.
- Sicherheit durch Deploy-Keys: Nur der DNS-Server kann Änderungen abrufen, unbefugte Zugriffe sind ausgeschlossen.
Mit dieser Methode vermeiden Sie nicht nur menschliche Fehler, sondern schaffen auch eine wartbare und skalierbare Infrastruktur.
Schritt-für-Schritt: dnsmasq für GitOps vorbereiten
1. dnsmasq und Git installieren
Je nach Distribution erfolgt die Installation über die Paketverwaltung:
# Für Debian/Ubuntu
sudo apt update && sudo apt install -y dnsmasq git
# Für RHEL/CentOS/AlmaLinux
sudo yum install -y dnsmasq git2. Grundkonfiguration von dnsmasq
Erstellen Sie eine Basis-Konfigurationsdatei unter /etc/dnsmasq.d/000-base.conf:
domain=safesploit.com
expand-hosts
log-queries
no-hosts
addn-hosts=/etc/hosts.d
listen-address=172.16.5.27Wichtige Hinweise zur Konfiguration:
listen-addressmuss auf die IP-Adresse des Hosts gesetzt werden, auf dem dnsmasq läuft. Die Verwendung von0.0.0.0wird nicht empfohlen, da dies zu Sicherheitsrisiken führen kann.- Die
addn-hosts-Option verweist auf das Verzeichnis/etc/hosts.d/, in dem die Host-Einträge abgelegt werden.
3. Verzeichnis für modulare Host-Einträge anlegen (optional)
Um die Konfiguration übersichtlicher zu gestalten, können Sie Host-Einträge in separate Dateien aufteilen:
sudo mkdir -p /etc/hosts.d
sudo touch /etc/hosts.d/000-network.cfg
sudo touch /etc/hosts.d/050-services.cfg4. dnsmasq starten und aktivieren
sudo systemctl enable dnsmasq
sudo systemctl start dnsmasqTesten Sie die Konfiguration mit:
dig @172.16.5.27 ldap.safesploit.com +shortFalls eine IP-Adresse zurückgegeben wird, ist die Konfiguration erfolgreich.
Host-Einträge strukturiert verwalten
Die Host-Einträge werden in separaten .cfg-Dateien im Verzeichnis /etc/hosts.d/ abgelegt. Eine sinnvolle Namenskonvention erleichtert die Verwaltung:
000-network.cfg– Netzwerkgeräte wie Router oder Switches050-services.cfg– Dienste wie Datenbanken oder Authentifizierungsserver100-vms.cfg– Virtuelle Maschinen
Ein Beispiel für eine .cfg-Datei:
172.16.5.10 ldap
172.16.100.10 nas1
172.16.200.15 vm-proxmoxVorteile dieser Struktur:
- Einfache Versionierung und Überprüfung der Änderungen.
- Klare Trennung der Verantwortlichkeiten (z. B. Netzwerk vs. Dienste).
- Skalierbar für größere Homelabs oder sogar Unternehmensumgebungen.
Automatisierte Synchronisation mit Git
1. Repository-Struktur einrichten
Die Host-Einträge werden in einem Git-Repository verwaltet. Eine typische Struktur könnte so aussehen:
.dns-configs/
└── dnsmasq/
└── hosts.d/
├── 000-network.cfg
├── 050-services.cfg
└── 100-vms.cfg2. SSH-Deploy-Key für sicheren Zugriff
Um den DNS-Server sicher mit dem Repository zu verbinden, verwenden Sie einen Deploy-Key:
ssh-keygen -t ed25519 -f ~/.ssh/id_github_ed25519Fügen Sie den öffentlichen Schlüssel als Deploy-Key mit Lesezugriff in Ihrem GitHub-Repository hinzu. Dies stellt sicher, dass nur der DNS-Server Änderungen abrufen kann.
3. Bash-Skript für die Synchronisation
Ein Skript übernimmt die automatische Synchronisation zwischen Repository und DNS-Server. Hier ein Beispiel:
#!/bin/bash
# Konfiguration anpassen
REPO="dns-configs"
OWNER="github_org/username"
GITHUB_DEPLOY_KEY="${HOME}/.ssh/id_github_ed25519"
HOSTS_DIR="/etc/hosts.d"
LOG_FILE="/var/log/dnsmasq_sync.log"
# Repository klonen
if [ ! -d "/tmp/${REPO}" ]; then
ssh-agent bash -c "ssh-add ${GITHUB_DEPLOY_KEY}; git clone git@github.com:${OWNER}/${REPO}.git /tmp/${REPO}"
fi
# Änderungen prüfen und synchronisieren
cd /tmp/${REPO}/dnsmasq/hosts.d
rsync -avz --delete . ${HOSTS_DIR}/
# dnsmasq neu starten und Logs aktualisieren
dnsmasq --test && systemctl restart dnsmasq
echo "$(date): Synchronisation erfolgreich" >> ${LOG_FILE}4. Cronjob für regelmäßige Updates
Richten Sie einen Cronjob ein, der das Skript alle fünf Minuten ausführt:
*/5 * * * * /root/git_clone_dns_configs_dnsmasq.shOptional: CI-Validierung mit GitHub Actions
Um die Sicherheit weiter zu erhöhen, können Sie eine CI-Pipeline einrichten, die jede Änderung vor der Übernahme validiert. Die Pipeline prüft:
- Die Syntax der Host-Einträge.
- Auf Duplikate oder ungültige Hostnamen.
- Die Kompatibilität mit der dnsmasq-Konfiguration.
Ein Beispiel-Workflow in .github/workflows/dnsmasq-ci.yml:
name: DNSmasq CI Validation
on:
push:
paths:
- 'dnsmasq/hosts.d/**'
jobs:
validate:
runs-on: ubuntu-latest
container:
image: almalinux:latest
steps:
- uses: actions/checkout@v4
- name: Install dnsmasq
run: dnf install -y dnsmasq
- name: Validate configuration
run: |
mkdir -p /etc/dnsmasq.d
cp -r dnsmasq/hosts.d /etc/dnsmasq.hosts
dnsmasq --test
dig @127.0.0.1 -p 5353 test.example.com +shortDiese Validierung stellt sicher, dass nur fehlerfreie Änderungen in die Produktion übernommen werden.
Fazit: DNS-Verwaltung im Homelab revolutionieren
Die manuelle Pflege von DNS-Einträgen gehört mit GitOps der Vergangenheit an. Durch die Kombination von dnsmasq, Git und automatisierten Workflows schaffen Sie eine zuverlässige, versionierte und sichere DNS-Infrastruktur für Ihr Homelab. Jede Änderung wird dokumentiert, geprüft und bei Bedarf sofort übernommen – ohne manuelle Fehler oder Ausfallzeiten.
Mit dieser Lösung können Sie sich auf das Wesentliche konzentrieren: die Entwicklung und Verwaltung Ihrer Projekte, statt Zeit mit der Fehlersuche in der DNS-Konfiguration zu verlieren. In Zukunft lässt sich dieses Setup sogar um weitere Automatisierungen wie automatische Backups oder Monitoring erweitern.
KI-Zusammenfassung
Transform homelab DNS with GitOps: automate dnsmasq host updates using GitHub, Bash scripts, and cronjobs for error-free, version-controlled networking.