Zum Inhalt springen

Raspberry Pi als Heimserver – #8 – PiHole

Beitragsbild Raspberry Pi

Aus meiner Sicht gehört ein Werbeblocker in jedes moderne Smart-Home. Egal, ob man einen DNS-Dienst wie NextDNS oder AdGuard-DNS nutzt oder lokal eine Lösung wie PiHole oder AdGuard Home betreibt – das Blockieren von Werbung, Tracking und Malware-Domains erhöht nicht nur die Surfgeschwindigkeit, sondern auch die Sicherheit und den Datenschutz aller Geräte im Netzwerk.

Ich selber nutze zwar primär AdGuard-DNS für eine einfache und effektive Lösung. In meinem Beitrag Werbung effektiv blockieren – Meine Empfehlung bin ich bereits darauf eingegangen. Allerdings möchte nicht jeder Geld für einen solchen Dienst bezahlen, und viele FOSS Enthusiasten ziehen eine selbst gehostete Lösung vor, um die volle Kontrolle zu behalten.

Daher möchte ich in dieser Fortsetzung meiner Raspberry Pi Heimserver-Reihe PiHole vorstellen und zeigen, wie einfach die Installation und Konfiguration ist. Als zentraler DNS-Server auf deinem Raspberry Pi wird PiHole schnell zum Herzstück deines IoT-Netzwerks.

Warum PiHole mit Docker und Portainer?

PiHole ist eine fantastische, quelloffene Software (FOSS), die bereits seit Jahren zuverlässig ihren Dienst verrichtet. Um die Installation und Administration so einfach wie möglich zu halten, setze ich, wie bei meinem Heimserver üblich, auf Docker.

Die Installation über die Docker CLI ist zwar möglich, aber die Verwendung von Docker Compose – oder noch benutzerfreundlicher, den Stacks in Portainer – bietet einen klaren Vorteil. Gerade Stacks lassen sich sehr gut innerhalb von Portainer administrieren, schnell starten, stoppen oder aktualisieren und sind daher für uns Hobby-Blogger und Heimserver-Betreiber die bevorzugte Wahl.

 

PiHole-Installation via Portainer Stack

Als Basis nutze ich mein bereits bestehendes Portainer-Setup. Um PiHole als Stack hinzuzufügen, navigieren wir in Portainer zu „Stacks“ und klicken auf „Add stack“. Den folgenden Code fügst du in das Webinterface ein.

Ich empfehle, alle Pfade (Volumes) anzupassen und die Zeitzone TZ auf deine lokale Zeitzone zu ändern (z.B. Europe/Berlin). Das Web-Passwort (WEB_PASSWORD) musst du vor dem Start ebenfalls unbedingt anpassen!

YAML
# WICHTIG: Solltest du MACVLAN nutzen, ersetze den gesamten 'ports:'-Abschnitt
# durch deinen MACVLAN-Namen (siehe Abschnitt MACVLAN weiter unten)
services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      # DNS-Ports (obligatorisch für die Namensauflösung)
      - "53:53/tcp"
      - "53:53/udp"
      # Standard-HTTP-Port für die Weboberfläche
      - "80:80/tcp"
      # Standard-HTTPS-Port. FTL generiert automatisch ein selbstsigniertes Zertifikat
      - "443:443/tcp"
      # Entferne die Raute (#) der Zeile unten, falls du Pi-hole als DHCP-Server nutzen willst
      #- "67:67/udp"
      # Entferne die Raute (#) der Zeile unten, falls du Pi-hole als NTP-Server nutzen willst
      #- "123:123/udp"
    environment:
      TZ: ''
      # Setze ein Passwort für den Zugriff auf die Weboberfläche. Ohne Angabe wird ein zufälliges Passwort vergeben
      FTLCONF_webserver_api_password: ''
      # Bei Verwendung der Standard-'bridge'-Netzwerkeinstellungen von Docker sollte der DNS-Abhörmodus auf 'ALL' gesetzt werden
      FTLCONF_dns_listeningMode: 'ALL'
    volumes:
      - :/etc/pihole
    cap_add:
      - NET_ADMIN
      - SYS_TIME
      - SYS_NICE
    restart: unless-stopped

Nachdem du den Stack gestartet hast, kannst du die Weboberfläche deines neuen Werbeblockers unter der IP-Adresse deines Raspberry Pi im Browser aufrufen (z.B. http://192.168.1.10/admin).

PiHole Anmelde-Seite
PiHole Anmelde-Seite

 

Die Konfiguration: Upstream-DNS und Listen

Die Grundkonfiguration bei mir sieht vor, dass ich unter Settings -> DNS eine Mischung aus schnellen und datenschutzfreundlichen Upstream-DNS-Servern aktiviere, um eine optimale Ausfallsicherheit und Performance zu gewährleisten.

Als Basis würde ich die folgende Einstellung wählen:

PiHole Upstream DNS Servers
PiHole Upstream DNS Servers

Wichtig: Den eingebauten DHCP-Server von PiHole nutze ich nicht. Diese Funktion übernimmt bei mir im Netzwerk mein Router, da dieser in der Regel stabiler und schneller ist. Du solltest nur einen DHCP-Server in deinem Netzwerk aktiv haben.

Bei den Blocklisten kann ich die von HaGeZi nur wärmstens empfehlen. Sie haben sich in der Praxis bewährt und genießen in der AdBlocker-Szene einen hohen Stellenwert für ihre Qualität und ihren Umfang. Sie gehen weit über reine Werbeblocker hinaus und blockieren auch Malware, Fake-Seiten und vieles mehr.

Klicke im Menü auf Lists und trage anschließend die folgenden Listen ein:

Nachdem du diese Listen hinzugefügt hast, müssen diese noch heruntergeladen und aktiviert werden. Dazu klickst du unter Tools -> Update Gravity den Button Update an. Das kann je nach Geschwindigkeit deines Raspberry Pi einen Moment dauern. Im Anschluss sollte die Zahl neben dem Menüeintrag Lists deutlich über 800.000 liegen – ein beeindruckendes Arsenal an geblockten Domains!

PiHole Listen
PiHole Listen

 

PiHole im Netzwerk bekannt machen

Nachdem nun eine Grundkonfiguration durchgeführt wurde und dein PiHole einsatzbereit ist, muss die IP des Werbeblockers den Geräten in deinem Smart-Home-Netzwerk bekannt gemacht werden. Hierfür gibt es mehrere komfortable Wege:

  1. Manuelle Umstellung pro Gerät: Man stellt auf jedem Gerät (PC, Smartphone, Smart-TV) von Hand den DNS-Server auf die IP des PiHole um. Das ist präzise, aber bei vielen Geräten sehr aufwändig.
  2. DHCP-Server am Router: Die beste und einfachste Methode ist, den DHCP-Server deines Routers (z. B. FritzBox) so einzustellen, dass dieser automatisch die IP-Adresse deines PiHole als primären DNS-Server an alle Geräte im Netzwerk verteilt. So profitieren alle verbundenen Geräte automatisch vom AdBlocker, inklusive aller IoT-Geräte.
PiHole Dashboard
PiHole Dashboard

 

Netzwerk-Architektur: Bridge, Host oder MACVLAN?

Wenn du Container auf deinem Raspberry Pi betreibst, stolperst du unweigerlich über das Thema Netzwerkmodi. Standardmäßig läuft der PiHole-Container im sogenannten Bridge-Modus. Das bedeutet, Docker leitet die Ports des Hosts an den Container weiter. Das funktioniert solange gut, bis ein anderer Dienst – wie eine Nextcloud-Instanz oder ein lokaler Apache-Webserver – ebenfalls den Port 80 für die Weboberfläche beansprucht. In einem solchen Fall startet der Container gar nicht erst, und Portainer quittiert den Dienst mit einer Fehlermeldung.

Eine Alternative wäre der Host-Modus, bei dem der Container direkt die Netzwerkkarte des Raspberry Pi nutzt. Das löst jedoch nicht das Problem kollidierender Ports auf derselben IP-Adresse. Genau hier kommt ein MACVLAN ins Spiel. Dieses virtuelle Netzwerk ermöglicht es, jedem Docker-Container eine eigene, vollwertige IP-Adresse aus deinem bestehenden Heimnetzwerk zuzuweisen. Dein PiHole verhält sich dadurch wie ein physisch separates Gerät im Netzwerk.

Kurzanleitung zur Einrichtung von MACVLAN unter Portainer:

  1. Netzwerk erstellen:
    • Navigiere in Portainer zu Networks und klicke auf Add network
    • Wähle als Driver macvlan
    • Vergib einen Namen (z.B. raspi_macvlan)
    • Parent Interface: Gib das Netzwerk-Interface deines Raspberry Pi an (meistens eth0)
    • Subnet: Dein lokales Subnetz (z.B. 192.168.1.0/24)
    • Gateway: Die IP deines Routers (z.B. 192.168.1.1)
    • IP Range: Ein Bereich, aus dem die Container ihre IPs beziehen sollen (z.B. 192.168.1.200/29)
      Achtung: Dieser Bereich muss außerhalb deines DHCP-Bereichs liegen!
  2. PiHole Stack anpassen:
    • Ersetze im oben genannten PiHole Code den Eintrag network_mode: host durch:
      YAML
      networks:
        raspi_macvlan:
          ipv4_address: 192.168.1.201 # Gib hier eine freie IP aus deiner Range an
    • Entferne außerdem den kompletten ports: Abschnitt, da der Container seine eigene IP hat und die Ports nicht mehr auf den Host gemappt werden müssen.
    • Füge am Ende den Netzwerk-Verweis hinzu:
      YAML
      networks:
        raspi_macvlan:
          external: true

Dein PiHole ist nun unter der fest vergebenen IP-Adresse (192.168.1.201) erreichbar, was Konflikte mit anderen Diensten auf deinem Heimserver elegant umgeht.

 

Fazit und Ausblick

Mit PiHole hast du einen äußerst leistungsstarken, zentralen AdBlocker für dein gesamtes Smart-Home geschaffen. Die Kombination aus Raspberry Pi, Docker und Portainer macht die Administration einfach und effizient – genau das, was wir Linux-Enthusiasten lieben!

Solltest du nun noch Detail-Einstellungen vornehmen wollen oder gezielte Fragen zu PiHole haben: Ich kann aus meiner Erfahrung als Hobby-Blogger und Elektrotechniker nur empfehlen, kurz Google Gemini oder ein Konkurrenzprodukt zu befragen. Meiner Erfahrung nach kommt man so deutlich schneller zu einem Ergebnis, als minutenlang irgendwelche Suchergebnisse selbst zu durchforsten.

Falls dir der Wartungsaufwand für deinen PiHole Heimserver doch zu hoch erscheint, existieren datenschutzfreundliche DNS-Alternativen! Wirf einen Blick auf NextDNS oder AdGuard-DNS. Diese Werbeblocker-Dienste sind in geringem Umfang kostenlos verfügbar und deutlich schneller einsatzbereit – perfekt, wenn du weniger Zeit in die Konfiguration investieren möchtest. Zu beiden DNS-Alternativen habe ich bereits detaillierte Beiträge veröffentlicht (AdGuard-DNS bzw. NextDNS).

 

Hast du noch Fragen?

Hast du noch Fragen zu diesem Beitrag? Dann ab damit in die Kommentare oder schreib mich über Mastodon an.

 

Dies könnte dich auch interessieren…

Du möchtest weitere Inhalte von mir lesen? Schau doch mal hier:

1 Kommentar zu „Raspberry Pi als Heimserver – #8 – PiHole“

  1. Avatar-Foto

Schreibe einen Kommentar

Vorschau