Zum Inhalt

Pi-hole mit unbound - Werbeblocker und Kontrolle über die DNS-Anfragen erhalten

Was macht unbound?

unbound holt für euch von einem Root-Nameserver die Informationen welcher Top-Level-Domain-Server (TPL) für eure Anfrage zuständig ist. Anschließend wird der zuständige autoritativen Nameserver nach der IP-Adresse der Domain gefragt, ob die Seite überhaupt aufrufen zu können.

Wo ist aber nun der Unterschied zu dem Pi-hole und zu Pi-hole mit unbound?

Was macht euer Pi-hole ohne unbound?

  1. Ihr gebt in euren Webbrowser die Adresse strobelstefan.de ein.
  2. Pi-hole überprüft, ob er die Anfrage bereits aus seinem Cache auflösen kann, weil ihr bereit vorher die Seite aufgerufen habt.
  3. Pi-hole prüft die eure Blocking-Listen, ob ein Aufruf der Seite erlaubt ist.
  4. Pi-hole verweist eure Anfrage an einen externen DNS-Server, z.B. eures Internet Service Providers (ISP) oder der eingestellte DNS-Server in der Pi-hole-Konfiguration unter Einstellungen --> DNS.
  5. Die Anfrage kommt vom externen DNS zurück und der Pi-hole gibt die Informationen an euren Webbrowser weiter.
  6. Ihr könnt die Seite aufrufen.
  7. Pi-hole speichert die Anfrage in seinem Cache für später, solltet ihr erneut strobelstefan.de aufrufen wollen.

Was macht euer Pi-hole mit unbound?

Die Anfrage läuft für die Punkte 1 bis 3 gleich ab. Erst ab Punkt 4 gibt es eine Änderung

  1. Ihr gebt in euren Webbrowser die Adresse strobelstefan.de ein.
  2. Pi-hole überprüft, ob er die Anfrage bereits aus seinem Cache auflösen kann, weil ihr bereit vorher die Seite aufgerufen habt.
  3. Pi-hole prüft die eure Blocking-Listen, ob ein Aufruf der Seite erlaubt ist.
  4. Es wird eine Anfrage von Pi-hole an den Root-Nameserver gesendet, ob der sagen kann, welcher Top-Level-Domain-Server für .org zuständig ist.
  5. Pi-hole sendet dann eine Anfrage an den TPL-Server wo er strobelstefan.de findet.
  6. Der TPL sendet die Informationen über den zuständigen autoritativen Nameserver zurück.
  7. Pi-hole wendet sich an den autoritativen Nameserver und fragt nach strobelstefan.de.
  8. Der autoritativen Nameserver antwortet nun mit der IP-Adresse der Domain strobelstefan.de.
  9. Der Pi-hole gibt die Informationen weiter und die Seite wird im Webbrowser dargestellt.
  10. Pi-hole speichert erneut die Informationen im Cache, für einen erneuten Aufruf ab.

Was ist nun der Unterschied?

Ihr seht einen wesentlichen Unterschied zwischen den beiden Abläufen. Mit unbound frägt der Pi-hole nicht bei irgendeinem externen DNS-Server an, der von eurem ISP betrieben wird.

Die Anfragen werden zielgerichtet an den Root-Nameserver, dann an den TLS und dann an den autoritativen Nameserver versendet.

Es gibt also keine Dritten die euer Surfverhalten auf Grund der abgesendeten DNS-Anfragen nachvollziehen können.

Wenn euer Pi-hole / unbound die Informationen bereits im Cache gespeichert hat, findet er die richtigen Webserver und damit die Adresse strobelstefan.de ohne Umweg über DNS sondern direkt.

Wenn ihr mal euren QUery Log auf dem Pi-hole angeschaut habt, dann wisst ihr was die DNS-Anfragen beinhalten und was für Informationen und Schlüsse man daraus ziehen kann.

Ein installierter unbound in Verbindung mit Pi-hole.

  • hilft bei der digitalen Selbstverteidigung
  • blockt zuverlässig Werbung
  • ermöglicht eine schnelleres Surfen im Internet, wenn die Daten bereits im Cache gespeichert sind.

unbound-Installation

Die Installation von unbound funktioniert sehr einfach aus den Repositories

sudo apt install unbound

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  libunbound8 unbound-anchor
Suggested packages:
  apparmor
The following NEW packages will be installed:
  libunbound8 unbound unbound-anchor
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 1219 kB of archives.
After this operation, 4787 kB of additional disk space will be used.
Do you want to continue? [Y/n] y

Nach der erfolgreichen Installation ist eine neue Datei im entsprechenden Verzeichnis anzulegen.

sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf

Der Inhalt der Datei sieht wie folgt aus. Bevor ihr das kopiert, schaut bitte in der offiziellen Dokumentation nach, ob sich etwas geändert hat.

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

Nach der Installation von unbound sollte die Datei root.hints im Verzeichnis /var/lib/unbound angelegt worden sein. Ist das nicht der Fall, dann kann die Datei auch manuell heruntergeladen werden.

wget https://www.internic.net/domain/named.root -qO- | sudo tee /var/lib/unbound/root.hints

Danach ist der Dienst neu zu starten und ein Test kann ebenfalls durchgeführt werden.

benutzer@pihole:~ $ sudo service unbound restart
benutzer@pihole:~ $ dig pi-hole.net @127.0.0.1 -p 5335
; <<>> DiG 9.11.5-P4-5.1+deb10u8-Raspbian <<>> dnssec.works @127.0.0.1 -p 5335
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41307
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;dnssec.works.          IN  A

;; ANSWER SECTION:
dnssec.works.       3583    IN  A   5.45.107.88

;; Query time: 0 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1)
;; WHEN: Sa Nov 19 17:10:08 CET 2022
;; MSG SIZE  rcvd: 57

👉 https://docs.pi-hole.net/guides/dns/unbound/

Nun noch unbound neu starten.

sudo service unbound restart

Und schon kann der erste Test gestartet werden.

dig dnssectest.sidn.nl +dnssec +multi @ip-adresse-von-pi-hole

Die Ausgabe sieht in etwa so aus:

; <<>> DiG 9.11.5-P4-5.1+deb10u8-Raspbian <<>> dnssectest.sidn.nl +dnssec +multi @ip-adresse-von-pi-hole
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46068
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags: do; udp: 1472
;; QUESTION SECTION:
;dnssectest.sidn.nl.    IN A

;; ANSWER SECTION:
dnssectest.sidn.nl. 2155 IN A 212.114.120.64
dnssectest.sidn.nl. 2155 IN RRSIG A 13 3 3600 (
                20221125170928 20221110165616 39816 sidn.nl.
                lRPpEt6j7qM9Fa/g/YYNA8wshfnhtKtRpt09gsGNto1y
                CdvOcBJ6Z5YX11/nxbLQXGtU/pZks55Wto22DBlWlw== )

;; Query time: 7 msec
;; SERVER: 192.168.35.5#53(192.168.35.5)
;; WHEN: Sa Nov 19 16:50:37 CET 2022
;; MSG SIZE  rcvd: 166

Es kann sein, dass in der Datei /etc/resolv.conf zwar als Nameserver die IP-Adresse 127.0.0.1 eingetragen wird, jedoch ohne einen Port.

Der Fehler ist in der offiziellen Dokumentation von Pi-hole beschrieben.

Es lässt sich wie folgt lösen.

benutzer@pihole:~ $ cat /etc/resolv.conf
# Generated by resolvconf
nameserver 127.0.0.1

benutzer@pihole:~ $ sudo systemctl status unbound-resolvconf.service
 unbound-resolvconf.service - Unbound DNS server via resolvconf
   Loaded: loaded (/lib/systemd/system/unbound-resolvconf.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sat 2022-11-19 16:22:55 CET; 19min ago
  Process: 721 ExecStart=/usr/lib/unbound/package-helper resolvconf_start (code=exited, status=0/SUCCESS)
 Main PID: 721 (code=exited, status=0/SUCCESS)

Nov 19 16:22:55 pihole systemd[1]: Started Unbound DNS server via resolvconf.
Nov 19 16:22:56 pihole package-helper[721]: Too few arguments.

destroy@pihole:~ $ sudo systemctl disable unbound-resolvconf.service
Removed /etc/systemd/system/unbound.service.wants/unbound-resolvconf.service.

benutzer@pihole:~ $ sudo systemctl stop unbound-resolvconf.service

benutzer@pihole:~ $ sudo systemctl restart dhcpcd

Die DNS-Einstellungen können auf dieser Seite überprüft werden. Einfach die Adresse im Webbrowser aufrufen:

In der Ausgabe sollte nun der von euch festgelegte DNS-Server ausgegeben werden und nicht mehr der DNS-Server eures ISPs.

Pi-hole DNS-Server einstellen

Zum Abschluss müssen wir noch in Pi-hole den DNS-Server auf den unbound "umleiten." Damit geht jede DNS-Anfrage vom Pi-hole über unseren gerade installierten unbound.

Pi-hole - DNS-Einstellung für unbound

Tragt in Custom 1 (IPv4) ein:

127.0.0.1#5335

Root Nameserver

In der offiziellen Dokumentation wird auch beschrieben, wie die Adressen der Root Nameserver in regelmäßigen Abständen aktualisiert werden können, wenn unbound nicht aus den Paketquellen installiert wurde. Da wir unbound aus eben diesen installiert haben, ist der Schritt für uns nicht wirklich relevant. Aber ihr könnt über den Link die Informationen zu den weltweit 13 Root Nameserver einsehen.

Fehlersuche

Taucht bei euch ein Fehler auf, dann könnt ihr mal folgendes versuchen. Lässt euch mal den Status von unbound ausgeben. Der Dienst sollte ohne Fehler laufen.

systemctl status unbound.service

Gibt es einen Fehler, könnt ihr die unbound-Konfiguration auf Fehler überprüfen lassen.

unbound-checkconf

Hilft das alles nichts, dann setzt ihr das Verbosity-Level kurzfristig für die Fehleranalyse hoch und ihr müsst wohl oder übel die Logs durchsuchen.

Es gibt 5 Log Level:

  1. Level 0 = bedeutet nicht ausführlich, nur Fehler
  2. Level 1 = gibt Informationen über den Betrieb aus
  3. Level 2 = gibt detaillierte Betriebsinformationen aus
  4. Level 3 = gibt Informationen auf Abfrageebene aus
  5. Level 4 = gibt Informationen auf Algorithmus-Ebene aus
  6. Level 5 = protokolliert die Client-Identifikation für Cache-Misses

Unbound deinstallieren

Unbound lässt sich relativ einfach wieder vom System entfernen:

sudo apt remove unbound

Nach der Installation ist ggf. die /etc/resolv.conf anzupassen. Dort sollte nach der Installation der einzige Eintrag auf 127.0.0.1 lauten.

# Generated by resolvconf
nameserver 127.0.0.1

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source