Pi-Hole Unbound VLANs

Pi-Hole mit Unbound und VLANs einrichten

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

Pi-Hole DNS Einstellungen

Ebensfalls unter Settings muss noch Conditional Forwarding aktiviert werden – achte auf die korrekten IPs

Pi-Hole Conditional Forwarding

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

https://docs.pi-hole.net/guides/misc/whitelist-blacklist/ 

Testen nicht vergessen und dich mit deinen Familienmitgliedern gutstellen, falls etwas nicht klappt. Viel Erfolg!

Hallo. Ich bin Thomas.

Hallo. Ich bin Thomas.

Danke, dass du dir die Zeit nimmst diesen Artikel zu lesen.
Wenn du Unterstützung brauchst, oder Fragen zu meinen Produkten & Services hast, dann schreib mir.

Kostenfreie Erstberatung