Zuletzt aktualisiert am 30. März 2023
Pi-Hole mit Unbound und VLANs einrichten, scheint ein großer Aufwand für dein Homelab zu sein, aber es ist nicht so schlimm, wie du vielleicht denkst und es ist es wert. Hier findest du eine Anleitung, die leicht verständlich ist.
Was ist Pi-Hole?
Pi-Hole ist ein DNS-Blocker, der nervige Ads und auch schadhafte und gefährliche Domains blockiert. Die Software wird häufig auf einem Raspberry Pi oder einem Mini-Server installiert, der als DNS-Server für das lokale Netzwerk fungiert.
Wenn ein Gerät in Ihrem Netzwerk eine Website besucht, sendet es normalerweise eine DNS-Anfrage an den von Ihrem Internetdienstanbieter bereitgestellten DNS-Server, um die IP-Adresse der Website zu ermitteln. Pi-Hole leitet diese Anfrage jedoch an sich selbst weiter, filtert alle Anfragen von Anzeigen und anderen unerwünschten Inhalten heraus und gibt nur die Anfragen weiter, die tatsächlich benötigt werden.
Pi-Hole nutzt Filterlisten, um bekannte Anzeigen und Tracker zu blockieren und bietet auch die Möglichkeit, eigene benutzerdefinierte Filter hinzuzufügen. Die Software kann auch Statistiken über die blockierten Anfragen bereitstellen, um Ihnen einen Einblick in die Menge der blockierten Anzeigen und Tracker zu geben.
Insgesamt ist Pi-Hole eine einfache und effektive Möglichkeit, um Anzeigen und Tracker im gesamten Netzwerk zu blockieren und so das Surferlebnis zu verbessern und das Laden von Seiten zu beschleunigen, sowie das Netzwerk sicherer zu machen, weil es mögliche Bedrohungen blockiert.
Installationsanleitung für Pi-Hole mit Unbound DNS
https://docs.pi-hole.net/guides/dns/unbound/
System aktualisieren
apt update
apt upgrade
reboot
Pi-Hole installieren
https://docs.pi-hole.net/main/basic-install/
curl -sSL https://install.pi-hole.net | bash
Pi-Hole updaten
pihole -up
Pi-Hole Passwort festlegen
pihole -a password
Pi-Hole Web-UI aufrufen
http://deine-Server-IP/admin/
Unbound DNS installieren
sudo apt install unbound
Unbound konfigurieren
nano /etc/unbound/unbound.conf.d/pi-hole.conf
Einfügen und speichern
server:
# If no logfile is specified, syslog is used
# logfile: "/var/log/unbound/unbound.log"
verbosity: 0
interface: 127.0.0.1
port: 5335
do-ip4: yes
do-udp: yes
do-tcp: yes
# May be set to yes if you have IPv6 connectivity
do-ip6: no
# You want to leave this to no unless you have *native* IPv6. With 6to4 and
# Terredo tunnels your web browser should favor IPv4 for the same reasons
prefer-ip6: no
# Use this only when you downloaded the list of primary root servers!
# If you use the default dns-root-data package, unbound will find it automatically
#root-hints: "/var/lib/unbound/root.hints"
# Trust glue only if it is within the server's authority
harden-glue: yes
# Require DNSSEC data for trust-anchored zones, if such data is absent, the zone becomes BOGUS
harden-dnssec-stripped: yes
# Don't use Capitalization randomization as it known to cause DNSSEC issues sometimes
# see https://discourse.pi-hole.net/t/unbound-stubby-or-dnscrypt-proxy/9378 for further details
use-caps-for-id: no
# Reduce EDNS reassembly buffer size.
# IP fragmentation is unreliable on the Internet today, and can cause
# transmission failures when large DNS messages are sent via UDP. Even
# when fragmentation does work, it may not be secure; it is theoretically
# possible to spoof parts of a fragmented DNS message, without easy
# detection at the receiving end. Recently, there was an excellent study
# >>> Defragmenting DNS - Determining the optimal maximum UDP response size for DNS <<<
# by Axel Koolhaas, and Tjeerd Slokker (https://indico.dns-oarc.net/event/36/contributions/776/)
# in collaboration with NLnet Labs explored DNS using real world data from the
# the RIPE Atlas probes and the researchers suggested different values for
# IPv4 and IPv6 and in different scenarios. They advise that servers should
# be configured to limit DNS messages sent over UDP to a size that will not
# trigger fragmentation on typical network links. DNS servers can switch
# from UDP to TCP when a DNS response is too big to fit in this limited
# buffer size. This value has also been suggested in DNS Flag Day 2020.
edns-buffer-size: 1232
# Perform prefetching of close to expired message cache entries
# This only applies to domains that have been frequently queried
prefetch: yes
# One thread should be sufficient, can be increased on beefy machines. In reality for most users running on small networks or on a single ma>
num-threads: 1
# Ensure kernel buffer is large enough to not lose messages in traffic spikes
so-rcvbuf: 1m
# Ensure privacy of local IP ranges
private-address: 192.168.1.0/24
private-address: 169.254.0.0/16
private-address: 172.16.0.0/12
private-address: 10.0.0.0/8
private-address: fd00::/8
private-address: fe80::/10
Domains von offiziellen Root-Server Internic nach Unbound aktualisieren
wget https://www.internic.net/domain/named.root -qO- | sudo tee /var/lib/unbound/root.hints
Unbound Log-Ordner anlegen
sudo mkdir -p /var/log/unbound
unbound.log file erstellen
touch /var/log/unbound/unbound.log
Berechtigungen setzen
chown unbound /var/log/unbound/unbound.log
Unbound Service neu starten
sudo service unbound restart
Automatische Updates der Domains (Root-Server / Internic) mit Script erstellen
sudo nano update_unbound_dns.sh
Script einfügen und speichern
#!/bin/bash
wget -O root.hints https://www.internic.net/domain/named.root &&
(
mv -fv root.hints /var/lib/unbound/
service unbound restart
)
Berechtigungen setzen
sudo chmod +x update_unbound_dns.sh
Script testen
./update_unbound_dns.sh
Cronjob anlegen damit Script regelmäßig automatisch ausgeführt wird
crontab -e
Zeile unten einfügen und speichern
# Pi-Hole
# Unbound Root-Server-Domains Update - jeden Sonntag um 5:00
0 5 * * 0 root /root/update_unbound_dns.sh >/dev/null 2>&1
VLANs einrichten (Optional)
nano /etc/network/interfaces
Deine VLANS und IPs anpassen – IPv6 wird deaktiviert
auto lo
iface lo inet loopback
#Standard eth0
auto eth0
allow-hotplug eth0
#Homelab
iface eth0 inet static
address 192.168.1.41/24
gateway 192.168.1.1
#Guests - VLAN 10
auto eth0.10
iface eth0.10 inet static
address 192.168.10.41/24
vlan-raw-device eth0
pre-up sysctl -w net.ipv6.conf.eth0/10.disable_ipv6=1
#IoT - VLAN 20
auto eth0.20
iface eth0.20 inet static
address 192.168.20.41/24
vlan-raw-device eth0
pre-up sysctl -w net.ipv6.conf.eth0/20.disable_ipv6=1
#Stella (Entertainment & Alexas) - VLAN 30
auto eth0.30
iface eth0.30 inet static
address 192.168.30.41/24
vlan-raw-device eth0
pre-up sysctl -w net.ipv6.conf.eth0/30.disable_ipv6=1
reboot
IP Adressen kontrollieren
ip address show eth0
ip address show eth0.10
ip address show eth0.20
ip address show eth0.30
Pi-Hole Settings
In Pi-Hole muss Permit all Origins eingestellt werden, damit VLAN-Netze funktionieren
Damit Unbound in Pi-Hole funktioniert, muss unter Upstream-Servers 127.0.0.1#5335 eingestellt werden
Ebensfalls unter Settings muss noch Conditional Forwarding aktiviert werden – achte auf die korrekten IPs
Firewall gegebenfalls anpassen und Port 5335 (Unbound DNS) und optional Port 53 (DNS) erlauben.
Verbinde am besten deinen Router mit Pi-Hole
So musst du nicht bei jeden einzelnen Gerät, die DNS-Einstellungen ändern, sondern machst es nur einmal am Router.
So geht es bei mir mit TP-Link Omada:
Einstellungen – Netzwerk – LAN – DNS Server – manuell:
Server-IP des Pi-Hole Servers eintragen: 192.168.1.XX
Router-Anleitungen: https://discourse.pi-hole.net/t/how-do-i-configure-my-devices-to-use-pi-hole-as-their-dns-server/245
Pi-Hole Blocklists 2023
Hier findest du einige Blockierlisten für Pi-Hole
https://www.technoy.de/lists/blocklists-fuer-pihole/
https://github.com/blocklistproject/Lists
https://avoidthehack.com/best-pihole-blocklists
https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts
https://ninja-ide.org/pihole-blocklists-2022/
https://github.com/topics/pihole-blocklists
https://github.com/RPiList/specials/blob/master/Blocklisten.md
Pi-Hole Whitelist Domains
Manchmal wird ein Service geblockt, den du benötigst – hier findest du eine Liste gängiger Services, die du freischalten kannst
https://discourse.pi-hole.net/t/commonly-whitelisted-domains/212
pihole -w domain.net
Testen nicht vergessen und dich mit deinen Familienmitgliedern gutstellen, falls etwas nicht klappt. Viel Erfolg!