Der Pi-hole ist ein Filter, der Werbung oder Tracker direkt im lokalen Netzwerk blockt. Dabei fungiert Pihole als DNS-Server. Hinter jeder Domain-Adresse verbirgt sich ja eine IP-Adresse und im Domain Name System (DNS) sind diese Verknüpfungen hinterlegt. Beim Aufruf einer Website fragt der Router also zunächst diese Informationen bei einem öffentlichen DNS-Server ab und gibt diese an den Browser zurück, damit dieser dann den Webserver kontaktieren kann. Meist ist das der DNS-Server des Zugangsproviders, sehr gerne wird aber auch der Google-DNS 8.8.8.8 verwendet. Hierbei muss man sich natürlich aus Datenschutzgründen selbst fragen, ob Google jede abgefragte Adresse zu wissen bekommen soll… ;-) Genauso funktioniert die DNS-Auflösung natürlich bei allen anderen Domain-/IP basierten Internet-Anwendungen.
Der Pi-hole übernimmt nun die Aufgabe der DNS-Auflösung und gleicht vor der Weitergabe an die öffentlichen DNS-Server die anforderte Domain-Adresse mit den internen Filterlisten ab. Aktuell sind in den Filterlisten mehr als 130.000 Domainnamen eingetragen, die Werbung ausliefern oder den User/das Gerät tracken. Steht eine Domain auf einer der Filterlisten, dann gibt der Pi-hole einfach seine eigene lokale IP-Adresse zurück. Pi-hole liefert dann auf Anfrage eine leere Antwort. Anstelle eines Werbebanners erscheint somit auf der Website einfach gar nichts.
Der Pi-hole ist somit ein kleiner DNS-Server, der einfach auf einem Raspberry Pi installiert wird und mittels Filterlisten Werbung und Tracker blockiert. Im Router muss man dazu einfach nur die lokalen IP-Adresse vom Pi-hole als DNS-Server eintragen.
Voraussetzungen
- Raspian OS Bullseye
- eingerichteter Apache2 Webserver (2.4.18 oder höher)
Konsolenbefehle
curl -sSL https://install.pi-hole.net | bash
– Pi-hole installieenpihole uninstall
– deinstallierenpihole -up
– updatenpihole version
– Version anzeigen
Pi-hole installieren
curl -sSL https://install.pi-hole.net | bash
- der Raspberry benötigt eine feste IP-Adresse, je nach eigenem Setting ist dies während der Installation auszuwählen / zu ändern
- als Upstream-DNS kann die IP-Adresse des eigenen Router eingeben werden (Custom)
- Admin Web interface installieren, um Pihole später über den Browser verwalten zu können
- falls kein Apache in Betrieb ist, lighttpd als Webserver installieren, ansonsten nicht auswählen
- query logging nicht aktivieren (kann später nachgeholt werden)
- privacy mode for FTL – gibt an welche Angaben der Verbindungen später im Logfile zu sehen sind – je nach Bedürfnis, bei mir Show everything
- während der Installation wird das Passwort angezeigt, mit dem man sich bei Pi-hole einloggen kann, verpasst man diese Angabe oder wird sie nicht eingeblendet, kann das Passwort nach der Installation über
sudo pihole -a -p
neu vergeben werden
Apache2 einrichten
- den Pihole Benutzer der Webservergruppe hinzufügen (für Apache2)
sudo usermod -a -G pihole www-data
- config-File anlegen
sudo nano /etc/apache2/sites-available/pihole.conf
- für netzwerkbeschränkten Zugriff folgende Zeilen einfügen (eigene Netzadresse anpassen)
<IfModule alias_module>
Alias /admin /var/www/html/admin
<Directory "/var/www/html/admin">
AllowOverride None
Options None
Order deny,allow
Allow from 192.168.1.0/24 localhost 127.0.0.1
#Allow from all
Deny from all
</Directory>
</IfModule>
- config aktivieren
sudo a2ensite pihole.conf
- config testen und Apache2 neu laden
sudo apachectl configtest && sudo service apache2 reload
Pihole aufrufen
http(s)://IP-Adresse_RPi4/admin
Konfiguration
Adlists
- https://www.github.developerdan.com/hosts/lists/ads-and-tracking-extended.txt – Adds & Tracking
- https://www.github.developerdan.com/hosts/lists/dating-services-extended.txt – Dating Services
- https://easylist.to/easylist/easylist.txt – Browser Adds
- unter Tools – Update Gravity – Update – aktivieren
- weitere Listen unter https://firebog.net/
DNS
- Settings – DNS
- Upstream DNS Server
- Custom 1 (IPv4) – 46.182.19.48
- Upstream 2 (IPv4) – 185.95.218.42
- Custom 3 (IPv6) – 2a10:50c0::1:ff
- Custom 4 (IPv6) – 2a01:4f8:151:34aa::198
- Conditional Forwarding – eigenes lokales Netz und DHCP Server eintragen
- DNS bei Verwendung von Docker im Bridge Mode
- Interface Settings – Recommended setting von Allow only local requests auf Respond only on interface eth0 setzen, da sonst die Clients im lokalen Netzwerk nicht von Pi-hole gefiltert werden (Bridge Netzwerk hat meistens ein anderes Netz als das eigene lokale)
Probleme
- falls bei der Speicherung der Konfiguration in Pihole eine Fehlermeldung auftaucht, kann es hilfreich sein den Apache Benutzer (www-data), der Pihole Gruppe hinzuzufügen.
sudo usermod -a -G pihole www-data
- Fehlermeldung:
- pihole-FTL[549]: dnsmasq: failed to create listening socket for port 53: Address already in use
- pihole FATAL ERROR in dnsmasq core: failed to create listening socket for port 53: Die Adresse wird bereits verwendet
- PHP error (2): fsockopen(): unable to connect to 127.0.0.1:4711 (Connection refused) in /var/www/html/admin/scripts/pi-hole/php/FTL.php:47
- Fehler: DNS Proxy von ConnMan belegt den Port 53 und muss ausgeschaltet
- Fehlerbehebung: Ordner inkl. Datei anlegen
- sudo mkdir /etc/systemd/system/connman.service.d/
- sudo nano /etc/systemd/system/connman.service.d/disable_dns_proxy.conf
- u.a. Zeilen einfügen und rebooten (
sudo reboot -n
– Raspberry rebooten)
[Service]
ExecStart=
ExecStart=/usr/bin/connmand -n --nodnsproxy
Quellen
- gist.github.com – GAS85/apache2_pihole.md
- mielke.de – Mit dem Pi-hole einen Werbeblocker für das gesamte lokale Netz einrichten
- hyperblog.de – Pihole-FTL und das DNS Problem
- smarthome-training.com – Pi-Hole Docker Installation mit Portainer
- blog.berrybase.de – Pi-hole Raspberry Pi mit Docker