Pi-Hole – Eigener DNS-Resolver + DNSSEC
Wer bereits Pi-Hole installiert hat, kann nun mit nur wenigen Schritten seinen eigenen DNS-Resolver inkl. DNSSEC anstelle von bsp. Google oder Cloudflare nutzen. Hinzu kommt, dass wir uns die erste Anfrage an die DNS-Rootserver durch eine Zonenliste sparen.
Punkt 1: Wir installieren PowerDNS Recursor
Zuerst fügen wir das passende Repository hinzu. in diesem Beispiel gehe ich auf Debian 9 ein, weitere Repos unter https://repo.powerdns.com/.
1 | deb [arch=amd64] http://repo.powerdns.com/debian stretch-rec-42 main |
Wir pinnen das ganze.
1 2 3 | Package: pdns-* Pin: origin repo.powerdns.com Pin-Priority: 600 |
Nun kann der APT Key geladen und das Paket installiert werden.
1 2 3 | curl https://repo.powerdns.com/FD380FBB-pub.asc | sudo apt-key add - && sudo apt-get update && sudo apt-get install pdns-recursor |
Punkt 2: PowerDNS Recursor konfigurieren
In der Konfiguration setzen wir folgende Werte, der Rest kann so bleiben.
1 2 3 4 5 | dnssec=validate hint-file=/etc/powerdns/named.root local-address=127.0.0.1 local-port=5353 query-local-address6=:: |
Punkt 3: DNS-Rootserver Zone herunterladen
Wir laden einmalig die named.root Zonendatei herunter.
1 | wget https://www.internic.net/domain/named.root -O /etc/powerdns/named.root |
Ein wöchentlicher Cronjob sorgt für den aktuellsten Stand.
1 | @weekly wget --quiet https://www.internic.net/domain/named.root -O /etc/powerdns/named.root |
Wir starten den Recursor Dienst neu.
1 | systemctl restart pdns-recursor.service |
Punkt 4: DNS-Resolver in Pi-Hole eintragen und DNSSEC aktivieren
- Wir gehen in das Pi-Hole Admin Interface auf Settings > DNS, entfernen alle Haken bei den Upstream DNS Servers.
- Nun fügen wir unseren Upstream DNS Server Custom 1 (IPv4) hinzu: 127.0.0.1#5353 und aktivieren diesen.
- Zuletzt aktivieren wir Use DNSSEC und drücken Save.
Punkt 5: Testen
Wir prüfen ob DNSSEC aktiviert ist am einfachsten auf der Webseite http://dnssec.vs.uni-due.de/.
Alternativ über die Linux Konsole.
1 2 | dig sigok.verteiltesysteme.net @127.0.0.1 (should return A record) dig sigfail.verteiltesysteme.net @127.0.0.1 (should return SERVFAIL) |
Das Betreiben der Dienste, Webseite und Server machen wir gerne, kostet aber leider auch Geld. Unterstütze unsere Arbeit mit einer Spende. |
Klappt wunderbar, danke!
Kann mir jmd bei dem Pinning helfen, das ist neu für mich und komme mit der Info nicht ganz zu Recht wa sich eingeben muss.
Hi Pat,
du müsstest diese Datei editieren, mit z.B. nano oder vim -> /etc/apt/preferences.d/pdns.
Und dort dann die 3 Zeilen einfügen und abspeichern.
Gruß,
Dominion
Danke dir, sieht nun besser aus!
Sieht das gut aus: ?
root@PiHole:~# dig sigok.verteiltesysteme.net @127.0.0.1
; <> DiG 9.10.3-P4-Debian <> sigok.verteiltesysteme.net @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 15957
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;sigok.verteiltesysteme.net. IN A
;; ANSWER SECTION:
sigok.verteiltesysteme.net. 60 IN A 134.91.78.139
;; Query time: 162 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Apr 14 16:48:08 CEST 2019
;; MSG SIZE rcvd: 71
—
root@PiHole:~# dig sigfail.verteiltesysteme.net @127.0.0.1
; <> DiG 9.10.3-P4-Debian <> sigfail.verteiltesysteme.net @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 43357
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;sigfail.verteiltesysteme.net. IN A
;; Query time: 69 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Apr 14 16:49:27 CEST 2019
;; MSG SIZE rcvd: 57
In „Query Log“, I don’t see any DNSSEC column? Normal?
In der Spalte „Status“ steht ab und an sicherlich INSECURE.
Hey, habe es auf meinen Raspi (3B+) versucht.
Natürlich die entsprechende Repo (raspbian stretch-rec-master main) genommen. Leider bekomme ich diesed Fehler:
@raspberrypi:~ $ sudo systemctl restart pdns-recursor.service
Job for pdns-recursor.service failed because the control process exited with error code.
See „systemctl status pdns-recursor.service“ and „journalctl -xe“ for details.
Ich habe auch einen Neustart des Raspi versucht; keine Besserung.
Bitte um Hilfe, Danke
Ergänzend die Ausgabe vom „systemctl status pdns-recursor.service“:
● pdns-recursor.service – PowerDNS Recursor
Loaded: loaded (/lib/systemd/system/pdns-recursor.service; enabled; vendor preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Wed 2019-04-17 13:33:22 CEST; 97ms ago
Docs: man:pdns_recursor(1)
man:rec_control(1)
https://doc.powerdns.com
Process: 7580 ExecStart=/usr/sbin/pdns_recursor –daemon=no –write-pid=no –disable-syslog –log-timestamp=no (code=exited, status=1/FAILURE)
Main PID: 7580 (code=exited, status=1/FAILURE)
~
Kannst du hier den genauen Fehler aus dem Log ziehen?
Dienst neustarten und dann via journalctl -xe auslesen.
Hallo, ich bin auf den gleichen Fehler gestoßen wie Bastian.
Gibt es mittlerweile eine Lösung dafür?
Also ich vermute es liegt am Port, versucht mal anstelle von 5353 den Port 5300 zu verwenden.
Hallo, danke Dominion, das war tatsächlich die Lösung des Problems.
Guten Abend, vielen Dank für den Beitrag. Er hat mir sehr geholfen. Ich nutze auf meinem vServer auch einen Pi-Hole, eben dank dir jetzt mit DNSSEC. Zwei Fragen sind jetzt offen geblieben.
– Die Anfragen werden trotzallem weiterhin an einen DNS Server weiter gegeben. Wo in der recursor.conf kann ich einstellen, welchen DNS ich verwenden möchte?
– Im Status des Pi-Holes wird sehr oft INSECURE & BOGUS angezeigt. Ist das normal? (Link zum Screenshot: https://ibb.co/xMdgvMk)
Ich möchte sicher gehen, dass mit der Installation alles geklappt hat.Ich habe als IPv4 127.0.0.1#5353 und als IPv6 ::1#53 eingetragen.
Vielen Dank!
Hi,
ja deine Anfragen gehen natürlich die Leiter hoch an die Root Server .. definiert hier: hint-file=/etc/powerdns/named.root
Das im Status INSECURE und BOGUS steht ist normal, manche Seiten haben halt kein DNSSEC oder fehlerhaft eingerichtet.
Mit den aufgeführten Tests kannst du prüfen ob alles geklappt hat: http://dnssec.vs.uni-due.de/
Hi, vielen Dank für die Antwort. Der DNS-Test erfolgte gestern bereits erfolgreich. Ich habe mir jetzt das File angeschaut. Für mich geht jetzt leider nicht hervor, welchen DNS-Server ich mit meinem PowerDNS jetzt anspreche. Ich sehe nur einträge A.ROOT-SERVERS.NET.bis M.ROOT-SERVERS.NET. Vielleicht bin ich auch einfach nur noch zu unerfahren um das zu verstehen. Der PowerDNS gibt die Anfragen ja weiter oder? Ich selbst bin ja kein echter DNS-Server mit einer riesen Datenbank. Ich habe mir vorgestellt, dass ich jetzt zb die IP von Cloudflare eintrage. Dann wüsste ich, dass die Anfrage dahin geleitet wird. Würdest du mir das anhand eines Beispiels zeigen wollen? Vielen Dank.
ich glaube die Skizze und der Text erklären das ganz gut: https://www.elektronik-kompendium.de/sites/net/0901141.htm
Wenn ich es richtig verstanden habe, melden sich alle DNS-Server bei diesen sogenannten Root-Servern um dort alle nötigen Daten zu erhalten?
Mein DNS macht jetzt im Grunde das selbe oder?
Tut mir leid, ich bin noch nicht so bewandert in dieser Materie. Bisher hat es für mich ausgereicht Pi-Hole am laufen zu haben, damit das Internet ein wenig gefiltert wird.
Ergo brauche ich in dieser Liste nichts umändern, da sie sich wohl nicht unterscheiden wird von den anderen DNS.
TIPP: Falls zu viele BOGUS auftreten muss DNSSEC im Pihole deaktiviert und nur im PDNS Recursor aktiviert sein! https://discourse.pi-hole.net/t/bogus-domain-which-is-not-bogus/19558/5
Hi,
vielen Dank hierfür. Mit der Anpassung auf Port 5300 lief es auch bei mir.
Nachtrag: Heute habe ich festgestellt, das der Raspi selbst (apt, ping) keine Namen mehr auflöst. Funktioniert nur, wenn ich temporär z.B. Cloudflare als DNS in Pi-Hole aktiviere. Somit sind automatische Updates nicht möglich. Wo ändere ich das ( /etc/resolv.conf wird immer wieder auf 127.0.0.1 überschrieben)?
Was funktioniert denn nicht mehr? Pihole oder PowerDNS?
Du kannst das mit diesen Befehlen testen:
Pihole: dig heise.de @127.0.0.1 -p53
PDNS: dig heise.de @127.0.0.1 -p5353