In der heutigen vernetzten Welt ist die Netzwerk-Ausfallsicherheit nicht nur wünschenswert, sondern absolut unerlässlich. Jedes Unternehmen, jede Bildungseinrichtung und selbst Heimnetzwerke sind auf eine stabile und unterbrechungsfreie Konnektivität angewiesen. Ein zentraler Dienst, der oft übersehen wird, bis er ausfällt, ist der DHCP-Server (Dynamic Host Configuration Protocol). Ohne einen funktionierenden DHCP-Server können neue Geräte keine IP-Adressen erhalten, und bestehende Geräte können ihre Leases nicht erneuern, was zum Stillstand des gesamten Netzwerks führen kann.
Dieser Artikel beleuchtet, wie Sie mit Dnsmasq, einem leichten und vielseitigen Tool, in Kombination mit Keepalived ein robustes und zuverlässiges DHCP-Failover einrichten können. Unser Ziel ist es, Ihnen eine detaillierte Anleitung zu geben, um die Hochverfügbarkeit Ihres DHCP-Dienstes zu gewährleisten und so einen Single Point of Failure (SPOF) zu eliminieren.
Warum DHCP Failover entscheidend ist
Stellen Sie sich vor, der einzige DHCP-Server in Ihrem Netzwerk fällt aus. Die unmittelbaren Folgen sind gravierend: Neue Mitarbeiter können sich nicht mit dem Firmennetzwerk verbinden, Gäste-WLAN funktioniert nicht, IP-Telefone bleiben stumm, und über kurz oder lang verlieren auch bereits verbundene Geräte ihre IP-Adressen, wenn deren Leases ablaufen und nicht erneuert werden können. Dies führt zu massiven Produktivitätsverlusten und Frustration.
Ein DHCP Failover-System stellt sicher, dass, wenn ein DHCP-Server ausfällt, ein zweiter Server nahtlos dessen Rolle übernehmen kann, ohne dass es zu einer Unterbrechung des Dienstes kommt. Dies ist ein Eckpfeiler für jede zuverlässige Netzwerkinfrastruktur und unverzichtbar für die Geschäftskontinuität.
Dnsmasq verstehen: Der vielseitige Helfer
Dnsmasq ist weit mehr als nur ein DHCP-Server. Es ist ein leichtgewichtiger Netzwerkdienst, der hauptsächlich drei Funktionen in sich vereint:
- DNS-Forwarder: Leitet DNS-Anfragen an upstream DNS-Server weiter und cached Antworten lokal, um die Performance zu verbessern.
- DHCP-Server: Weist IP-Adressen, Subnetzmasken, Gateways und DNS-Server an Clients zu.
- TFTP-Server: Ermöglicht das booten von Systemen über das Netzwerk (PXE-Boot).
Die Beliebtheit von Dnsmasq rührt von seiner Einfachheit, seinem geringen Ressourcenverbrauch und seiner einfachen Konfiguration her. Es ist ideal für kleine bis mittelgroße Netzwerke oder als spezialisierter Dienst in größeren Umgebungen, wo kein komplexer Enterprise-DHCP-Server wie ISC DHCP benötigt wird. Seine schlanke Architektur macht es auch zu einem guten Kandidaten für Redundanzlösungen.
Die Herausforderung: Natives Dnsmasq Failover
Im Gegensatz zu komplexeren DHCP-Servern wie ISC DHCP verfügt Dnsmasq nicht über eine native, eingebaute DHCP-Failover-Funktionalität, die beispielsweise Leases automatisch zwischen zwei Servern synchronisiert. Das bedeutet, dass wir eine externe Lösung oder eine clevere Konfiguration benötigen, um die gewünschte Ausfallsicherheit zu erreichen.
Die größte Herausforderung bei einem DHCP-Failover ist die Verwaltung der IP-Adress-Leases. Wenn zwei Server dieselben Adressen vergeben könnten, entstünden Konflikte. Wenn sie unterschiedliche Leases verwalten, muss ein Mechanismus existieren, damit der ausfallende Server seine Leases an den aktiven Server übergibt, oder zumindest, dass der aktive Server weiß, welche Adressen noch verfügbar sind.
Strategien für Dnsmasq DHCP Failover
Es gibt verschiedene Ansätze, um mit Dnsmasq ein Failover zu realisieren. Wir konzentrieren uns hier auf die robusteste und empfehlenswerteste Methode für die meisten Szenarien:
Methode: Virtuelle IP (VIP) mit Keepalived und aufgeteilten IP-Bereichen
Diese Methode ist die gängigste und zuverlässigste, um Dnsmasq Hochverfügbarkeit zu erreichen. Sie kombiniert zwei Schlüsselkomponenten:
- Keepalived: Ein Daemon, der das VRRP-Protokoll (Virtual Router Redundancy Protocol) implementiert. Keepalived überwacht den Status Ihrer DHCP-Server und verschiebt bei einem Ausfall eine virtuelle IP-Adresse (VIP) vom primären (Master) auf den sekundären (Backup) Server. DHCP-Clients senden ihre Anfragen an diese VIP, sodass sie vom Übergang nichts bemerken.
- Aufgeteilte DHCP-Bereiche: Anstatt die Lease-Dateien zwischen den Servern zu synchronisieren, was zu Komplikationen und Race Conditions führen kann, teilen wir den gesamten DHCP-Pool in zwei disjunkte Bereiche auf. Jeder Dnsmasq-Server ist für einen dieser Bereiche verantwortlich. Wenn der Master ausfällt und der Backup die VIP übernimmt, vergibt er Adressen aus *seinem eigenen* Pool. Dies vereinfacht die Lease-Verwaltung erheblich.
Dieser Ansatz bietet eine hervorragende Balance zwischen Einfachheit und Zuverlässigkeit und wird im Folgenden detailliert beschrieben.
Detaillierte Implementierungsanleitung: Keepalived mit aufgeteilten DHCP-Bereichen
Wir werden zwei Linux-Server (z.B. Ubuntu, Debian oder CentOS) verwenden, um unser DHCP Failover Cluster aufzubauen.
1. Voraussetzungen
- Zwei Linux-Server (Server 1 – MASTER, Server 2 – BACKUP).
- Root-Zugriff oder sudo-Rechte auf beiden Servern.
- Netzwerkverbindung zwischen den Servern und zum Client-Netzwerk.
- Installieren Sie Dnsmasq und Keepalived auf beiden Servern:
sudo apt update sudo apt install dnsmasq keepalived -y # Für Debian/Ubuntu # Oder für CentOS/RHEL: # sudo yum install epel-release -y # sudo yum install dnsmasq keepalived -y
2. Netzwerkplanung
Definieren Sie die IP-Adressen für Ihre Einrichtung:
- Server 1 (MASTER)
- Physikalische IP: `192.168.1.10`
- DHCP-Bereich: `192.168.1.100 – 192.168.1.149`
- Server 2 (BACKUP)
- Physikalische IP: `192.168.1.11`
- DHCP-Bereich: `192.168.1.150 – 192.168.1.199`
- Virtuelle IP (VIP): `192.168.1.5` (Clients senden DHCP-Anfragen hierhin)
- Gateway: `192.168.1.1`
- DNS-Server: `8.8.8.8`, `8.8.4.4` (Beispiel)
- Netzwerkschnittstelle: `eth0` (passen Sie diese bei Bedarf an)
3. Dnsmasq-Konfiguration auf beiden Servern
Bearbeiten Sie die Konfigurationsdatei `/etc/dnsmasq.conf` auf beiden Servern. Denken Sie daran, die `listen-address` und den `dhcp-range` entsprechend dem jeweiligen Server anzupassen.
Dnsmasq-Konfiguration für Server 1 (MASTER)
# /etc/dnsmasq.conf auf Server 1 (MASTER)
interface=eth0 # Die Schnittstelle, auf der Dnsmasq lauschen soll
listen-address=192.168.1.10 # Lausche auf der physikalischen IP des Masters
# Achtung: Dnsmasq sollte NICHT auf der VIP lauschen, Keepalived übernimmt das.
# DHCP Konfiguration für Server 1
dhcp-range=192.168.1.100,192.168.1.149,12h # IP-Bereich und Lease-Zeit (12 Stunden)
dhcp-option=option:router,192.168.1.1 # Standard-Gateway
dhcp-option=option:dns-server,8.8.8.8,8.8.4.4 # DNS-Server
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases # Speicherort der Lease-Datei
log-dhcp # DHCP-Logs aktivieren (nützlich für Debugging)
# Stellen Sie sicher, dass das Verzeichnis existiert:
# sudo mkdir -p /var/lib/dnsmasq
# sudo chown dnsmasq:dnsmasq /var/lib/dnsmasq
Dnsmasq-Konfiguration für Server 2 (BACKUP)
# /etc/dnsmasq.conf auf Server 2 (BACKUP)
interface=eth0 # Die Schnittstelle, auf der Dnsmasq lauschen soll
listen-address=192.168.1.11 # Lausche auf der physikalischen IP des Backups
# DHCP Konfiguration für Server 2
dhcp-range=192.168.1.150,192.168.1.199,12h # IP-Bereich und Lease-Zeit
dhcp-option=option:router,192.168.1.1 # Standard-Gateway
dhcp-option=option:dns-server,8.8.8.8,8.8.4.4 # DNS-Server
dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases # Speicherort der Lease-Datei
log-dhcp # DHCP-Logs aktivieren
# Stellen Sie sicher, dass das Verzeichnis existiert:
# sudo mkdir -p /var/lib/dnsmasq
# sudo chown dnsmasq:dnsmasq /var/lib/dnsmasq
Starten Sie Dnsmasq auf beiden Servern neu, um die Änderungen zu übernehmen:
sudo systemctl restart dnsmasq
sudo systemctl enable dnsmasq
4. Keepalived-Konfiguration auf beiden Servern
Keepalived wird die virtuelle IP verwalten und den Status des Dnsmasq-Dienstes überwachen. Bearbeiten Sie die Datei `/etc/keepalived/keepalived.conf`.
Keepalived-Konfiguration für Server 1 (MASTER)
# /etc/keepalived/keepalived.conf auf Server 1 (MASTER)
vrrp_script chk_dnsmasq {
script "/usr/local/bin/check_dnsmasq.sh" # Skript zur Überprüfung von Dnsmasq
interval 2 # Alle 2 Sekunden prüfen
fall 2 # 2 Fehlversuche vor Ausfall
rise 1 # 1 Erfolg zum Wiederherstellen
}
vrrp_instance VI_1 {
state MASTER # Dieser Server ist der Master
interface eth0 # Die Schnittstelle für VRRP
virtual_router_id 51 # Eindeutige ID für dieses VRRP-Instanz (muss auf beiden Servern gleich sein)
priority 101 # Höhere Priorität als der Backup (Standard ist 100)
advert_int 1 # Werbung alle 1 Sekunde senden
authentication {
auth_type PASS
auth_pass mysecretpassword # Gemeinsames Passwort für VRRP (auf beiden Servern gleich)
}
virtual_ipaddress {
192.168.1.5/24 dev eth0 label eth0:0 # Die virtuelle IP-Adresse
}
track_script {
chk_dnsmasq # Führt das obige Skript aus
}
}
Keepalived-Konfiguration für Server 2 (BACKUP)
# /etc/keepalived/keepalived.conf auf Server 2 (BACKUP)
vrrp_script chk_dnsmasq {
script "/usr/local/bin/check_dnsmasq.sh" # Skript zur Überprüfung von Dnsmasq
interval 2
fall 2
rise 1
}
vrrp_instance VI_1 {
state BACKUP # Dieser Server ist der Backup
interface eth0
virtual_router_id 51
priority 100 # Niedrigere Priorität als der Master
advert_int 1
authentication {
auth_type PASS
auth_pass mysecretpassword
}
virtual_ipaddress {
192.168.1.5/24 dev eth0 label eth0:0 # Die virtuelle IP-Adresse
}
track_script {
chk_dnsmasq
}
}
5. Dnsmasq Health Check Skript erstellen
Erstellen Sie auf beiden Servern das Skript `/usr/local/bin/check_dnsmasq.sh` und machen Sie es ausführbar. Dieses Skript wird von Keepalived verwendet, um den Zustand des Dnsmasq-Dienstes zu überprüfen.
sudo nano /usr/local/bin/check_dnsmasq.sh
Fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
if systemctl is-active --quiet dnsmasq; then
exit 0 # Dnsmasq läuft
else
exit 1 # Dnsmasq läuft nicht
fi
Machen Sie das Skript ausführbar:
sudo chmod +x /usr/local/bin/check_dnsmasq.sh
6. Keepalived starten und testen
Starten Sie Keepalived auf beiden Servern und aktivieren Sie es für den Systemstart:
sudo systemctl restart keepalived
sudo systemctl enable keepalived
Überprüfung:
- Überprüfen Sie den Status der Dienste auf beiden Servern:
sudo systemctl status dnsmasq keepalived
Beide sollten aktiv (`active (running)`) sein.
- Überprüfen Sie die IP-Adressen auf Server 1 (MASTER):
ip a show eth0
Sie sollten hier sowohl die physikalische IP (`192.168.1.10`) als auch die virtuelle IP (`192.168.1.5`) sehen. Auf Server 2 (BACKUP) sollte nur die physikalische IP (`192.168.1.11`) sichtbar sein.
- Testen Sie den Failover:
- Stoppen Sie Dnsmasq auf Server 1 (MASTER): `sudo systemctl stop dnsmasq`.
Beobachten Sie `ip a show eth0` auf Server 2 (BACKUP) – die VIP sollte innerhalb weniger Sekunden auf Server 2 erscheinen. - Fordern Sie von einem Client eine neue IP-Adresse an. Diese sollte nun von Server 2 aus dem Bereich `192.168.1.150 – 192.168.1.199` vergeben werden.
- Starten Sie Dnsmasq auf Server 1 wieder: `sudo systemctl start dnsmasq`. Die VIP sollte nach kurzer Zeit auf Server 1 zurückwandern (Preemption).
- Alternativ können Sie auch Keepalived auf Server 1 stoppen (`sudo systemctl stop keepalived`), um einen vollständigen Serverausfall zu simulieren.
- Stoppen Sie Dnsmasq auf Server 1 (MASTER): `sudo systemctl stop dnsmasq`.
Überlegungen und Best Practices
- DHCP-Lease-Dateien: Da die IP-Bereiche aufgeteilt sind, verwaltet jeder Dnsmasq-Server seine eigenen Leases in `/var/lib/dnsmasq/dnsmasq.leases`. Bei einem Failover vergibt der neue aktive Server nur Adressen aus seinem eigenen Bereich. Das bedeutet, dass die Leases, die vom vorherigen Master vergeben wurden, erst nach Ablauf ihrer Gültigkeitsdauer freigegeben werden. Dies ist ein akzeptabler Kompromiss für die Einfachheit der Konfiguration.
- Zeit-Synchronisation (NTP): Stellen Sie sicher, dass beide Server über NTP (Network Time Protocol) synchronisiert sind. Dies ist entscheidend für die korrekte Verwaltung der DHCP-Lease-Zeiten und die Logs.
- DNS-Konfiguration: Wenn Sie Dnsmasq auch als lokalen DNS-Resolver verwenden, stellen Sie sicher, dass die `/etc/resolv.conf` auf beiden Servern konsistent ist oder dass beide Dnsmasq-Instanzen dieselben Upstream-DNS-Server verwenden.
- Überwachung: Richten Sie ein Überwachungssystem ein, das den Status von Dnsmasq und Keepalived auf beiden Servern überwacht und Sie bei einem Ausfall alarmiert.
- Firewall-Regeln: Stellen Sie sicher, dass die notwendigen Ports (DHCP UDP 67/68, VRRP IP Protocol 112) auf beiden Servern geöffnet sind.
- Preemption: Im Standard-Keepalived-Verhalten (und unserer Konfiguration) wird der MASTER-Server, sobald er wieder online ist, die VIP vom BACKUP-Server zurückfordern. Wenn Sie dies nicht wünschen und der BACKUP-Server die VIP behalten soll, bis er selbst ausfällt, können Sie `nopreempt` in der `vrrp_instance` Sektion des BACKUP-Servers hinzufügen (und die Priorität des BACKUPs so anpassen, dass sie größer als 100 ist).
- Sicherheit: Verwenden Sie ein starkes Passwort für die VRRP-Authentifizierung und beschränken Sie den Zugriff auf die Server auf autorisierte Administratoren.
Fazit
Die Einrichtung eines zuverlässigen DHCP-Failovers ist ein wesentlicher Schritt zur Erhöhung der Netzwerk-Ausfallsicherheit. Mit Dnsmasq und Keepalived steht Ihnen eine leistungsstarke und dennoch unkomplizierte Lösung zur Verfügung, um einen Single Point of Failure für Ihren DHCP-Dienst zu eliminieren.
Durch die Kombination von Keepalived für die virtuelle IP und aufgeteilten DHCP-Adressbereichen für Dnsmasq schaffen Sie ein System, das bei einem Serverausfall nahtlos die Funktion übernimmt. Dies gewährleistet eine unterbrechungsfreie IP-Adressvergabe, minimiert Ausfallzeiten und trägt maßgeblich zur Stabilität und Effizienz Ihrer gesamten Netzwerkinfrastruktur bei.
Investieren Sie in die Hochverfügbarkeit Ihres Netzwerks. Ihre Nutzer und Ihre Produktivität werden es Ihnen danken!