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:
nano /etc/unbound/unbound.conf.d/pi-hole.conf
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 # TTL bounds for cache cache-min-ttl: 3600 cache-max-ttl: 86400 # Cache Memory rrset should have double size as msg msg-cache-size: 400m rrset-cache-size: 800m
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/
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
Da hat jemand ein scharfes Auge!
Danke! Fehler behoben 🙂
… 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
)
Danke für dein Feedback!
Ich werde das Script gegen deins austauschen.
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
Jap! Da war ein Fehler drin.
Hab es gerade behoben.
Ich habe mal eine kleine Frage, warum betreibt man ein PiHole hinter einen Unbound DNS. Unbound kann doch auch Werbung ähnlich PiHole Filtern.
Weil Pi-Hole deutlich bequemer zu bedienen ist und ein paar Funktionen zusätzlich hat.
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.
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
Hallo! Sollte der cronjob nicht so heissen?
0 0 * */4 * root /root/root-dns-update.sh >/dev/null 2>&1
Sonst wird das Skript jede Minute an jedem 4. Monat ausgeführt (also 1440 mal an diesem Tag). Siehe https://crontab.guru
Hi!
Wenn du es an jedem 1. alle 4 Monate ausführen willst, dann ja.
In meiner Schreibweise wird jeden 4. Monat um 0:00 Uhr der Cronjob ausgeführt.
Kann man also machen, muss man aber nicht.
0 0 1 */4 * wäre ganz korrekt
Bester Mann!! bei mir hat das nie geklappt nen Unbound zu installieren, egal welche Anleitung ich benutzt hab, aber deine hat funktioniert !!! 🙂
vielen dank für deine Arbeit!! und dass die Listen sich jetzt auch noch updaten können 🙂
Stand Juni 2021:
Bin zwar nur ein absoluter Anfänger aber muß dein Beispiel:
* * * */4 * root /root/root-dns-update.sh >/dev/null 2>&1
angepasst werden ? Und wenn, wie ?
Hat sich der Eintrag nicht geänder ? Wenn “nano /etc/crontab” aufgerufen wird,
stimmt der Syntax deiner Zeile nicht mehr mit der Vorgabe in der Datei überein.
Der CronJob ist soweit korrekt.
Angaben auf der Homepage kann ich immer editieren, so dass es funktioniert. Im Video geht das schlecht 😉
Hallo, tolles Video, kurz und bündig. Den Eintrag in de Crontab würde ich allerdings anders setzen, 0 0 1 */4 * root /root/root-dns-update.sh >/dev/null 2>&1. Sollte der Eintrag zwingend in der /etc/crontab gesetzt werden, andere Autoren erzeugen einen Crontab im root@xxx:~#. Sollte oder muss “unbound-resolvconf.service” disable werden.
Super Anleitung.
Nun habe ich es auch entsprechend dieser Anleitung auf meinem Unraid Server und Dockern geschafft das Teil endlich zum laufen zu bekommen.
BESTEN DANK!!!!
Hall Hoerli,
Anleitung ist super inkl. der Befehlszeilen!!
Hat auch soweit alles Funktioniert bis auf Outlook (abruf über GMX)
Fehler (0x800408FC) beim Ausführen der Aufgabe “[email protected] – Nachrichten werden empfangen”: “Der eingegebene Servername wurde im Netzwerk nicht gefunden. (Das Netzwerk steht möglicherweise gerade nicht zur Verfügung.) Überprüfen Sie den Namen und die Netzwerkverbindung.”
Selbe Problem beim PAD Android 12
Danke in voraus.
Hi Schänbauer,
wo erhälst du den Fehler in Windows und was genau zeigt Android an?
Was ich aktuell davon ableiten könnte ist, das deine Uhrzeit des Pi-Hole-Servers nicht stimmt und dadurch DNSSEC nicht korrekt funktioniert.
Manchmal habe ich auch zeitweise Verbindungsprobleme mit Outlook / Microsoft, das legt sich aber nach 1-2h wieder.
Ich vermute mal, das die Server im Hintergrund umstellen und DNSSEC darauf noch nicht klar gekommen ist.
ich werd kirre. Dein Script funzt bei mir nicht, also das für die Aktualisierung.
unable to resolve host address ‘www.internic.net’
was mach ich da falsch?
Da läuft mit deiner Namensauflösung scheinbar was schief.
Prüfe mal dein DNS-Server.
Bei mir läufts super 🙂
Ich habe das Problem das mein Pihole und Unbound auf jeweils einer anderen Ipadresse ist die range ist 192.168.2.0/24
und sobald ist den unbound als custom server hinzufüge funktioniert das netz nicht mehr.
wie muss ich das in der config anpassen?
habe auch schon
diesen Step ausgeführt da ich ein Debain System habe.
Option 2 – Step 1 – Disable the Service¶
openresolv has a systemd service called unbound-resolvconf.service. To check if this service is enabled for your distribution, run below one and take note of the Active line. It will show either active or inactive or it might not even be installed resulting in a could not be found message:
sudo systemctl status unbound-resolvconf.service
To disable the service if so desire, run the two statements below:
sudo systemctl disable unbound-resolvconf.service
sudo systemctl stop unbound-resolvconf.service
Ich erhalte nach der Installation folgenden Fehlermeldung:
“Job for unbound.service failed because the control process exited with error code.
See “systemctl status unbound.service” and “journalctl -xeu unbound.service” for details.”
Da ich absoluter Laie bin, kann ich hiermit nichts anfangen.
Kannst Du mir bitte weiterhelfen?
Danke
Auch ein Laie kann Google nutzen 😉
Führe mal die aufgeführten Befehle
systemctl status unbound.service
undjournalctl -xeu unbound.service
aus.Dann wird dir das Problem angezeigt.
Danach kannst du dann suchen und solltest eine Antwort finden können.
Ich vermute mal, du hast entweder in der Konfiguration einen fehler gemacht, oder ein Port ist durch etwas anderes belegt.
Moin,
Unbound läuft wie Pi-Hole auf meinem Raspberry Pi 3b, aber wenn ich es in Pi-Hole als Custom Server eintrage, kann ich keine Seite mehr im Internet aufrufen.
In dem Fall prüfe einmal ob Unbound auch sauber funktioniert.
Scheinbar läuft da etwas nicht korrekt.
Der läuft wohl, aber wenn ich ihn im Pi-Hole eintrage, kann ich keine Seite mehr aufrufen:
Ohne Eintrag im Pi:
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1472
;; QUESTION SECTION:
;spiegel.de. IN A
;; ANSWER SECTION:
spiegel.de. 3600 IN A 128.65.210.8
;; Query time: 108 msec
;; SERVER: 127.0.0.1#5335(127.0.0.1)
;; WHEN: Tue Jan 09 18:00:03 CET 2024
;; MSG SIZE rcvd: 55
Mit Eintrag im Pi:
; <> DiG 9.16.44-Debian <> spiegel.de @127.0.0.1 -p 5335
;; global options: +cmd
;; connection timed out; no servers could be reached
Dann hast du vermutlich ein Konfigurationsfehler drin. Der nslookup muss direkt über unbound funktionieren.
Ich habe diese Zeile in der pi-hole.conf angepasst:
private-address: 192.168.0.0/16
Statt der ersten 0 habe ich meinen Wert eingetragen. Es war, wie du vermutet hast, ein Konfigurationsfehler. Danke! 🙂
Perfekt. Dann viel Spaß mit Unbound und Pi-Hole! 🙂