Habt ihr genug von flackernden Werbebannern die mehr Raum einnehmen als der eigentliche Seiteninhalt oder gefühlte 100 Ad-Server die beim Öffnen einer einzigen Webseite kontaktiert werden? Adblock & Co. sind eine gute Sache, allerdings auf den Webbrowser beschränkt auf dem das Plugin installiert ist. Android oder iOS waren da meistens außen vor. Auf der Suche nach einem weiteren Beschäftigungsfeld für meinen Raspberry Pi bin ich auf ein nettes Projekt gestoßen!
Das ist ein Update des ursprünglichen Artikels da sich ein paar wichtige Dinge geändert haben und ich auch einen DNS-Loop eingebaut hatte…
Installation
Mit einer Zeile ist er auf dem Raspberry Pi installiert: der Werbeblocker Pi-hole
curl -L https://install.pi-hole.net | bash
Während der Installation wird die Konfiguration von Pi-hole durch eine grafische Oberfläche erleichtert. Die meisten Voreinstellungen kann man ohne Änderung abnicken.
Nach erfolgreicher Installation ist die Weboberfläche des Pi-hole unter der Adresse http://<servername>:<port>/admin zu erreichen.
Wichtige Einstellungen
Unter anderem ist als DNS-Server der von Google voreingestellt. Diese Einstellung kann nach Abschluss der Installation nachträglich in der Pi-hole-Oberfläche angepasst werden. Dazu dort einloggen und unter Settings -> DNS einen anderen voreingestellten DNS auswählen oder auf der rechten Seite einen frei wählbaren DNS-Server eintragen. Natürlich kann die Einstellung auch auf dem Google-DNS belassen werden.
Neben der Weboberfläche können die Einstellungen auch über die Konsole in der Konfigurationsdatei mit
sudo vim /etc/dnsmasq.d/01-pihole.conf
angepasst werden.
Pi-hole als DNS im eigenen Netzwerk nutzen
Damit nun der Pi-hole auch netzwerkweit als DNS genutzt wird, muss z.B. in der FritzBox unter “Internet-> Zugangsdaten” im Reiter “DNS-Server” noch die IP des Pi-hole-Rechners als lokaler DNS-Server eintragen werden. Hier im Bild für IPv4 und IPv6 dargestellt. Die IPv6-Adresse des Pi-hole findet ihr u.a. auf der Weboberfläche unter Settings im Reiter “System“.
Lokale Namensauflösung
Die meisten werden Pi-hole nicht als DHCP-Server nutzen, sondern DHCP dem DSL-Router überlassen. Damit der Pi-hole auch die Namensauflösung im lokalen Netzwerk kennt, muss der lokale Router unter Settings->DNS im Breich “Conditional Forwarding” eingetragen werden. Im Bild ist die entsprechende Konfiguration für eine FritzBox zu sehen. Nun sollte auch die Namensauflösung im lokalen Netzwerk wieder funktionieren.
Geschafft!
Soviel zur Installation und Konfiguration von Pi-hole! Es kann ein paar Minuten dauern bis die Hostnamen im lokalen Netz wieder aufgelöst werden. Ab nun laufen die DNS-Anfragen aller im Heimnetz eingebundenen Geräte (LAN oder WLAN) über den Pi-hole und alles ist werbefrei!
Portkonflikt
Die Weboberfläche von Pi-hole erreicht man standardmäßig über den HTTP-Port 80. Da bei mir auf dem Raspberry aber parallel noch ein Apache werkelt, konnt der lighttpd nicht auf Port 80 gestartet werden. Eine entsprechende Fehlermeldung kam am Ende der Installation. Daher musste ich den Port des lighttpd noch ändern. Dazu die Konfiguration des lighttpd mit
sudo vim /etc/lighttpd/lighttpd.conf
editieren (nach “80” suchen und den Wert hinter server.port auf den gewünschten Port stellen). Anschliessend den lighttpd-Service mit folgendem Befehl neu starten:
sudo service lighttpd restart
Leider muss diese Änderung aktuell nach jedem Update gemacht werden da die Konfiguration standardmäßig wieder den Port 80 nutzt.
Daten per JSON abfragen
Verschiedene der in der Adminoberfläche angezeigten Information können auch sehr einfach über eine JSON-Schnittstelle abgefragt werden. Die Adresse ist http://<servername>:<port>/admin/api.php. Hier ein kurzes Beispiel um diese Abfrage in PHP zu realsieren und ein Screenshot der Implementierung in meiner Hausübersicht (links unten).
$json = file_get_contents('http://<servername>:<port>/admin/api.php'); $data = json_decode($json); print "Domains blockiert: ".$data->{'domains_being_blocked'}; print "DNS-Abfragen: ".$data->{'dns_queries_today'}; print "Blockierte Werbung: ".$data->{'ads_blocked_today'}; print "Prozentuale Werbung: ".$data->{'ads_percentage_today'};
Konsole anstatt Weboberfläche
Neben der Weboberfläche kann man auch auf der Konsole mittels pihole [option] verschiedene Funktionen aufrufen.
So kann zum Beispiel die Liste der Werbe-Domains aktualisiert werden:
pihole -g
Update des Pi-hole:
pihole -up
Zeigt alle möglichen Optionen:
pihole -h
So, und nun viel Spaß mit einem größtenteil werbefreien Internet!
Gruß
Chris
Danke, für die einfache Erklärung. Jetzt ist auch bei den Flodders Schluss mit Werbung in den Handy Apps 🙂