Kurz notiert: Pi-hole auf einem Raspberry Pi einrichten

Pi-hole Webinterface

Screenshot Pi-hole Webinterface, kurz nach der Ersteinrichtung

Zum Testen, als Werbe- und Trackingblocker sowie – später – auch für netzwerkweiten Jugendschutz, habe ich mir heute Pi-hole® ins Heimnetz eingebaut. Wer’s nicht kennt: Pi-hole ist eine Software für den Einplatinencomputer Raspberry Pi, welche in Form eines DNS-Servers als Tracking- und Werbeblocker dient. Technisch werden dabei sämtliche Anfragen an Hostnamen bekannter Tracking- und Werbeplattformen abgefangen und ins Leere geleitet. Und dieses System lässt sich dann auch für beliebige andere Domains, etwa vor dem Hintergrund von Jugenschutz-Maßnahmen, erweitern. In diesem Artikel fasse ich nur kurz die vorgenommen Schritte für die Einrichtung des Raspberry Pis, von Pi-hole sowie die Anpassungen an die Netzwerkkonfiguration zusammen.

Meine Rahmenbedingungen

Als Router habe ich aktuell eine FRITZ!Box im Einsatz, welche auch als lokaler DNS-Server dient (Standardkonfiguration), der Raspberry ist ein Modell 3B, ich arbeite an einem Mac und hatte keine Möglichkeit Tastatur & Bildschirm direkt an den Raspberry Pi anzuschließen. Daher erfolgte die Einrichtung komplett Remote via SSH.

Schritt 1: Raspberry Pi OS (vormals Raspberian) installieren

Für die Installation des Betriebssystem Raspberry Pi OS, habe ich den offiziellen Raspberry Pi Imager verwendet, welcher auf der Raspberry-Website für Windows, MacOS und Ubuntu zum Download bereit steht. Der Raspberry Pi Imager kümmert sich auch um das Herunterladen des Raspberry-Pi-OS-Images, da muss man also vorab nichts weiter tun. MicroSD-Karte in den Rechner einstecken, Imager starten, Raspberry Pi OS auswählen und den „Write”-Button betätigen.

Schritt 2: SSH aktivieren

Nachdem der Raspberry Pi Imager die MicroSD-Karte beschrieben hat, wird diese automatisch ausgeworfen und der Imager zeigt an, dass die Karte entfernt werden kann. Das habe ich auch getan – allerdings gleich darauf wieder eingesteckt, um den SSH-Zugriff zu aktivieren. Hierzu muss lediglich eine (leere) Datei mit dem Namen „ssh” (ohne Dateiendung) im Root-Verzeichnis der MicroSD-Karte abgelegt werden (vgl. Dokumentation).
Damit ist die MicroSD-Karte jetzt vorbereitet und einsatzbereit.

Schritt 3: Raspberry Pi booten, IP-Adresse ermitteln

Die soeben präparierte MicroSD-Karte kommt nun in den Raspberry Pi, Netzwerk- und Stromkabel dran und etwas warten bis der Pi zuende gebootet hat. Nach spätestens einer Minute sollte das der Fall sein.
Nun muss die vom Router zugewiesene IP-Adresse ermittelt werden, um im nächsten Schritt via SSH auf den Raspberry Pi zu verbinden. Ich habe dazu die Oberfläche der FRITZ!Box genutzt – dort findet man unter dem Menüpunkt „Heimnetz” → „Netzwerk” eine Liste aller angemeldeter Geräte. In meinem Fall trug der Raspberry den Hostnamen „raspberrypi” (ich nehme an, das ist der Standard bei Raspberry Pi OS) und war somit leicht zu finden. Bei anderen Routern ist das möglicherweise unter einem anderen Menüpunkt aber prinzipiell sollte das immer irgendwo zu finden sein.

Schritt 4: Per SSH zum Raspberry verbinden

Nachdem nun die IP-Adresse des Raspberry Pi bekannt ist, kann im Terminal (MacOS / Linux) oder in der Eingabeaufforderung (Windows) via ssh pi@IPADRESSE verbunden werden – z.B. ssh pi@10.44.44.151. Das dann abgefragte Passwort ist standardmäßig raspberry.

Kurzer Hinweis: Der ssh-Befehl steht unter Windows erst seit Windows 10 zur Verfügung, für frühere Windows-Versionen (die man ohnehin nicht mehr benutzen sollte) benötigt man ein separates SSH-Tool wie PuTTY.

Schritt 5: Pi-hole® installieren

Einmal via SSH mit dem Raspberry Pi verbunden, gibt man nun curl -sSL https://install.pi-hole.net | bash ein (vgl. Installationsanweisung), um den Pi-hole-Installer herunter zu laden und auszuführen. Hier folgt man einfach den Anweisungen auf dem Bildschirm, die Standardeinstellungen können weitestgehend belassen werden (kann man alles später auch noch ändern).

Hier besonders wichtig:

  1. Während der Installation muss dem Raspberry Pi eine feste (statische) IP-Adresse zugewiesen werden – die wird nämlich später in der Router-Konfigration benötigt. Hier also am besten vorher nachschauen, welche IP-Adresse außerhalb des DHCP-Bereiches noch frei ist. Hat der Router beispielsweise die Adresse 10.44.44.1, dann könnte der Pi als zukünftiger DNS-Server die 10.44.44.2 bekommen.
  2. Am Ende des Installers wird das Passwort für das Webinterface angezeigt, also die für die von Pi-hole ausgelieferte „Website” auf der man später Einstellungen vornimmt, Statistiken ansieht etc. Unbedingt notieren!

Schritt 6: Raspberry Pi neu starten und testen

Da während der Installation die IP-Adresse geändert wurde – die Änderung aber erst nach dem nächsten Neustart des Raspberry Pi wirksam wird – muss dieser nun einmal neu gestartet werden. Ich bin mir nicht sicher, ob das der Installer am Ende selber gemacht hat – falls nicht wird das via sudo reboot im noch immer geöffneten Terminal-/Eingabeaufforderung-Fenster ausgelöst.

Anschließend sollte via http://IPADRESSE/admin – also z.B. http://10.44.44.2/admin – das Webinterface von Pi-hole aufgerufen werden können. Mit dem im Schritt 5 notierten Passwort, kann man sich nun bereits dort anmelden.

Schritt 7: Router konfigurieren (FRITZ!Box)

Nun muss der Router im Netzwerk so eingestellt werden, dass er per DHCP die Adresse des Raspberry Pi mit installierem Pi-hole an die Clients im Netzwerk übermittelt. In der FRITZ!box geht das unter „Heimnetz” → „Netzwerk” → „Netzwerkeinstellungen” → „IP-Adressen” und dann unter „IPv4-Adressen” bzw. „IPv6-Adressen”. Bei IPv4 muss in das Feld „Lokaler DNS-Server” jeweils die v4-Adresse des Raspberry eingetragen werden – also beispielsweise 10.44.44.2 wenn wir beim o.g. Beispiel bleiben.

Bei IPv6 ist es allerdings etwas komplizierter: Da werden nämlich normalerweise keine statischen Adressen vergeben, sondern die Clients generieren die v6-Adressen selber aus einem vom Provider vorgegebenen Präfix. In der FRITZ!Box kann man aber auf s.g. „Unique local address”, kurz ULA, umstellen – dann bestimmt der Router den Präfix für lokale (!) v6-Adressen. Wie man das Schritt für Schritt in der FRITZ!Box und im Pi-hole einstellt, beschreibt sehr anschaulich dieser Artikel: Pi-Hole – IPv6 und die Fritz!Box.
Executive summary: Man sagt der FRITZ!Box, dass Sie ULAs erzwingen und welchen Präfix sie dafür verwenden soll; dann schaut man auf dem Raspberry nach, welche Adresse er (nach einem Reboot) bekommen hat und trägt diese sowohl in der Konfigurationsdatei von Pi-hole als auch in der FRITZ!Box als IPv6-DNS-Server fest. Und dann sagt man der FRITZ!Box noch, dass Sie im v6-Netz per DHCP nur den DNS-Server bekanntgeben soll.

ULAs sind zwar eigentlich nicht so geil (weil dann wieder NAT stattfinden muss) aber verhindern, dass sich die v6-Adresse des Raspberry Pis ändert wenn der Provider seinen Präfix ändert. Somit erzeugt man quasi, wenn ich es richtig verstanden habe, etwas mit statischen IPv4-Adressen Vergleichbares in IPv6.

Auf anderen Routern ist das etwas anders aber auch dort sollte man (hoffentlich) die entsprechenden Einstellmöglichkeiten finden.

Schritt 8: Testen

Nachdem jetzt alles vorbereitet ist, geht es ans Testen. Dazu am besten mal einen Test-Rechner im Netz kurz offline schalten (oder den DHCP-Lease erneuern), damit dieser die geänderten Daten vom Router zugespielt bekommt. Danach einfach mal eine werbe- und trackinglastige Website aufrufen (da eignen sich insbesondere Websites von Zeitungen) und schauen, ob im Webinterface von Pi-hole Anfragen aufgezeichnet (und geblockt) werden.

Schritt 9: Standard-SSH-Passwort des Raspberry Pi ändern

Da die Standard-SSH-Zugangsdaten für Raspberry Pi natürlich ein Sicherheitsrisiko darstellen, sollte zumindest das Passwort noch geändert werden. Dazu wieder per SSH verbinden (siehe Schritt 4, jedoch jetzt mit der neuen IP-Adresse) und mit dem Befehl passwd ein neues Passwort vergeben.

Schritt 10: Netzinterne Privatsphäre verbessern

Da Pi-hole in der Grundkonfiguration jede Anfrage von jedem Client loggt – inkl. des angefragten Hostnamens – sollten noch ein paar Privatsphäre-Anpassungen vorgenommen werden. Schließlich soll Pi-hole nicht der Überwachung sondern dem Schutz dienen.
Hier habe ich zum einem im Webinterface von Pi-hole unter „Settings” → „Privacy” das „DNS resolver privacy level” auf „Hide domains: Display and store all domains as „hidden“” eingestellt. Damit werden zwar noch die Clients geloggt (was ich sinnvoll finde, um zu schauen welche Geräte z.B. auch während der Nacht und in meiner Abwesenheit im Netz aktiv sind) ABER nicht mehr, welche Hostnamen / Domains sie abfragen. Diese Einstellung hat allerdings nur Einfluss auf das Webinterface, auf Dateiebene loggt Pi-hole weiterhin sämtliche Anfragen nach /var/log/pihole.log. Aber auch das lässt sich abschalten – und zwar wieder per SSH mit folgendem Befehl: sudo pihole logging off

Eine Nebenwirkung

Da nun Pi-hole als DNS-Server im Netz fungiert und nicht mehr der Router – ist dieser nicht mehr über seinen früheren Hostnamen erreichbar (also z.B. fritz.box oder speedport.ip). Das lässt sich aber beheben: Hierzu loggt man sich in das Webinterface von Pi-hole ein (http://IPADRESSE/admin) und setzt unter „Local DNS Records” den entsprechenden Eintrag manuell neu. In meinem Bespiel kommt da also ins Feld „Domain” fritz.box und ins Feld „IP Adress” die IP-Adresse des Routers, hier beispielhaft die 10.44.44.1.

Jugenschutz mit Pi-hole

Ich hatte ja eingangs geschrieben, dass ich die Pi-hole-Installation auch für Jugenschutz-Maßnahmen in meinem Heimnetz nutzen möchte. Aktuell habe ich die dafür nötigen Erweiterungen noch nicht vorgenommen, da meine Kids eh noch nicht allein im Netz unterwegs sind. Aber mit Pi-hole ist die Basis für entsprechende Inhalte-Einschränkungen vorhanden – dieses Youtube-Video von Sempervideo erklärt, wie man das macht. Allerdings, das möchte ich nicht unerwähnt lassen, ist das natürlich kein wirksamer Schutz bzw. keine wirksame Sperre für technisch affine Kids, da man den per DHCP vom Router benannten DNS-Server (den Raspberry Pi mit Pi-hole) mittels manuellen Eintrag in den Netzwerkeinstellungen des Endgerätes übergehen kann. Aber eine Zeit lang wird das vermutlich reichen.

Fazit

Da der Raspberry Pi mit Pi-hole erst neu in meinem Netzwerk ist, kann ich noch nicht sagen wie gut oder wie schlecht das alles im Alltag funktioniert. Was die technische Basis angeht, so mache ich mir da wenig Sorgen. Aber ich kann mir vorstellen, dass werbefinanzierte Websites und Apps solche Eingriffe in deren Monetarisierungsstrategie nicht gut finden und ihren Dienst versagen. Sites und Apps die mir wichtig sind, kann ich dann jedoch in Pi-hole manuell auf die Whitelist setzen. Wie sehr das im Alltag nervt, wird sich zeigen.

Die Installation des Raspberry Pi OS und der Pi-hole Software hat jedoch problemlos funktioniert, der Pi ist stromsparend und günstig zu haben – von daher auf jeden Fall meine Empfehlung.

15 Kommentare Schreibe einen Kommentar

  1. Vorschlag für Schritt 7 für IPv6
    Statt auf ULA umzustellen kann ruhig der Präfix der Providers weiter genutzt werden.
    Man verwendet statt der globalen IPv6 Adresse der FritzBox die LinkLocal Adresse beginnend mit fe80::

    • Hallo Ralf,

      vielen Dank für Deinen Kommentar und den damit verbundenen Vorschlag!
      Das wäre tatsächlich die elegantere Lösung aber ich hatte bei der Recherche zu diesem Thema, gelesen dass man die Link-Local-Adressen lieber nicht verwenden sollte da sich diese – in Abhängigkeit von Betriebsystem- bzw. Treiber-Version auch mal ändern können, also nicht „unique“ sind. Hast Du dazu nähere Kenntnisse?

      Beste Grüße
      André

  2. Hallo und Danke für deine Anleitung/ HowTo.

    Kann man im Heimischen Netzwerk Geräte am PiHole vorbei an der Fritzbox weiterlaufen lassen.
    Beispiel.
    MacBook soll direkt/ ganz normal über die Fritzbox in das WWW.
    Der SmartTV über die PiHole.
    ?

    Danke.

    • Hallo Thomas,

      Du könntest am MacBook den DNS-Server manuell festlegen und dort die IP-Adresse der Fitzbox angeben. Das wird natürlich zu Problemen führen, wenn Dein MacBook mal in einem anderen Netz ist.

      Wenn es Dir nur darum geht, dass das MacBook das ungefilterte Internet erhält, ist es komfortabler das Gerät in Pihole von der Filterung auszuschließen. Hab’s jetzt gerade nicht vor mir aber das geht dort jedenfalls.

      Beste Grüße
      André

  3. Hey, Danke für den Blogbeitrag!

    Ich habe versucht hiermit alles einzurichten, allerdings sind bei mir an ein paar Stellen Probleme aufgetreten.

    Ich habe einen RPi3b+ und mein Router ist der Technicolor 7200u.
    Gibt es einen Trick um den Pi eine statische IP zu geben? Muss das im Router geschehen oder in den Netzwerkeinstellungen des Pi? Kann es sein, dass nicht jeder Router in der Lage ist die hier benötigten Einstellungen vor zu nehmen?
    Bin bereits am überlegen mir einen neuen zu besorgen und nicht das Standard Unitymedia-Ding zu verwenden.

    Beste Grüße,
    Sam

    • Hallo Sam,

      normalerweise wird bei der Installation von Pi-hole nach der IP-Adresse gefragt. War bei mir zumindest so. Wenn Du diesen Schritt verpasst hast, kann man aber wohl via SSH mit dem Befehl pihole -r eine Neukonfiguration vornehmen. Habe ich allerdings nicht getestet. Bei manchen Routern – etwa in einer Fritzbox – kann man auch die automatische Vergabe von IP-Adressen an Geräte per DHCP so konfigurieren, dass Gerät X immer die gleiche IP-Adresse bekommt. Dann hat man, solange der Router nicht getauscht wird, quasi eine statische IP-Adresse ohne sie im Endgerät selbst zu konfigurieren.

      Was die DNS-Einstellung im Router angeht, so ist es tatsächlich möglich dass das bei Dir nicht einstellbar ist. Ich kenne den Technicolor 7200u nicht aber gerade die vom Provider bereitgestellten Geräte sind häufig limitiert. Laut diesem Forum-Thread scheint es aber wohl doch zu gehen (Grundeinstellungen –> Lokales Netzwerk)

      Beste Grüße
      André

  4. Hallo,
    folgende Fragen kamen bei mir durch deine tolle Anleitung auf:
    Schritt 2: SSH aktivieren

    “ Hierzu muss lediglich eine (leere) Datei mit dem Namen „ssh” im Root-Verzeichnis der MicroSD-Karte abgelegt werden“ – was für eine leere Datei? ssh.txt?
    – Ich meine es muss auf der Boot-Partition einfach nur eine Datei ohne Endung sein, also z.B. nur: ssh (unter Ubuntu im Dateimanager: Datei>Dokument anlegen)
    Vielleicht könntest Du das noch in Deiner tollen Anleitung ergänzen.

  5. Hi,
    vielen Dank für Deine suuuper Anleitung!
    Eine Bitte noch: Wenn ich das richtig sehe, ist es notwendig Pi-hole regelmäßig zu aktualisieren. Wie machst Du das?

  6. Ich habe zwei Fragen (Probleme):
    – nach der Installation des Systems auf der SD-Karte sehe ich keine boot-partition. SSH einfach in das home-verzeichnis installieren oder in das overlays?
    – wie komme ich denn anschließend per ssh von einem anderen Rechner ins rasberry. Das Ding muss doch erstmal fürs wlan konfiguriert sein, also irgendwas muss doch in die config.txt händisch eingepflegt werden, oder? Gibt es da eine Anleitung zu?

    • Hallo Micha,

      ich kann auf meiner SD-Karte leider gerade nicht nachschauen (da die in Betrieb ist) aber laut Dokumentation, Punkt 3, sollte es nach der Installation auf einer leeren SD-Karte, nach dem Auswerfen und Neu-Einstecken in einen anderen Rechner, zwei Partitionen geben – wobei die kleinere die Boot-Partition ist. Dort muss die leere „ssh“ Datei hin. Ich kann mich leider jetzt nicht mehr daran erinnern, ob ich „damals“ darauf geachtet habe oder ob ich die „ssh“-Datei einfach auf die einzige mir angezeigte Partition gelegt habe. Kommt auf jeden Fall ins root Verzeichnis, nichts User-home.

      Was Deine zweite Frage angeht: In meinem Fall hängt der Pi am LAN-Kabel und ich würde das auch für den Betrieb als DNS-Server mit Pi-Hole empfehlen (DNS-Anfragen sollten ja möglichst zuverlässig und flink beantwortet werden und für diesen Zweck halte ich WLAN für ungeeignet). Somit war der Pi bei mir via DHCP direkt nach dem Verkabeln im Netzwerk und ich musste nur im Router die zugewiesene IP raussuchen (siehe Schritt 3 im Artikel). Somit kann ich leider zu WLAN keine Angabe aus eigener Erfahrung machen. Laut der Dokumentation zu WLAN kann man WLAN über die Kommandozeile konfigurieren aber dafür musst Du ja wiederum erstmal per SSH auf den Pi. Somit wirst Du vermutlich nicht darum kommen, den Pi zumindest vorübergehend mal ans Kabel zu hängen.

      Beste Grüße
      André

      • danke. ich bin übrigens ein anderer Micha.
        Es hat geklappt mit ssh in der einzigen Partition zu erstellen (aber der trick wäre wohl auch mit dem Stecken der sd-Karte in einen anderen Rechner möglich).
        Ich habe in den weiten des webs noch eine Anleitung gefunden, wie man einfach in einer config-Datei tatsächlich seine wifi-Daten eingibt und die Verbindung zum Router tatsächlich hergestellt wird. Ob es gut funktioniert, werde ich sehen, sonst geht er an den LAN mit Verbindungskabel.

Schreibe einen Kommentar

Personenbezogene Daten interessieren mich nicht – daher ist die Angabe von Name und E-Mail-Adresse freiwillig. Jedoch wird jeder Kommentar von mir geprüft, bevor er freigeschalten wird.