Unbound¶
Inhalt¶
- Unbound 1.24.2
- validierender rekursiver Resolver
- DNSSEC
- optionale Funktionen für DNSCrypt und TLS-Upstream
- Ports-Version
dns/unbound
Aktueller Portstand in FreeBSD Ports: unbound-1.24.2. Die Ports-Version bringt den eigenen Dienst unbound mit; local_unbound aus dem Basissystem ist laut FreeBSD-Handbook nur als lokaler caching/forwarding Resolver gedacht. (FreshPorts)
Einleitung¶
Dieses HowTo beschreibt die Installation und Konfiguration von Unbound auf FreeBSD 15+.
Dieses HowTo verwendet bewusst Unbound aus den FreeBSD Ports als validierenden rekursiven Resolver. Das ist für Resolver-Dienste über die lokale Maschine hinaus die richtige Basis: Das FreeBSD Handbook empfiehlt für diesen Fall ausdrücklich dns/unbound statt local_unbound aus dem Basissystem. Die aktuelle Ports-Version basiert auf Unbound 1.24.2. (FreeBSD Dokumentation)
Wichtig ist dabei: Dieses HowTo aktiviert weder TLS-Upstream noch DNSCrypt automatisch. In der Unbound-Dokumentation ist tls-upstream standardmäßig no; ebenso ist dnscrypt-enable standardmäßig no. Die FreeBSD-Portoptionen können DNSCrypt-Unterstützung zwar einkompilieren, aktiv wird sie dadurch aber noch nicht. (unbound.docs.nlnetlabs.nl)
Voraussetzungen¶
Zu den Voraussetzungen für dieses HowTo siehe bitte: Hosting System
Zusätzlich sollte bereits klar sein, aus welchen Netzen der Resolver Anfragen annehmen soll und ob er nur lokal oder für das gesamte Netz betrieben wird. Für einen netzweit erreichbaren Resolver ist die Ports-Version vorgesehen, nicht local_unbound. (FreeBSD Dokumentation)
Vorbereitungen¶
DNS Records¶
Für dieses HowTo sind keine DNS-Records erforderlich.
Unbound arbeitet hier als rekursiver Resolver und nicht als autoritativer Nameserver für eine eigene Zone.
Gruppen / Benutzer / Passwörter¶
Für dieses HowTo müssen keine zusätzlichen Systemgruppen, Systembenutzer oder Passwörter manuell angelegt werden.
Verzeichnisse / Dateien¶
Für dieses HowTo müssen vor der Installation keine zusätzlichen Verzeichnisse oder Dateien manuell angelegt werden.
Die Ports-Installation bringt das Konfigurationsverzeichnis /usr/local/etc/unbound sowie den Dienst unbound selbst mit. (FreshPorts)
Installation¶
Wir installieren dns/unbound und dessen Abhängigkeiten.¶
mkdir -p /var/db/ports/security_libsodium
cat <<'EOF' > /var/db/ports/security_libsodium/options
_OPTIONS_READ=libsodium-1.0.21
_FILE_COMPLETE_OPTIONS_LIST=DOCS
OPTIONS_FILE_UNSET+=DOCS
EOF
mkdir -p /var/db/ports/dns_unbound
cat <<'EOF' > /var/db/ports/dns_unbound/options
_OPTIONS_READ=unbound-1.24.2
_FILE_COMPLETE_OPTIONS_LIST=DEP-RSA1024 DNSCRYPT DNSTAP DOCS DYNLIB ECDSA EVAPI FILTER_AAAA GOST HIREDIS LIBEVENT MUNIN_PLUGIN PYTHON SUBNET TFOCL TFOSE THREADS
OPTIONS_FILE_UNSET+=DEP-RSA1024
OPTIONS_FILE_SET+=DNSCRYPT
OPTIONS_FILE_UNSET+=DNSTAP
OPTIONS_FILE_UNSET+=DOCS
OPTIONS_FILE_SET+=DYNLIB
OPTIONS_FILE_SET+=ECDSA
OPTIONS_FILE_SET+=EVAPI
OPTIONS_FILE_UNSET+=FILTER_AAAA
OPTIONS_FILE_SET+=GOST
OPTIONS_FILE_UNSET+=HIREDIS
OPTIONS_FILE_SET+=LIBEVENT
OPTIONS_FILE_UNSET+=MUNIN_PLUGIN
OPTIONS_FILE_UNSET+=PYTHON
OPTIONS_FILE_UNSET+=SUBNET
OPTIONS_FILE_UNSET+=TFOCL
OPTIONS_FILE_UNSET+=TFOSE
OPTIONS_FILE_SET+=THREADS
EOF
portmaster -w -B -g -U --force-config dns/unbound -n
Dienst in rc.conf eintragen¶
Anschließend deaktivieren wir local_unbound aus dem Basissystem und aktivieren die Ports-Version unbound. Genau diese Trennung ist auf FreeBSD für Resolver-Dienste über die lokale Maschine hinaus vorgesehen. Das Ports-rc.d-Skript unterstützt außerdem explizit unbound_enable und optional unbound_config. (FreeBSD Dokumentation)
sysrc local_unbound_enable=NO
sysrc unbound_enable=YES
sysrc unbound_config="/usr/local/etc/unbound/unbound.conf"
Konfiguration¶
Konfigurationsdatei¶
Die Konfigurationsdatei wird unter /usr/local/etc/unbound/unbound.conf abgelegt.
cat <<'EOF' > /usr/local/etc/unbound/unbound.conf
server:
verbosity: 1
# localhost-only Resolver
interface: 127.0.0.1
interface: ::1
port: 53
access-control: 127.0.0.0/8 allow
access-control: ::1 allow
access-control: ::ffff:127.0.0.1 allow
access-control: 0.0.0.0/0 refuse
access-control: ::0/0 refuse
do-ip4: yes
do-ip6: yes
do-udp: yes
do-tcp: yes
logfile: "/usr/local/etc/unbound/unbound.log"
root-hints: "/usr/local/etc/unbound/root.hints"
auto-trust-anchor-file: "/usr/local/etc/unbound/root.key"
tls-cert-bundle: "/usr/local/share/certs/ca-root-nss.crt"
num-threads: 4
msg-cache-size: 128m
rrset-cache-size: 256m
so-rcvbuf: 4m
so-sndbuf: 4m
so-reuseport: yes
cache-max-ttl: 14400
cache-min-ttl: 1200
hide-identity: yes
hide-version: yes
qname-minimisation: yes
aggressive-nsec: yes
prefetch: yes
prefetch-key: yes
serve-expired: yes
serve-expired-ttl: 86400
serve-expired-reply-ttl: 30
serve-expired-client-timeout: 1800
rrset-roundrobin: yes
minimal-responses: yes
val-clean-additional: yes
harden-glue: yes
harden-dnssec-stripped: yes
harden-below-nxdomain: yes
harden-referral-path: no
harden-algo-downgrade: no
harden-large-queries: no
use-caps-for-id: no
unwanted-reply-threshold: 10000
do-not-query-localhost: yes
private-address: 10.0.0.0/8
private-address: 172.16.0.0/12
private-address: 192.168.0.0/16
private-address: 169.254.0.0/16
private-address: fd00::/8
private-address: fe80::/10
private-domain: "example.lan"
local-zone: "localhost." static
local-data: "localhost. 10800 IN NS localhost."
local-data: "localhost. 10800 IN SOA localhost. nobody.invalid. 1 3600 1200 604800 10800"
local-data: "localhost. 10800 IN A 127.0.0.1"
local-zone: "127.in-addr.arpa." static
local-data: "127.in-addr.arpa. 10800 IN NS localhost."
local-data: "127.in-addr.arpa. 10800 IN SOA localhost. nobody.invalid. 2 3600 1200 604800 10800"
local-data: "1.0.0.127.in-addr.arpa. 10800 IN PTR localhost."
remote-control:
control-enable: yes
control-interface: 127.0.0.1
control-interface: ::1
control-port: 8953
server-key-file: "/usr/local/etc/unbound/unbound_server.key"
server-cert-file: "/usr/local/etc/unbound/unbound_server.pem"
control-key-file: "/usr/local/etc/unbound/unbound_control.key"
control-cert-file: "/usr/local/etc/unbound/unbound_control.pem"
#forward-zone:
# name: "."
# forward-tls-upstream: yes
# forward-addr: 1.0.0.1@853#one.one.one.one
# forward-addr: 8.8.4.4@853#dns.google
# forward-addr: 149.112.112.112@853#dns.quad9.net
# forward-addr: 1.1.1.1@853#one.one.one.one
# forward-addr: 8.8.8.8@853#dns.google
# forward-addr: 9.9.9.9@853#dns.quad9.net
EOF
Root Hints¶
Unbound kann ohne separate root.hints-Datei mit eingebauten Root Hints arbeiten. Wenn deine Konfiguration aber ausdrücklich root-hints: auf eine Datei setzt, musst du diese Datei natürlich auch bereitstellen. Laut unbound.conf(5) ist der Standard builtin hints, eine separate Datei bleibt aber gute Praxis. (unbound.docs.nlnetlabs.nl)
Wenn deine unbound.conf eine Root-Hints-Datei verwendet:
fetch -o "/usr/local/etc/unbound/root.hints" "https://www.internic.net/domain/named.root"
chown root:wheel /usr/local/etc/unbound/root.hints
chmod 644 /usr/local/etc/unbound/root.hints
DNSSEC Trust Anchor¶
Für DNSSEC ist unbound-anchor der richtige Weg. unbound-anchor(8) beschreibt genau dafür die Datei root.key; auto-trust-anchor-file erwartet außerdem eine Datei, die vom laufenden Unbound-Prozess gelesen und geschrieben werden kann. Wichtig: Das Ports-rc.d-Skript ruft vor dem Start selbst bereits unbound-anchor auf. Ein manueller Vorab-Lauf ist daher nur dann nötig, wenn du die Trust-Anchor-Datei bewusst vor dem ersten Start initialisieren willst. (unbound.docs.nlnetlabs.nl)
Optional vor dem ersten Start:
Remote Control nur bei Bedarf¶
unbound-control funktioniert nur dann sinnvoll, wenn deine unbound.conf auch wirklich einen remote-control:-Block mit control-enable: yes enthält. Standardmäßig ist control-enable no. Die Schlüssel und Zertifikate dafür werden mit unbound-control-setup erzeugt. (unbound.docs.nlnetlabs.nl)
Wenn du remote-control aktiv nutzt:
Konfiguration prüfen¶
Vor dem ersten Start sollte die Konfiguration immer geprüft werden. unbound-checkconf ist genau dafür vorgesehen. Das Ports-rc.d-Skript prüft die Konfiguration zusätzlich ebenfalls vor dem Start und vor reload. (unbound.docs.nlnetlabs.nl)
Datenbanken¶
Für dieses HowTo sind keine Datenbanken erforderlich.
Zusatzsoftware¶
Mögliche Zusatzsoftware wird hier installiert und konfiguriert.
DNSCrypt / TLS-Upstream¶
Nicht Bestandteil dieses HowTos.
Die Ports-Version kann DNSCrypt-Unterstützung enthalten, und Unbound kennt Optionen für TLS-Upstream, aber beides ist laut aktueller Dokumentation standardmäßig nicht aktiviert und braucht zusätzliche Konfiguration. DNSCrypt benötigt außerdem eigene Schlüssel- und Zertifikatsdateien; diese erzeugt Unbound nicht automatisch für dich. (FreshPorts)
Aufräumen¶
Überflüssige oder temporäre Verzeichnisse und Dateien entsorgen.
Zusatzsoftware Installation¶
Nicht erforderlich.
Zusatzsoftware Konfiguration¶
Nicht erforderlich.
Abschluss¶
Falls local_unbound aus dem Basissystem aktuell noch läuft, stoppen wir es einmalig. Danach starten wir die Ports-Version von Unbound.
service local_unbound onestatus >/dev/null 2>&1 && service local_unbound onestop
service unbound start
Für spätere Änderungen:
Das Ports-rc.d-Skript unterstützt reload explizit. Beim Start führt es außerdem selbst unbound-anchor und unbound-checkconf aus. (GitHub)
Referenzen¶
- FreeBSD Handbook – Hinweis zu
local_unboundunddns/unbound. (FreeBSD Documentation) - FreshPorts –
dns/unbound, aktueller Portstand, Default-Optionen und Dienstskript. (FreshPorts) - NLnet Labs –
unbound.conf(5)zuroot-hints,auto-trust-anchor-file,tls-upstream,control-enableund DNSCrypt. (unbound.docs.nlnetlabs.nl) - NLnet Labs –
unbound-anchor(8)zuroot.key, Default-Pfaden und Initialisierung des Trust Anchors. (unbound.docs.nlnetlabs.nl) - FreeBSD Ports
rc.d-Skript –unbound_enable,unbound_config, automatischerunbound-anchor-Lauf beim Start und unterstütztesreload. (GitHub)