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

lxc pihole
LXC Container unter Proxmox

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 Putty Terminal
Putty Terminal

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

Pi-hole Weboberfläche

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.

Pi-hole richtig konfigurieren
Pi-hole richtig konfigurieren

Wir scrollen weiter unten und leiten die Fritz!Box (fritz.box) zum Pi-hole weiter.

Fritz!Box an Pi-hole weiterleiten
Fritz!Box an Pi-hole weiterleiten

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.

Fritz!Box Netzwerk einrichten
Fritz!Box Netzwerk einrichten

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.

Fritz!Box DNS-Server eintragen

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.

Fritz!Box Filter Einstellung

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.

Fritz!Box Zugangsprofil bearbeiten

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.

Fritz!Box Kindersicherung Einstellungen

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

signoff
4.9 19 Stimmen
Wie gefällt Ihnen der Artikel?
Abonnieren
Benachrichtige mich bei
17 Kommentare
Inline-Feedbacks
Alle Kommentare anzeigen
Manuel
Gast
04.04.2023 07:21

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.

Sebastian
Gast
05.10.2022 15:17

Ich bekomme diesen Fehler, wenn ich die Befehle ausführe:
-bash: /usr/local/bin/cloudflared: cannot execute binary file: Exec format error

Christian
Gast
11.02.2022 11:51

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.

Rolf Friedrich
Gast
24.10.2020 18:57

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.

Sascha H.
Gast
26.09.2020 06:38

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)

Zuletzt bearbeitet 3 Jahre zuvor by sakis-tech
mathis
Gast
13.09.2020 17:03

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

alkaline
Gast
12.09.2020 09:10

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.

Alkaline
Gast
Antwort an  sakis-tech
13.09.2020 13:48

Der Test geht jetzt auch, Copy & Paste Fehler.

Hawi
Gast
19.07.2020 08:49

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 das wget.