UDM Pro 3: pihole im Container installieren - Teil 3
Um die Sicherheit bei der Namensauflösung weiter zu verbessern, soll auf dem Pi-hole auch ein unbound DNS-Resolver eingerichtet werden. Dabei kann man sich im Wesentlichen an die Anleitung von pi-hole.net orientieren (https://docs.pi-hole.net/guides/dns/unbound/). Dort wird auch ausführlich erklärt, welche Vor- und Nachteile ein lokaler Resolver hat.
Damit die hier beschriebene Unbound integration gelingt, muss vorher ein entsprechender nspawn-Container mit Pi-hole eingerichtet werden. Anleitungen dafür findet sich im ersten und im zweiten Teil dieser Artikelserie.
Ist man per SSH mit der UDM Pro verbunden, wird zunächst eine Shell im Container geöffnet:
machinectl shell pihole
01| Unbound installieren
Am einfachsten wird unbound mit dem Debian Paket Manager apt
installiert. Dann werden automatisch auch die erforderlichen Abhängigkeiten mit installiert.
apt install unbound
02| Unbound konfigurieren
Jetzt muss noch die Konfiguration von unbound angepasst werden. Dazu wird die Datei /etc/unbound/unbound.conf.d/pi-hole.conf
mit folgendem Inhalt angelegt;
cat <<EOF >> /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!
# 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.
# IP fragmentation is unreliable on the Internet today, and can cause
# transmission failures when large DNS messages are sent via UDP. Even
# when fragmentation does work, it may not be secure; it is theoretically
# possible to spoof parts of a fragmented DNS message, without easy
# detection at the receiving end. Recently, there was an excellent study
# >>> Defragmenting DNS - Determining the optimal maximum UDP response size for DNS <<<
# by Axel Koolhaas, and Tjeerd Slokker (https://indico.dns-oarc.net/event/36/contributions/776/)
# in collaboration with NLnet Labs explored DNS using real world data from the
# the RIPE Atlas probes and the researchers suggested different values for
# IPv4 and IPv6 and in different scenarios. They advise that servers should
# be configured to limit DNS messages sent over UDP to a size that will not
# trigger fragmentation on typical network links. DNS servers can switch
# from UDP to TCP when a DNS response is too big to fit in this limited
# buffer size. This value has also been suggested in DNS Flag Day 2020.
edns-buffer-size: 1232
# 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
EOF
03| dnsmasq anpassen
Wenn Pi-hole den lokalen unbound Resolver nutzt, so erfolgt dies über da Loopback-Interface lo
. In der Standardeinstellung können dabei größere DNS-Pakete (4096 Bytes) versendet werden als über ein normales Netzwerkinterface (1232 Bytes). Das kann zu Problemen führen. Daher sollte für die lokalen DNS-Requests an unbound die maximale Paket-Größe in der dnsmasq-Konfiguration angepasst werden:
cat <<EOF >> /etc/dnsmasq.d/99-edns.conf
edns-packet-max=1232
EOF
04| openresolv deaktivieren
Für den Fall, dass unter Debian das openresolv
installiert ist, so ist sicherzustellten, dass an der resolv.conf
keine automatischen Änderungen durch den unbound-resolvconf.service
vorgenommen werden. Ansonsten kann es dazu kommen, das die lokale Namensauflösung auf dem Pi-hole Container nicht mehr richtig funktioniert. Dazu ist zunächst der unbound-resolvconf.service
zu deaktivieren:
sudo systemctl disable --now unbound-resolvconf.service
Für den Fall, dass der unbound-resolvconf.service
manuell oder von einem anderen Prozess aufgerufen wird, sollte auch die resolvconf.conf angepasst werden, damit die Datei /etc/unbound/unbound.conf.d/resolvconf_resolvers.conf
nicht neu erzeugt wird:
sed -Ei 's/^unbound_conf=/#unbound_conf=/' /etc/resolvconf.conf
rm /etc/unbound/unbound.conf.d/resolvconf_resolvers.conf
Damit die Konfiguration aktiv wird muss der unbound Service neu gestartet werden:
systemctl restart unbound
05| Testen
Jetzt sollte die Namensauflösung über unbound schon funktionieren. Das kann mit dig einfach überprüft werden:
dig nerdig.es @127.0.0.1 -p 5335
Auch DNSSEC Validierung sollte mit unbound funktionieren. Das Kommando
dig fail01.dnssec.works @127.0.0.1 -p 5335
sollte zu einer Fehlermeldung führen oder zumindest keine Antwort zurückliefern, da es einen ungültigen DNSSEC-Record hat. Die Abfrage
dig dnssec.works @127.0.0.1 -p 5335
sollte dagegen problemlos funktionieren.
06| Pi-hole konfigurieren
In der Pi-hole Admin-Oberfläche muss der lokale unbound-Server 127.0.0.1#5353
als Upstream DNS Server
unter Settings > DNS
eingetragen werden:
Herzlichen Glückwunsch: Pi-hole nutzt jetzt den lokalen Resolver um externe DNS-Namen aufzulösen.
07| Links
[01] unifios-utilities - How to Create a Custom Container on UnifiOS 3.x+
[02] unifios-utilities - How to Install Pi-Hole in Container
[03] Pi-hole
[04] Pi-hole - Unbound
Kommentare