Wer ebenfalls Pi-Hole aus meinem November Beitrag fleißig getestet hat, kann sich nun mit dieser Anleitung an eine Hochverfügbarkeit machen. Was ihr braucht – lediglich einen zweiten Linux Rechner der 24 Stunden am Tag erreichbar ist und im selben Netz steht wie euer bestehender Pi-Hole Server.
Am Ende habt ihr 2 Pi-Hole Instanzen und eine Failover IP-Adresse die in eurem Router fest als DNS Adresse hinterlegt ist. Oftmals ist genau an dieser Stelle nur eine IP-Adresse möglich. Eine Pi-Hole Master Node und eine Backup Node. Sollte die Master Node offline gehen wandert die Failover-IP Adresse durch den keepalived Dienst auf die Backup Node. Die Heimgeräte müssen für die Ausfallzeit der Master Node keiner Anpassung unterzogen werden.
Ich gehe in dieser Anleitung auf eine Raspbian/Debian Installation auf 2x Raspberry Pi ein.
Punkt 1: Vorbereitungen
Um zu erlauben, dass IP-Adressen auch auf nicht lokale Schnittstellen zugewiesen werden dürfen, ist eine kleine Anpassung auf beiden Nodes (Master und Backup) notwendig.
1 2 |
sudo echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf sudo sysctl -p |
Punkt 2: Installation von keepalived
Wir installieren auf der Master und Backup Node den Failover Dienst keepalived.
1 |
sudo apt-get install keepalived |
Vergewissert euch, dass der Dienst auch automatisch beim Booten startet.
1 |
sudo systemctl enable keepalived.service |
Punkt 3: keepalived Konfiguration Master
Folgendes tragen wir auf der primären Pi-Hole Node, dem Master, ein.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
global_defs { notification_email { alerts@domain.de # Benachrichtigungs Zieladresse(n) } notification_email_from keepalived@pihole1.domain.de # Benachrichtigungs Quelladresse smtp_server localhost # SMTP Serveradresse smtp_connect_timeout 30 # Timeout zum SMTP Server router_id pihole1 # Eindeutige ID wie z.B. HOSTNAME script_user root # Benutzer der Notify Scripte enable_script_security # Script Sicherheit einschalten } vrrp_instance PIHOLE { state MASTER interface wlan0 # Genutztes Interface virtual_router_id 51 # ID der Route priority 150 # Master Prio 150, Backup Prio 50 advert_int 5 # Intervall der VRRP Pakete smtp_alert # E-Mail Benachrichtigung aktiviren unicast_src_ip 192.168.1.x # Unicast Quelladresse unicast_peer { 192.168.1.x # Unicast Zieladresse(n) } virtual_ipaddress { 192.168.1.10/24 # Virtuelle Failover IP-Adresse } # notify_master "" # Notify Script für den Master Status (einkommentieren, wenn genutzt wird) # notify_backup "" # Notify Script für den Backup Status (einkommentieren, wenn genutzt wird) # notify_fault "" # Notify Script für den Fehler Status (einkommentieren, wenn genutzt wird) } |
Punkt 4: keepalived Konfiguration Backup
Folgendes tragen wir auf der sekundären Pi-Hole Node, dem Backup ein.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
global_defs { notification_email { alerts@domain.de # Benachrichtigungs Zieladresse(n) } notification_email_from keepalived@pihole2.domain.de # Benachrichtigungs Quelladresse smtp_server localhost # SMTP Serveradresse smtp_connect_timeout 30 # Timeout zum SMTP Server router_id pihole2 # Eindeutige ID wie z.B. HOSTNAME script_user root # Benutzer der Notify Scripte enable_script_security # Script Sicherheit einschalten } vrrp_instance PIHOLE { state BACKUP interface wlan0 # Genutztes Interface virtual_router_id 51 # ID der Route priority 50 # Master Prio 150, Backup Prio 50 advert_int 5 # Intervall der VRRP Pakete smtp_alert # E-Mail Benachrichtigung aktiviren unicast_src_ip 192.168.1.x # Unicast Quelladresse unicast_peer { 192.168.1.x # Unicast Zieladresse(n) } virtual_ipaddress { 192.168.1.10/24 # Virtuelle Failover IP-Adresse } # notify_master "" # Notify Script für den Master Status (einkommentieren, wenn genutzt wird) # notify_backup "" # Notify Script für den Backup Status (einkommentieren, wenn genutzt wird) # notify_fault "" # Notify Script für den Fehler Status (einkommentieren, wenn genutzt wird) } |
Punkt 5: Testen
Zuerst restarten wir beide keepalived Dienste.
1 |
sudo systemctl restart keepalived.service |
Auf dem Master sollte die Failover IP-Adresse 192.168.1.10 nun zu sehen sein.
1 2 3 4 5 |
ip a ls ... inet 192.168.1.10/24 scope global secondary wlan0 valid_lft forever preferred_lft forever ... |
Jetzt stoppen wir den keepalived auf dem Master.
1 |
sudo systemctl stop keepalived.service |
Die IP-Adresse ist umgehend auf der Backup Node hochgefahren und Pi-Hole DNS Blackhole funktioniert weiter.
Nach einem erneuten Starten des Dienstes ist euere Pi-Hole HA Installation abgeschlossen.
Vorhandene Blacklist und Whitelist Einträge solltet ihr auf beide Nodes übernehmen oder synchronisieren.
Dazu könnt ihr beispielsweise Lsyncd verwenden.
Unterstütze unsere Arbeit mit einer Spende. |