Mit dem Pi-hole kann man Werbeanzeigen auf allen Heimnetzgeräten wie Laptop, Smartphone usw. ausschalten. Dazu verwendet Pi-hole sogenannte Blocklists aus verschiedenen Quellen. Man kann auch eigene Blocklists hinzufügen oder entfernen.
In dieser Anleitung werde ich euch zeigen wie ihr Pi-Hole auf einem Debian System installiert. Die Installation ist auch mit anderen Linux-Distributionen wie Ubuntu oder einen Raspberry Pi möglich.
LXC Container für den Pi-hole erstellen
Erstellt einen Debian LXC Container mit einer Festplattengröße von 8 GB, man kann auch weniger nehmen, je nachdem wie viel Kapazität man hat. Im CPU-Reiter unter Cores kann man 1 Kern eintragen, das reicht voll kommend aus. Als Arbeitsspeicher genügen 512 MB. Im Netzwerk-Tab müsst ihr eine statische IP vergeben. Die Einstellungen im DNS-Tab kann man so belassen. Als Nächstes starten wir unseren LXC Container.
SSH Zugang für root freigeben
Damit wir uns mit Putty auf unseren Container einloggen können, müssen wir uns zuerst über die Konsole von der Proxmox-Weboberfläche mit root einloggen. Nachdem wir das gemacht haben editieren wir die sshd_config mit folgenden Befehl.
nano /etc/ssh/sshd_config
Als Nächstes suchen wir uns die Zeile #PermitRootLogin prohibit-password
und ändern die in PermitRootLogin yes
um. (Die # vorne muss auch weg). Das ganze speichern wir mit STRG+O und Enter, anschließend drücken wir STRG+X, um den Editor zu schließen.
Nun müssen wir den SSH Service Neustarten damit die Änderungen wirksam werden. Das tun wir mit folgendem Befehl
service ssh restart
Container updaten und benötigte Pakete installieren
Nachdem wir nun Root Zugang haben, loggen wir uns mit Putty ein und bringen das System auf den aktuellsten Stand mit folgendem Befehl.
apt update && apt upgrade -y
Für die Installation benötigen wir das Tool curl. Das installieren wir mit folgendem Befehl.
apt-get install curl -y
Und schon kann die eigentliche Installation von Pi-hole beginnen. Dazu führen wir folgenden Befehl aus.
curl -sSL https://install.pi-hole.net | bash
Das dauert nun etwas, je nachdem wie schnell euer Server ist. Ihr werdet nun von einem Installationsmenü begrüßt. Hier könnt ihr entspannt alles so belassen wie es ist und alles mit Enter bestätigen. Die Installation von Pi-Hole ist nun erledigt.
Admin Passwort vergeben
Um das vorgegebene Passwort vom Pi-hole zu ändern, müssen wir folgenden Befehl eingeben
pihole -a -p
Nun das gewünschte Kennwort eingeben und mit Enter bestätigen. (Das Kennwort wird nicht angezeigt). Jetzt noch einmal eingeben und bestätigen. Fertig.
Pi-hole Webinterface aufrufen
Als Nächstes können wir die Weboberfläche von Pi-hole aufrufen. Die URL dazu lautet wie folgt.
http://ip-vom-pihole/admin
Unter den Menüpunkt Login können wir uns mit dem von soeben erstellten Passwort einloggen.
DNS over HTTPS (DoH) installieren (optional)
Pi-hole spricht nach der Installation kein DNS over HTTPS (DoH). Dazu muss man eine Software von Cloudflare installieren, das in wenigen schritten installiert wird.
cd /usr/local/bin
sudo wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo apt-get install ./cloudflared-linux-amd64.deb
cloudflared -v
Nun müssen wir einen neuen unprivilegierten Benutzer erstellen, der den DNS-Daemon ausführt.
sudo useradd -s /usr/sbin/nologin -r -M cloudflared
Nun müssen wir die Standard-Optionen noch in die Konfigurationsdatei von cloudflared eintragen.
nano /etc/default/cloudflared
Dort folgendes eintragen und speichern.
# Commandline args for cloudflared
CLOUDFLARED_OPTS=--port 5053 --upstream https://1.1.1.1/dns-query --upstream https://1.0.0.1/dns-query
Jetzt müssen noch die Rechte und Besitzer angepasst werden.
sudo chmod +x /usr/local/bin/cloudflared
sudo chown cloudflared:cloudflared /etc/default/cloudflared
sudo chown cloudflared:cloudflared /usr/local/bin/cloudflared
Als Nächstes erstellen wir den Service für SystemD.
nano /lib/systemd/system/cloudflared.service
Dort fügen wir Folgendes ein.
[Unit]
Description=cloudflared DNS over HTTPS proxy
After=syslog.target network-online.target
[Service]
Type=simple
User=cloudflared
EnvironmentFile=/etc/default/cloudflared
ExecStart=/usr/local/bin/cloudflared proxy-dns $CLOUDFLARED_OPTS
Restart=on-failure
RestartSec=10
KillMode=process
[Install]
WantedBy=multi-user.target
Nun starten wir den eben erstellen Dienst und passen es für den Autostart ein, damit er nach jedem Bootvorgang automatisch startet.
sudo systemctl enable cloudflared
sudo systemctl start cloudflared
sudo systemctl status cloudflared
Jetzt können wir das ganze testen ob auch alles sauber funktioniert.
dig @127.0.0.1 -p 5053 google.com
So müsste die Ausgabe aussehen.
; <<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> @127.0.0.1 -p 5053 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48325
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1452
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 286 IN A 172.217.16.142
;; Query time: 17 msec
;; SERVER: 127.0.0.1#5053(127.0.0.1)
;; WHEN: Fri Apr 10 08:08:55 UTC 2020
;; MSG SIZE rcvd: 65
DNS over TLS (DoT) über die Fritz!Box (optional)
Wer sich für lieber für die DNS over TLS (DoT) entscheidet, kann das in der Fritz!Box Oberfläche unter Zugangsdaten
> DNS-Server
tun. Dazu tragen wir unter Auflösungsnamen der DNS-Server
folgendes ein und speichern es:
1dot1dot1dot1.cloudflare-dns.com
one.one.one.one
Pi-hole richtig konfigurieren
Wir rufen unser Pi-hole Webinterface auf und loggen uns ein. Dann wechseln wir in die Settings
und anschließend rufen wir den Tab DNS
auf. Jetzt deaktivieren wir alle voreingestellten DNS-Server und tragen unter Custom 1(IPv4)
folgendes ein, wer DoH nutzt trägt folgendes ein 127.0.0.1#5053
, wer keinen DoH nutzt trägt folgendes ein 127.0.0.1#53
. Wir setzen noch einen hacken bei Use DNSSEC
ein.
Wir scrollen weiter unten und leiten die Fritz!Box (fritz.box) zum Pi-hole weiter.
DNS auf der Fritzbox anpassen
Nun müssen wir unserer Fritzbox noch die IP vom Pi-hole mitteilen, damit alle DNS abfragen über den Pi-hole laufen können. Dazu rufen wir unsere Fritzbox-Weboberfläche auf mit fritz.box
.
Nachdem wir uns eingeloggt haben gehen wir unter Heimnetz
> Netzwerk
> Netzwerkeinstellungen
und klicken auf IPv4-Adressen
. Unter dem Punkt Lokaler DNS-Server:
geben wir die IP vom Pi-hole und bestätigen das ganze mit OK und anschließend mit einem klick auf die DECT-Taste in der Fritzbox.
Wir bleiben weiterhin auf der Weboberfläche von der Fritz!Box und klicken auf Internet
dann in den Tab DNS-Server
und tragen in den unteren zwei Feldern die IP vom Pi-hole ein.
Nun müssen wir noch einen Filter erstellen. Dazu klicken wir auf Internet
dann auf Filter
anschließend auf Listen
und weiter unten auf Netzwerkanwendung hinzufügen
. Wir vergeben einen beliebigen Namen, ich habe es pihole-dns genannt und tragen als TCP den Port 53 sowie UDP ebenfalls Port 53.
Achtung:
Auch hier müsst Ihr den Port entsprechend anpassen, mit DoH 5053 ohne DoH 53. Im Unteren Beispiel wurde es ohne DoH eingetragen.
Im Fritz!Box Menü klicken wir auf Internet
, dann auf Filter
, dann auf Zugangsprofile
und bearbeiten das Profil Standard
. Dort tragen wir unter dem Punkt Gesperrte Netzwerkanwendungen
unsere soeben erstellte Filterliste pihole-dns ein.
Als letztes gehen wir auf Internet
, dann auf Filter
und dann auf Kindersicherung
. wir wechseln das Zugangsprofil von unserem Pi-hole auf unbeschränkt
um. Den Rest können wir auf Standard
lassen.
DNS-Cache löschen
Da ihr nun einen neuen DNS-Server habt, müsst ihr die alten DNS-Daten vom Cache löschen. Wie ihr das macht, habe ich in diesem Beitrag für euch erklärt.
Nun sind wir mit der Installation und Einrichtung vom Pi-hole fertig.
Kleiner Tipp: Optional kann man sich das Add-on für Firefox installieren. Damit kann man temporär den Pi-hole über den Browser für z.b. 10 Minuten deaktivieren.
Mann muss dazu den API-Key eintragen, diesen findet man in der Pi-hole Weboberfläche unter Settings
, API / Web interface
und dann den Button Show API token
.
Ich schätze deine Zeit und dein Interesse an meiner Website. Falls du weitere Fragen hast oder zusätzliche Informationen benötigst, zögere bitte nicht, mich zu kontaktieren. Ich freue mich, dich bei deinem Besuch auf Sakis-Tech zu unterstützen.
Mit freundlichen Grüßen
Hi,
super Anleitung für die LXC Konfiguration!
Ich hatte jedoch Probleme es ohne DoH zum Laufen zu bringen. Kann es sein, dass du im weiteren Verlauf der Anleitung davon ausgehst, das DoH auf jeden Fall genutzt wird?
Denn soweit ich das sehe, wird der Eintrag „127.0.0.1#5053“ im Pi-Hole ohne DoH nicht laufen, oder?
Zudem irritiert mich, dass du hier bei der Netzwerkanwendung die Quelle auf Port 53 setzt und das Ziel auf beliebig.
Die Pi-Hole Doku macht es genau anders herum:
https://docs.pi-hole.net/routers/fritzbox-de/#optional-erhohung-der-prioritat-von-dns-anfragen
Dort ist das Ziel die 53 und die Quelle beliebig.
Uuuund, als Ergänzung:
Es lohnt sich ggf. die erstellte Netzwerkanwendung als Echtzeitanwendung in der Fritzbox zu hinterlegen.
Hallo Manuel,
Wer DoH nutzt muss
127.0.0.1#5053
eintragen, diejenigen die kein DoH nutzen müssen127.0.0.1#53
eintragen.danke für den Hinweis. Ich habe den Beitrag dementsprechend angepasst.
Ich bekomme diesen Fehler, wenn ich die Befehle ausführe:
-bash: /usr/local/bin/cloudflared: cannot execute binary file: Exec format error
Hallo Sebastian,
Danke für den Hinweis. Ich habe die Befehle aktualisiert, jetzt sollte es klappen.
LG
Sakis
Welche Datei muß ich jetzt wo runterladen?
Die URL „wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.tgz“ ist leider nicht mehr gültig.
Hallo Christian,
danke für den Hinweis. Ich habe den Beitrag aktualisiert.
LG
Saki
Ich habe schon ganz zu Beginn ein Problem:
curl/ping auf pi-hole.net ergeben:
curl: (7) Couldn’t connect to server bzw. connect: Network is unreachable
Ein ping auf google.de funktioniert jedoch (scheinbar via IPV6).
Kommentar bearbeitet:
if I change from static to dynamic IPV4 curl works normally.
Vielen Dank für die super Anleitung!
Kleine Frage bzw. Ergänzung: In meiner Fritz!Box ist providerseitig IPv6 aktiviert und ich hatte das Problem, dass meine Clients alle blockierten Seiten dann einfach via IPv6 umgangen haben, d. h. Pi-hole umgangen wurde.
Zu diesem Zweck sollte man wohl noch in der Einstellung „DNSv6-Server im Heimnetz“ auf die IPv6-Adresse des Pi-hole setzen, oder bietet sich eine bessere Variante an?
(IPv6 deaktivieren scheidet aus Gründen aus)
Hallo Sascha,
leider verwende ich keine IPv6, daher kann ich dir keine konkrete Antwort geben.
Aber ich habe hier eine gute Anleitung gefunden, vielleicht hilft sie dir weiter.
Tipp: Wenn du bei der Pi-Hole Installation bereits IPv6 ausgewählt hast, dann kannst du den „Punkt 1“ und „Punkt 3“ überspringen.
Kannst ja mal kurz Bescheid geben, falls es funktioniert hat.
LG
Sakis
Hallo,
wofür genau erstellst du den DNS Filter in der Fritz Box? Ich verstehe den Grund nicht.
Gefiltert wird doch in der Applikation…
Ansonsten super anleitung
grüße
Hallo, mathis
in diesem Artikel habe ich die Fritz!Box so konfiguriert, dass
LG
sakis-tech
Vielen Dank für den erstklassigen Artikel sehr gut zu lesen und zum Nachbau empfohlen.
Der Test mit
dig @127.0.0.1 -p 5053 google.com
funktioniert bei mir allerdings nicht, aber Pi-Hole erkennt alle Clients und macht genau, was er soll.zuletzt von sakis-tech bearbeitet.
Hallo alkaline,
freut mich, dass dir mein Artikel gefällt.
Ich habe Pi-Hole zum Testen auf einem neuen LXC-Container installiert und es funktioniert einwandfrei.
Verwendest du evtl. nur IPv4? Wenn ja, dann solltest du IPv6 deaktivieren und es erneut versuchen.
LG
Sakis
Der Test geht jetzt auch, Copy & Paste Fehler.
Hallo Alkaline,
Super, freut mich das es klappt.
Damit man besser per „Copy-and-paste“ arbeiten kann, habe ich in den „Code-Bereich“ eine Markierungsfarbe eingefügt.
Damit sollte es keine Copy-and-Paste Fehler mehr geben.
Danke für den Gedankenanstoß.
LG
Sakis
Hallo,
super Anleitung. Danke. Ich glaube jedoch, dass da ein kleiner Befehl fehlt:
vor
https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-amd64.tgz
fehlt daswget
.Hallo Hawi,
danke für den Hinweis.
Ich habe den Fehler korrigiert.
LG
Sakis