Viele von euch betreiben zu Hause ein Pi-Hole. Als DNS-Server wird in den allermeisten Fällen der voreingestellte DNS-Server des Providers oder ein anderer öffentlicher DNS-Server benutzt.
Da wären z.B. Google mit der IP 8.8.8.8 oder Cloudflare mit der IP 1.1.1.1 usw. usw. Es gibt da draussen viele DNS-Server die man benutzen kann. Das ist nicht nötig, wie in diesem Artikel beschrieben wird
Wenn man alldem nicht trauen möchte, bietet sich an auch gleich einen eigenen privaten DNS Server zu benutzen. Wenn man den dann noch auf demselben Raspberry wie Pi-Hole betreiben kann, umso besser Und an dieser Stelle kommt unbound ins Spiel
Beschreibung der Entwickler:
Es handelt sich um freie, quelloffene Software unter der BSD-Lizenz. Die Leitprinzipien für unseren Produktentwicklungsplan sind in erster Linie die Sicherheit und der Schutz der Privatsphäre des Nutzers. Darüber hinaus müssen alle Funktionen durch etablierte offene Standards unterstützt werden. Wir verbessern kontinuierlich die Funktionalität von Unbound für alle unsere Nutzer. Das bedeutet, dass wir keine Sonderanfertigungen machen oder spezielle Funktionen nur für zahlende Kunden bereitstellen. Unsere Prioritäten richten sich nach dem Feedback unserer Benutzer
Unbound funktioniert tadellos parallel zu Pi-Hole auf dem Raspberry ohne dass es zu Engpässen bei der Performance kommt. Die paar DNS Anfragen fallen nicht ins Gewicht. Nur die erste DNS-Anfrage zu einem neuen Ziel wird ins Netz geschickt und jede weitere zum selben Ziel wird aus dem Cache abgerufen. Die Antwortzeit beträgt dann 0 msec !
DNS-Server hört sich kompliziert an und ist es im Prinzip auch. Aber Unbound macht die Installation sehr einfach
Installiert wird unbound mit:
sudo apt install unbound
Danach lädt man sich die aktuelle Liste der Root Server im Internet herunter
wget https://www.internic.net/domain/named.root -qO- | sudo tee /var/lib/unbound/root.hints
Am Inhalt dieser Liste ändert sich nur selten etwas. Und selbst wenn sich etwas ändert, arbeitet unbound trotzdem noch. Ich empfehle jedoch ca. jedes halbe Jahr eine aktuelle Liste herunterzuladen. Wie man das automatisieren kann, beschreibe ich weiter unten.
Die Features von unbound lauten wie folgt:
- Lauscht nur auf Anfragen von der lokalen Pi-Hole-Installation (auf Port 5335)
- Lauscht sowohl auf UDP- als auch auf TCP-Anfragen
- Überprüfen von DNSSEC-Signaturen und verwerfen von BOGUS-Domains
- Eigene Sicherheits- und Datenschutztricks können angewendet werden
Danach legt man eine Konfigurationsdatei an mit:
sudo nano /etc/unbound/unbound.conf.d/pi-hole.conf
Diese Datei bekommt folgenden Inhalt:
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
Danach kann man den Server starten
sudo service unbound restart
dig pi-hole.net @127.0.0.1 -p 5335
Ein Test kann z.B. so ausgeführt werden
dig gnulinux.ch @127.0.0.1 -p 5335
Damit wird die DNS-Anfrage an unbound auf dessen Port 5335 gesendet
DNS Anfragen werden normalerweise an den Port 53 gesendet. Unbound verwendet den Port 5335 also nicht wundern, woher diese Zahl kommt. Der Port kann in der Konfigurationsdatei geändert werden, muss dann aber überall angepasst werden. Jetzt müssen wir unserem Pi-Hole nur noch mitteilen, dass wir ab sofort einen anderen DNS Server benutzen wollen. Wir konfigurieren Pi-Hole so, dass es euren rekursiven DNS-Server verwendet, indem 127.0.0.1#5335 als Custom DNS (IPv4) angegeben wird.
Im Pi-Hole findet man unter Settings -> DNS folgendes
Nach der Änderung das speichern nicht vergessen.
Update Datei erstellen
nano /root/updateroot
Inhalt:
#!/bin/bash
wget -O root.hints https://www.internic.net/domain/named.root ;
rm /var/lib/unbound/root.hints
mv root.hints /var/lib/unbound/
service unbound restart
Datei ausführbar machen
chmod +x /root/updateroot
Cronjobs-Datei öffnen:
crontab -e
Am Ende der Datei folgende Zeile einfügen:
0 0 1 */6 * /root/updateroot &
Cron zum Schluss neu starten
service cron restart
Das ganze bewirkt, dass die Datei mit den Root DNS Servern jedes halbe Jahr aktualisiert wird.
Nun kann es sein das man die Aktivitäten von Unbound verfolgen möchte. Per default legt unbound aber keine Log-Datei an. Das kann mn aber relativ leicht ändern. Dazu muss man die Datei unbound.conf editieren
nano /etc/unbound/unbound.conf
Folgende Zeilen müssen an das Ende der Datei eingefügt werden.
server:
chroot: ""
logfile: /var/log/unbound.log
verbosity: 1
log-queries: yes
Die Datei unbound.log erzeugen
touch /var/log/unbound.log
Und mit den passenden Rechten versorgen.
chown unbound:unbound /var/log/unbound.log
Danach unbound neu starten
/etc/init.d/unbound restart
Danach kann man die Aktivitäten in Realzeit verfolgen. Es ist sehr interessant von welchen Geräten welche DNS-Anfragen kommen
cd /var/log
tail -f /var/log/unbound.log
Das war's auch schon
Viel Spass !!
Quelle: https://www.nlnetlabs.nl/projects/unbound/about
Hallo, danke für die Anleitung! Aus welchem Grund ist eigentlich folgene Zeile auskommentiert? Schließlich wurde ja die rootlist runtergeladen?
root-hints: "/var/lib/unbound/root.hints"
Danke für den Hinweis. Hatte das Original Listing von unbound übernommen und nicht nachgeprüft ist jetzt geändert
Vielen Dank! Mehr davon, bitte!
"Nur die erste DNS-Anfrage zu einem neuen Ziel wird ins Netz geschickt"
Wie gross wäre so eine Liste aller existierender Domains? Und wie macht das eigentlich der unbound vom Provider?
Hi, warum sollte ich das nicht nutzen?
If you use the default dns-root-data package, unbound will find it automatically
so wie es aussieht, das list-file, das mit dem package "dns-root-data" mitkommt, scheint etwas älter zusein, als das, wan man mit wget holen würde (zeitpunkt jetzt, raspbian 12.5)