adminForge

free | no tracking | no logging | no advertising

Das ist unser Motto. Mit adminForge bieten wir kostenlose Dienste an. Unser Ziel ist es, eine freie und datensparsame Alternative zu bekannten Diensten bereitzustellen. Seit 2014 betreiben wir adminForge gemeinsam mit Spaß an der Technik und an Open-Source.

Pi-Hole – Keepalived für die Hochverfügbarkeit

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.

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.

sudo apt-get install keepalived

Vergewissert euch, dass der Dienst auch automatisch beim Booten startet.

sudo systemctl enable keepalived.service

Punkt 3: keepalived Konfiguration Master

Folgendes tragen wir auf der primären Pi-Hole Node, dem Master, ein.

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.

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.

sudo systemctl restart keepalived.service

Auf dem Master sollte die Failover IP-Adresse 192.168.1.10 nun zu sehen sein.

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.

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ützenDas Betreiben der Dienste, Webseite und Server machen wir gerne, kostet aber leider auch Geld.
Unterstütze unsere Arbeit mit einer Spende.