Pi-Hole mit Unbound betreiben

Wer seine DNS-Abfragen noch etwas beschleunigen möchte, kann sich Unbound als DNS-Resolver installieren.

Was gibt es für Vorteile?
– Wir befragen die Root-Name-Server des Internets (Was das ist, steht hier: https://en.wikipedia.org/wiki/Root_name_server)
– Wir können mehr Cachen und Abfragen dann direkt beantworten
– Unser Internetanbieter, Google, CloudFlare & Co. kann unser Surfverhalten nicht mehr (so einfach) mitschreiben

Was gibt‘s für Nachteile?
– Die erste Anfrage könnte etwas länger dauern als über den DNS des Internetanbieters
– Es wird weiterhin unverschlüsselt die Anfrage ins Internet gelassen

Wie bekommst du das ganze hin?
Das zeige ich dir hier im Video!

Alle notwendigen Befehle findest du hier:

Wir installieren uns Unbound:

apt install unbound

Wir besorgen uns die Root-Name-Liste und schieben diese in den korrekten Ordner:

wget -O root.hints https://www.internic.net/domain/named.root
mv root.hints /var/lib/unbound/

Unbound braucht noch folgende Konfiguration:

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!
    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.
    # Suggested by the unbound man page to reduce fragmentation reassembly problems
    edns-buffer-size: 1472

    # 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 machine, it should be unnecessary to seek performance enhancement by increasing num-threads above 1.
    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.0.0/16
    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

Falls du IPv6 nutzen möchtest, aktiviere dies in Zeile 13.
Ebenfalls kann gerne die Anzahl der zur Verfügung stehenden CPU-Threads in Zeile 41 noch angepasst werden.

Wir starten Unbound neu:

service unbound restart

Nun kann getestet werden, ob eine Abfrage funktioniert:

dig hoerli.net @127.0.0.1 -p 5335

Zum guten Schluss tragen wir noch den Unbound-Server als DNS-Upstream im Pi-Hole ein.

Nun stellst du deine ganzen Anfragen von deinem Pi-Hole an deinen Unbound-Server!


DNSSEC ist auch nun aktiv und kann mit folgendem Befehl getestet werden:

dig sigfail.verteiltesysteme.net @127.0.0.1 -p 5335
dig sigok.verteiltesysteme.net @127.0.0.1 -p 5335

Automatisches Update der Listen:
Erstelle dir ein kleines Script und speicher es irgendwo ab.

nano root-dns-update.sh

Trage dort folgenden Inhalt ein:

#!/bin/bash
     wget -O root.hints https://www.internic.net/domain/named.root &&
     (
      mv -fv root.hints /var/lib/unbound/
      service unbound restart
     )

Dann das ganze noch ausführbar machen:

chmod +x  root-dns-update.sh

Das ganze noch per CronJob anlegen:

nano /etc/crontab

Ein Beispiel für ein Update alle 4 Monate.

* * * */4 * root /root/root-dns-update.sh >/dev/null 2>&1

Die ganze Anleitung inkl. weiterer interesannten Befehle findest du auf der Pi-Hole-Webseite direkt!
https://docs.pi-hole.net/guides/unbound/

11 Kommentare

  1. Du hast Dich verschrieben !!! 😀 In Zeile 3 bei domain/named.root du hast da einen Punkt

    #!/bin/bash
    rm /var/lib/unbound/root.hints
    wget -O root.hints https://www.internic.net/domain/named.root
    mv root.hints /var/lib/unbound/
    service unbound restart

  2. … wenn das „wget“ fehlschlägt, hat man keine „root.hints“ mehr!

    Ich schlage folgendes Skript vor:

    #!/bin/bash
    wget -O root.hints https://www.internic.net/domain/named.root &&
    (
    mv -fv root.hints /var/lib/unbound/
    service unbound restart
    )

  3. Hi Hoerli. Kleine Frage. Ist im Beispiel für den Cronjob nicht ein Schreibfehler (Name der sh-Datei)? Sollte die Zeile nicht so lauten:

    * * * */4 * root /root/root-dns-update.sh >/dev/null 2>&1

  4. Ich habe mal eine kleine Frage, warum betreibt man ein PiHole hinter einen Unbound DNS. Unbound kann doch auch Werbung ähnlich PiHole Filtern.

  5. Hallo
    Ich habe versucht deinem youtube video zu forlen , welches anscheiden etwas ktueller ist als deine beschreibung auf dieser seite.

    Aktuell habe ich das Problem das piholt -t mit 127.0.0.1#5335 inf ::1#5335 ein

    validation XXXX is BOGUS
    reply error is SERVFAIL

    Ausgibt.

    Nur wenn ich die 127.0.0.1 in die IP vom SBC ändere geht diese…

    Wo könnte der Fehler liegen?

    • BOGUS-Fehler passieren in der Regel, wenn die Uhrzeit des Systems auf dem der DNS-Server läuft nicht korrekt ist.
      Gleiche mal die Zeit ab, damit sie zur Weltzeit synchron läuft.
      Ansonsten kann ich mir nicht erklären, wie es zu dem Fehler kommt.

  6. Hatte ich schon gemacht…

    Ist wie gesagt eine frische ubuntu Focal server installation mit pihole 5 + unbound 1.9.7 + openhabian 1.6 mit nginx 1.9.6. auf einem vim3

    Hatte diesen etwas neuere Anweisungen gefunden…
    https://www.privacy-handbuch.de/handbuch_93c.htm

    Wo man diese Service deaktivieren sollte…

    sudo systemctl disable systemd-resolved

    Jedoch funktioniert sudo aa-status bei mir nicht

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

* Durch das Absenden dieses Kommentars werden deine angegebenen Daten auf dem Server gespeichert. Du stimmst dadurch den Datenschutzbedingungen zu.