Verschlüsseltes DNS mit OpenSUSE Tumbleweed

Einer der letzten offenen Punkte im „Alles immer verschlüsseln“-Ansatz war bei mir DNS. Alle Anfragen gingen unverschlüsselt direkt zu meinem ISP, bzw. zu dem was die Fritz Box meinem System mitgeteilt hat. Für die Fritz Box habe ich bereits Quad9 als DNS-TLS Anbieter in der Konfiguration hinterlegt. Damit erhalten zumindest schon einmal alle Geräte die DNS Auflösung hierüber.

Für mein OpenSUSE Tumbleweed habe ich drei wesentliche Änderungen vorgenommen und mich dabei grundsätzlich am Privacy Handbuch orientiert.

  1. unbound installieren und konfigurieren.
  2. /etc/resolv.conf ändern.
  3. NetworkManager anpassen.

Die unbound config habe ich im conf.d Verzeichnis mit einer conftls.conf ergänzt:

server:
        tls-cert-bundle: "/etc/ssl/ca-bundle.pem"
        hide-identity: yes
        hide-version: yes
        use-caps-for-id: yes
        aggressive-nsec: yes

# Use an upstream DNS-over-TLS forwarder and do not fall back to cleartext
# if that fails.
forward-zone:
        name: "."
        forward-tls-upstream: yes               # use DNS-over-TLS forwarder
        forward-first: no                       # do NOT send direct
#       # the hostname after "#" is not a comment, it is used for TLS checks:
        forward-addr: 2620:fe::fe#dns.quad9.net
        forward-addr: 2620:fe::9#dns.quad9.net
        forward-addr: 149.112.112.112#dns.quad9.net
        forward-addr: 9.9.9.9#dns.quad9.net

Meine /etc/resolv.conf ist kein symlink mehr (Obacht bei systemd.resolved oder anderen Lösungen, die hier symlinks anlegen) und enthält dies:

nameserver 127.0.0.1
nameserver ::1

options trust-ad

Das trust-ad ist wichtig für DNSSEC. Aus der manpage zu resolv.conf:

trust-ad (since glibc 2.31)

 Sets RES_TRUSTAD in _res.options. This option controls the AD bit
behavior of the stub resolver.  If a validating resolver sets the AD
bit in a response, it indicates that the data in the response was
verified according to the DNSSEC protocol.

Schließlich muss dem NetworkManager noch beigebracht werden, dass er den DNS der Fritz Box nicht verteilen soll bzw. keine Änderung an der resolv.conf vornehmen darf für DNS:

bridge:~ # cat /etc/NetworkManager/conf.d/do_not_touch_dns.conf 
[main]
dns=none
rc-manager=unmanaged

Und am Ende muss der unbound natürlich einmal neugestartet werden.