Wie man einen lokalen DNS Resolver mit Unbound unter Debian einrichtet

Unbound ist eine freie und quelloffene DNS-Server-Software, die für validierende, rekursive und cachende DNS-Resolver verwendet werden kann. Es ist ein funktionsreicher DNS-Server, der DNS-over-TLS (DoT), DNS-over-HTTPS (DoH), Query Name Minimisation, die aggressive Nutzung von DNSSEC-validiertem Cache und die Unterstützung von Autoritätszonen unterstützt. Unbound konzentriert sich auf den Schutz der Privatsphäre und die Sicherheit von DNS, ohne dabei Abstriche bei der Geschwindigkeit und Leistung zu machen.

Unbound wird in erster Linie von NLnet Labs entwickelt und unter der BSD-Lizenz vertrieben und unterstützt moderne Funktionen auf offenen Standards von DNS Server. Unbound wurde rigoros geprüft und kann unter Linux, BSD und macOS ausgeführt werden. Unbound ist für die meisten dieser Betriebssysteme verfügbar und kann über den Systempaketmanager installiert werden.

In dieser Anleitung erfährst du, wie du einen Private DNS Server mit Unbound auf einem Debian 11 und Debian 12 Server einrichtest. Du richtest Unbound als lokalen DNS-Server mit einigen Funktionen wie einem autoritativen DNS-Server ein, aktivierst den DNS-Cache, richtest lokale IP-Adressen und Zugriffskontrolllisten (ACLs) ein, richtest lokale Domainnamen ein und richtest Unbound als DNS-Resolver mit aktiviertem DNS-over-TLS (DoT) ein.

Außerdem richtest du das Logging für den Unbound-Dienst über Rsyslog und Logrotate ein.

Vorraussetzungen

Um diese Anleitung durchzuführen, brauchst du die folgenden Voraussetzungen

  • Ein System, auf dem ein Debian 11 Server oder ein Debian 12 Server läuft.
  • Ein Benutzerkonto mit sudo/root Administrator-Rechten.

Das war’s schon. Du kannst jetzt mit der Installation von Unbound als Local DNS Server beginnen.

Installation von Unbound

Standardmäßig ist das Unbound-Paket im Debian-Repository verfügbar. Du kannst es über die APT installieren. In diesem ersten Schritt installierst du das Unbound-Paket, das die „dns-root-data“ enthält, auf deinem Debian-Server.

Bevor du beginnst, aktualisiere deinen Debian-Paketindex mit dem unten stehenden apt-Befehl.

sudo apt update

Führe nun den unten stehenden apt-Befehl aus, um zu prüfen, ob das Paket„unbound“ im Debian-Repository verfügbar ist.

sudo apt info unbound

Die unten stehende Ausgabe bestätigt, dass das Paket Unbound standardmäßig im Debian-Server-Repository in der aktuellen Version 1.13 verfügbar ist.

ungebundenes Paket prüfen

Führe nun den folgenden apt-Befehl aus, um unbound auf deinem Debian-System zu installieren. Wenn du dazu aufgefordert wirst, gib y zur Bestätigung ein und drücke ENTER, um fortzufahren.

sudo apt install unbound

Ausgabe:

ungebunden installieren

Sobald Unbound installiert ist, führe den folgenden systemctl-Befehl aus, um den Unbound-Dienst zu überprüfen und sicherzustellen, dass der Dienst aktiviert ist und läuft.

sudo systemctl is-enabled unbound
sudo systemctl status unbound

Der Unbound-Dienst ist aktiviert und wird beim Systemstart automatisch gestartet. Und der Status des Unbound-Dienstes ist „running“.

ungebunden prüfen

Ein zusätzlicher Hinweis: Wenn du IPv6 auf deinem Debian-Server deaktiviert hast, kann der Unbound-Dienst nicht starten. Um dieses Problem zu lösen, kannst du den Parameter„do-ip6: no“ zum Abschnitt„server“ in der Unbound-Konfigurationsdatei „/etc/unbound/unbound.conf“ hinzufügen.

Nachdem du Unbound installiert hast, kannst du als Nächstes damit beginnen, Unbound auf deinem System zu konfigurieren.

Unbound DNS Server konfigurieren

Die Standardkonfiguration von Unbound befindet sich in der Datei „/etc/unbound/unbound.conf“. In diesem Schritt wirst du die Hauptkonfigurationsdatei von Unbound „/etc/unbound.conf“ mit deinem bevorzugten Editor ändern.

Jetzt lernst du die Grundkonfiguration eines Unbound DNS-Servers kennen.

Grundlegende Konfiguration

Öffne die standardmäßige Unbound-Konfigurationsdatei „/etc/unbound/unbound.conf“ mit deinem bevorzugten Editor. In diesem Beispiel wird nano für die Bearbeitung der Konfigurationsdatei„/etc/unbound/unbound.conf“ verwendet.

sudo nano /etc/unbound/unbound.conf

Füge die folgenden Zeilen in die Datei ein. Im Abschnitt „Server“ kannst du grundlegende Unbound-Konfigurationen einrichten. In diesem Beispiel lässt du Unbound mit der lokalen IP-Adresse „192.168.5.20“ und dem Standardport 53 laufen. Außerdem richtest du die Protokollierung für Syslog-Nachrichten ein und deaktivierst IPv6. Schließlich richtest du Unbound so ein, dass es jeden Hostnamen von den Root-DNS-Servern über die Datei„root-hints“ rekursiv abfragt.

#Adding DNS-Over-TLS support
server:
    use-syslog: yes
    username: "unbound"
    directory: "/etc/unbound"
    tls-cert-bundle: /etc/ssl/certs/ca-certificates.crt
    
    do-ip6: no
    interface: 192.168.5.20
    port: 53
    prefetch: yes

root-hints: /usr/share/dns/root.hints
harden-dnssec-stripped: yes

Detailparameter:

  • use-syslog: Aktiviere die Protokollierung von Syslog-Nachrichten.
  • username: als Benutzer unbound laufen lassen, was der Standardbenutzer ist.
  • directory: Das Standardarbeitsverzeichnis für Unbound ist das Verzeichnis„/etc/unbound„.
  • tls-cert-bundle: Zertifikate, die zur Authentifizierung von Verbindungen im Vorfeld verwendet werden. Bei Debian-basierten Distributionen befindet sich die Zertifikatsdatei im Verzeichnis „/etc/ssl/certs/ca-certificates.crt“.
  • do-ip6: Verwende„yes„, um Unbound mit IPv6 zu betreiben oder setze„no„, um IPv6 zu deaktivieren.
  • interface: Netzwerkschnittstelle oder IP-Adresse, über die Unbound ausgeführt werden soll. Du kannst eine IP-Adresse oder den Schnittstellennamen wie z.B.„eth0“ verwenden. Du kannst auch einen bestimmten Port angeben, indem du ein Format wie„IP-ADDRESS@PORT“ hinzufügst.
  • port: Gib den Port an, auf dem Unbound läuft und über den die Verbindungen der Clients abgewickelt werden. Der Standard-DNS-Port ist 53.
  • prefetch: Setzt du den Wert auf„yes„, werden fast abgelaufene Einträge im Nachrichten-Cache vorgeholt.
  • root-hints: eine Datei, die Angaben zum Root-DNS-Server enthält. Die Datei „/usr/share/dns/root.hints“ wird mit dem Paket „dns-root-data“ bereitgestellt. Du kannst die root-hints-Datei auch von hier herunterladen: https://www.internic.net/domain/named.cache.
  • harden-dnssec-stripped: Setze sie auf„yes„, um den Empfang von dnssec-stripped Daten zu verhindern.

DNS-Cache aktivieren

Als Nächstes fügst du die folgenden Zeilen hinzu, um die DNS-Cache-Abfrage in deiner Unbound-Installation zu aktivieren.

    cache-max-ttl: 14400
    cache-min-ttl: 1200

Detailparameter:

  • cache-max-ttl: TTL oder Time To Live für RRSets und Nachrichten im DNS-Cache. Das Format ist in Sekunden.
  • cache-min-ttl: minimale Time To Live für den Cache. Der Standardwert ist 0, aber du kannst ihn nach deinem Geschmack ändern, z.B.„1200“ Sekunden. Setze diesen Wert nicht auf mehr als 1 Stunde, sonst bekommst du Probleme wegen veralteter Daten.

Ungebundene Privatsphäre und Sicherheit

Jetzt kannst du die folgenden Zeilen hinzufügen, um die grundlegenden Datenschutz- und Sicherheitseinstellungen für Unbound einzurichten.

    aggressive-nsec: yes
    hide-identity: yes
    hide-version: yes
    use-caps-for-id: yes

Detailparameter:

  • aggressive-nsec: Setze sie auf„yes„, um aggressives NSEC zu aktivieren, das die DNSSEC NSEC-Kette verwendet, um NXDOMAIN und andere Verweigerungen zu synthetisieren. Schau auf der IETF-Webseite über„NSEChttps://www.ietf.org/archive/id/draft-ietf-dnsop-nsec-ttl-00.html nach .
  • hide-identity: setzt du auf yes, um Antworten von Bind-Anfragen über id.server oder hostname.bind zu deaktivieren.
  • hide-version: setzt du auf yes, um version.server- und version.bind-Abfragen zu deaktivieren.
  • use-caps-for-id: setzt du auf ja, um die Verwendung von „0x20-encoded“ in der Abfrage zu aktivieren, um Spoofing-Versuche zu verhindern.

Privates Netzwerk und Zugriffskontrolllisten (ACLs) definieren

Als nächstes musst du die private Adresse deines Netzwerks und die ACLs (Access Control Lists) definieren. Ändere das lokale Subnetz in den unten stehenden Zeilen mit deiner aktuellen Netzwerkumgebung ab.

    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

#control which clients are allowed to make (recursive) queries
access-control: 127.0.0.1/32 allow_snoop
access-control: ::1 allow_snoop
access-control: 127.0.0.0/8 allow
access-control: 192.168.5.0/24 allow

Detailparameter:

  • private-address: Definiere private Netzwerk-Subnetze in deiner Infrastruktur. Nur die Namen„private-domain“ und „local-data“ dürfen diese privaten Adressen haben.
  • access-control: Definiere die Zugriffskontrolle, bei der Clients (rekursive) Anfragen an den Unbound-Server stellen dürfen. Der Parameter‚allow‚ erlaubt rekursive Anfragen, während der Parameter‚allow_snoop‚ sowohl rekursive als auch nicht-rekursive Anfragen erlaubt.

Lokale Domäne einrichten

Nachdem du die private Adresse und die Zugriffskontrolllisten konfiguriert hast, legst du nun die lokale Zone für deinen lokalen Domainnamen fest. Das ist sehr nützlich, besonders wenn du mehrere selbst gehostete Anwendungen in deinem lokalen Netzwerk hast. Du kannst ganz einfach deinen Domainnamen oder Subdomains definieren und auf eine bestimmte Ziel-IP-Adresse verweisen.

In diesem Beispiel wird die Zone für die Domäne„garden.lan“ mit dem Typ„static“ erstellt, dann erstellst du mehrere Subdomänen über den Parameter „local-data“. Jede Subdomain wird auf eine bestimmte IP-Adresse verweisen. Außerdem erstellst du PTR-Einträge über den Parameter„local-data-ptr„.

    # local zone
    local-zone: "garden.lan." static

local-data: „firewall.garden.lan.  IN A 10.0.0.1“
local-data: „vault.garden.lan.    IN A 10.0.0.2“
local-data: „media.garden.lan.   IN A 10.0.0.3“
local-data: „docs.garden.lan.       IN A 10.0.0.4“
local-data: „wiki.garden.lan.     IN A 10.0.0.5“

local-data-ptr: „10.0.0.1  firewall.garden.lan“
local-data-ptr: „10.0.0.2  vault.garden.lan“
local-data-ptr: „10.0.0.3  media.garden.lan“
local-data-ptr: „10.0.0.4  docs.garden.lan“
local-data-ptr: „10.0.0.5  wiki.garden.lan“

Detailparameter:

  • local-zone: Definiere hier die lokale Domain.
  • local-data: Definiere den A-Record für Subdomains und die lokale IP-Adresse, die aufgelöst werden soll.
  • local-data-ptr: Definiere den ptr-Eintrag für deine Subdomains.

Ungebundene Leistungsoptimierung und Tweak

Füge die folgenden Zeilen hinzu, um mehr Leistung zu erhalten. Du kannst die folgenden Parameter an deine aktuelle Umgebung anpassen.

    num-threads: 4
    msg-cache-slabs: 8
    rrset-cache-slabs: 8
    infra-cache-slabs: 8
    key-cache-slabs: 8
    rrset-cache-size: 256m
    msg-cache-size: 128m
    so-rcvbuf: 8m

Detailparameter:

  • num-threads: die Anzahl der Threads, die erstellt werden. Der Wert sollte mit den CPU-Kernen des Servers übereinstimmen.
  • msg-cache-slabs: Die Anzahl der Slabs, die für den Nachrichten-Cache verwendet werden sollen. Setze den Wert auf 8, um Unbound so zu optimieren, dass mehr Speicher für das Caching verwendet wird.
  • rrset-cache-slabs: Die Anzahl der Slabs, die für den RRset-Cache verwendet werden sollen. Setze ihn auf 8, um Unbound so zu optimieren, dass mehr Speicher für den RRSet-Cache verwendet wird.
  • infra-cache-slabs: Die Anzahl der Slabs, die für den Infrastruktur-Cache verwendet werden sollen. Setze ihn auf 8, um Unbound so zu optimieren, dass mehr Speicher für den Infrastruktur-Cache verwendet wird.
  • key-cache-slabs: Die Anzahl der Slabs, die für den Key-Cache verwendet werden sollen. Setze ihn auf 8, um Unbound so zu optimieren, dass mehr Speicher für den Key-Cache verwendet wird.
  • rrset-cache-size: gib den Speicherplatz für den RRSet-Cache an. In diesem Beispiel werden 256 MB verwendet, während der Standardwert nur 4 MB beträgt.
  • msg-cache-size: Legt die Größe des Speichers für den Nachrichten-Cache fest. In diesem Beispiel werden 128 MB verwendet, der Standardwert beträgt nur 4 MB.
  • so-rcvbuf: setze die Puffergröße für DNS Port 53/udp auf 8 MB.

Unbound als DNS-Resolver mit DNS-over-TLS (DoT) einrichten

Zum Schluss fügst du einen neuen Abschnitt„forward-zone“ hinzu, um Unbound als DNS-Resolver für deine lokalen Netzwerke einzurichten. In diesem Beispiel werden Quad9 DNS-Server mit aktiviertem DoT (DNS-over-TLS) verwendet.

forward-zone:
    name: "."
    forward-ssl-upstream: yes
    ## Also add IBM IPv6 Quad9 over TLS
    forward-addr: 9.9.9.9@853#dns.quad9.net
    forward-addr: 149.112.112.112@853#dns.quad9.net

Details zu den Parametern:

  • forward-zone: Definiere die Forward-Zone für Unbound.
  • name: Setze auf „.“, um alle DNS-Anfragen weiterzuleiten.
  • forward-addr: Verwende einen bestimmten Forwarder, um alle DNS-Anfragen weiterzuleiten. In diesem Beispiel wird Quad9 DNS mit aktiviertem DNS-over-TLS (DoT) verwendet.

Speichere und beende die Datei„/etc/unbound/unbound.conf„, wenn du fertig bist. Nachdem du die Unbound-Konfigurationsdatei geändert hast, kannst du den Unbound-Dienst neu starten und die Änderungen übernehmen.

Führe den folgenden Befehl aus und überprüfe die Unbound-Konfiguration. Wenn du erfolgreich bist, solltest du eine Ausgabe wie „unbound-checkconf: no errors in /etc/unbound/unbound.conf“ erhalten.

sudo unbound-checkconf

Als Nächstes führst du den Befehl systemctl aus, um den Unbound-Dienst neu zu starten und die Änderungen zu übernehmen.

sudo systemctl restart unbound

Nachdem du die Unbound-Konfiguration abgeschlossen hast, richtest du als Nächstes die UFW-Firewall ein und öffnest den Standard-DNS-Port 53.

ungebunden konfigurieren

Einrichten der UFW-Firewall

In diesem Schritt richtest du die UFW-Firewall auf dem Debian-Server ein und öffnest den DNS-Port 53/udp. Zuvor musst du jedoch die UFW-Pakete aus dem Debian-Repository über APT installieren.

Führe den folgenden apt-Befehl aus, um die UFW-Firewall auf deinem Debian-Server zu installieren. Gib y ein, wenn du dazu aufgefordert wirst, und drücke ENTER, um fortzufahren.

sudo apt install ufw

Ausgabe:

ufw installieren

Sobald UFW installiert ist, musst du den OpenSSH-Dienst auf UFW mit dem unten stehenden Befehl öffnen. Dann kannst du den DNS-Port 53/udp zur UFW-Firewall hinzufügen.

sudo ufw allow OpenSSH
sudo ufw allow 53/udp

Als Nächstes führst du den folgenden Befehl aus, um den UFW-Firewall-Dienst zu starten und zu aktivieren. Wenn du dazu aufgefordert wirst, gib y zur Bestätigung ein und drücke ENTER, um fortzufahren.

sudo ufw enable

Die Ausgabe‚Firewall ist aktiv und wird beim Systemstart aktiviert‚ bestätigt, dass die UFW-Firewall läuft und aktiviert ist, was bedeutet, dass die UFW-Firewall beim Systemstart automatisch startet.

Ausgabe:

ufw-Einrichtung

Führe nun den folgenden ufw-Befehl aus, um den Status der UFW-Firewall zu überprüfen. Du solltest die Ausgabe erhalten, dass der UFW-Status„aktiv“ ist und der OpenSSH-Dienst und der DNS-Port 53/udp aktiviert sind.

sudo ufw status

Ausgabe:

ufw verifizieren

Ungebundenes Log über Rsyslog und Logrotate

Nachdem du die UFW-Firewall konfiguriert hast, richtest du nun über rsyslog und logrotate eine Logdatei für Unbound ein. Der rsyslog-Dienst erstellt eine spezielle Logdatei für Unbound und logrotate rotiert die Unbound-Logdatei in einer bestimmten Zeit.

Erstelle eine neue Rsyslog-Konfigurationsdatei „/etc/rsyslog.d/unbound.conf“ mit dem unten stehenden nano-Editor-Befehl.

sudo nano /etc/rsyslog.d/unbound.conf

Füge die folgenden Zeilen in die Datei ein. Damit werden die Unbound-Logs unter „/var/log/unbound.log“ gespeichert.

# Log messages generated by unbound application 
if $programname == 'unbound' then /var/log/unbound.log
# stop processing it further
& stop

Speichere die Datei und beende den Editor, wenn du fertig bist.

Führe nun den folgenden systemctl-Befehl aus, um den Dienst „rsyslog“ neu zu starten und die Änderungen zu übernehmen.

sudo systemctl restart rsyslog

Als Nächstes richtest du die Log-Rotation für die Unbound-Logdatei„/var/log/unbound.log“ ein. Dies kannst du über den logrotate-Dienst erreichen.

Erstelle eine neue logrotate-Konfigurationsdatei„/etc/logrotate.d/unbound“ mit dem unten stehenden nano-Editor-Befehl.

sudo nano /etc/logrotate.d/unbound

Füge die folgenden Zeilen in die Datei ein. Dadurch wird die Logrotation für die Unbound-Logdatei„/var/log/unbound.log“ täglich durchgeführt.

/var/log/unbound.log {
  daily
  rotate 7
  missingok
  create 0640 root adm
  postrotate
    /usr/lib/rsyslog/rsyslog-rotate
  endscript
}

Speichere die Datei und beende den Editor, wenn du fertig bist.

Führe nun den folgenden systemctl-Befehl aus, um den logrotate-Dienst neu zu starten und die Änderungen zu übernehmen.

sudo systemctl restart logrotate

Damit hast du den Unbound DNS-Server erfolgreich installiert und konfiguriert und die Protokollierung über Rsyslog und Logrotate eingerichtet. Die Unbound-Protokolle werden in der Datei „/var/unbound/unbound.log“ gespeichert.

Einrichtung Protokollierung ungebunden

DNS Resolver auf dem Linux Client einstellen

In diesem Schritt lernst du, wie du einen DNS-Resolver auf den Client-Rechnern einrichtest. Wir zeigen dir zwei Methoden für verschiedene Linux-Distributionen.

Für Ubuntu-Clients: Das Netzwerk unter Ubuntu wird vom NetworkManager verwaltet. Um einen DNS-Resolver einzurichten, kannst du den NetworkManager mit systemd-resolved als Backend kombinieren.
Für Debian-Clients: Auf Debian-Systemen (Minimalversion) wird das Netzwerk über die traditionelle Konfigurationsdatei „/etc/network/interface“ verwaltet. Du kannst das DNS-Auflösungsverzeichnis in der Datei „/etc/network/interface“ definieren oder den Dienst systemd-resolved verwenden, der standardmäßig auf dem Debian-Server verfügbar ist.

Für Ubuntu-Clients mit NetworkManager und Systemd-resolved

Dies ist für Ubuntu-Nutzer, die NetworkManager als Standard-Netzwerkkonfiguration verwenden. Du richtest systemd-resolved als Backend für den DNS-Server im NetworkManager ein.

Öffne die Datei„/etc/NetworkManager/NetworkManager.conf“ mit dem unten stehenden nano-Editor-Befehl.

sudo nano /etc/NetworkManager/NetworkManager.conf

Entferne die Markierung des Parameters„dns“ und füge den Backend„systemd-resolved“ hinzu.

dns=systemd-resolved

Speichere und beende die Datei, wenn du fertig bist.

Führe nun den folgenden systemctl-Befehl aus, um den NetworkManager-Dienst neu zu starten und die Änderungen zu übernehmen.

sudo systemctl restart NetworkManager

Als nächstes definierst du den ungebundenen lokalen DNS in systemd-resolved.

Öffne die systemd-resolved Konfigurationsdatei„/etc/systemd/resolved.conf“ mit dem unten stehenden nano-Editor-Befehl.

sudo nano /etc/systemd/resolved.conf

Entferne im Abschnitt „[Resolve]“ die Markierung des Parameters„DNS“ und gib die IP-Adresse deines ungebundenen DNS-Servers ein.

[Resolve]
DNS= 192.168.5.20

Speichere und beende die Datei, wenn du fertig bist.

Als Nächstes führst du den folgenden systemctl-Befehl aus, um den Dienst „systemd-resolved“ zu starten und zu aktivieren.

sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved

Überprüfe nun den Status des Dienstes„systemd-resolved“ mit dem unten stehenden Befehl. Du solltest sehen, dass systemd-resolved aktiviert ist und beim Systemstart automatisch ausgeführt wird. Und der Status des Dienstes„systemd-resolved“ ist jetzt aktiv.

sudo systemctl status systemd-resolved

Du kannst die Konfiguration deines DNS-Resolvers auch mit dem unten stehenden Befehl„resolvectl“ überprüfen. Du solltest sehen, dass der Standard-Resolver dein Unbound DNS-Server mit der IP-Adresse„192.168.5.20“ ist.

resolvectl status

Für Debian-Clients

Für das Debian-System kannst du auch den Dienst systemd-resolved verwenden, um einen DNS-Resolver einzurichten.

Öffne die systemd-resolved Konfigurationsdatei „/etc/systemd/resolved.conf“ mit dem unten stehenden nano-Editor.

sudo nano /etc/systemd/resolved.conf

Füge den Parameter„DNS“ gefolgt von der IP-Adresse des Unbound-Servers in den Abschnitt „[Resolver]“ ein.

[Resolve]
DNS=192.168.5.20

Speichere die Datei und beende den Editor, wenn du fertig bist.

Führe nun den folgenden systemctl-Befehl aus, um den systemd-resolved-Dienst zu starten und zu aktivieren.

sudo systemctl start systemd-resolved
sudo systemctl enable systemd-resolved

Ausgabe:

setup systemd-resolved

Überprüfe dann den Status des systemd-resolved-Dienstes, um sicherzustellen, dass er läuft. Die Ausgabe„active (running)“ bestätigt, dass systemd-resolved läuft, und die Ausgabe„loaded ../../../systemd-resolved.service; enabled;..“ bestätigt, dass der Dienst aktiviert ist.

sudo systemctl status systemd-resolved

Ausgabe:

systemaufgelöst verifizieren

Du kannst die Konfiguration deines DNS-Resolvers mit dem folgenden Befehl„resolvectl“ überprüfen. Du solltest sehen, dass der Standard-Resolver dein Unbound DNS-Server mit der IP-Adresse„192.168.5.20“ ist.

resolvectl status

Ausgabe:

dns-Resolver verifizieren

Testen des Unbound DNS Servers

Führe den folgenden dig-Befehl aus, um sicherzustellen, dass der Unbound DNS als DNS-Resolver funktioniert. Der Parameter „@192.168.5.20“ stellt sicher, dass du einen Unbound DNS Server verwendest, der unter der IP-Adresse„192.168.5.20“ läuft.

dig @192.168.5.20

Wenn du erfolgreich bist, erhältst du eine Antwort vom Root-DNS-Server, wie in der folgenden Ausgabe zu sehen ist. Außerdem siehst du das Flag„ad“ (authentic data) in der Header-Ausgabe, was bedeutet, dass DNSSEC aktiviert ist.

ungebundenen dns-Resolver überprüfen

Als Nächstes führst du den folgenden Befehl aus, um sicherzustellen, dass die Clients online auf die Domänennamen zugreifen können.

dig github.com
dig duckduckgo.com

Bei Erfolg solltest du eine Ausgabe mit Details zu den DNS-Einträgen für die Domänen„github.com“ und„duckduckgo.com“ erhalten. Du kannst sehen, dass der DNS-Resolver, der die Abfrage beantwortet,„127.0.0.53#53“ ist, also der systemd-resolved, der Unbound als Standardresolver verwendet. Außerdem kannst du die„Abfragezeit“ für jede Abfrage sehen, die„Abfragezeit“ für die Domain„github.com“ ist„1367“ und für„duckduckgo.com“ ist„1059„.

Ausgabe für github.com:

zu github graben

Ausgabe für duckduckgo.com:

dig to duckduckgo.com

Wenn du den dig-Befehl noch einmal ausführst, sollte sich die „Abfragezeit“ verringern. Dies bestätigt, dass deine Abfragen zwischengespeichert wurden und der DNS-Cache funktioniert.

dig github.com
dig duckduckgo.com

Ausgabe:

cached dns query

dns zwischengespeichert duckduckgo.com

Als Nächstes überprüfst du die lokale Domain oder Sub-Domain mit dem unten stehenden dig-Befehl. Bei Erfolg wird jede Subdomain auf die richtige IP-Adresse verwiesen, wie sie in der Unbound-Konfigurationsdatei„/etc/unbound/unbound.conf“ konfiguriert ist.

dig firewall.garden.lan +short
dig vault.garden.lan +short
dig media.garden.lan +short

Ausgabe:

lokale Domäne verifizieren

Führe nun den folgenden dig-Befehl aus, um sicherzustellen, dass die PTR-Einträge auf den richtigen Domainnamen verweisen.

dig -x 10.0.0.1 +short
dig -x 10.0.0.2 +short
dig -x 10.0.0.3 +short

Ausgabe:

Ptr Datensatz überprüfen

Zu guter Letzt kannst du DoT (DNS over TLS) auch über tcpdump überprüfen. Installiere das Paket„tcpdump“ auf deinem Unbound-Server.

sudo apt install tcpdump

Gib y ein, wenn du dazu aufgefordert wirst, und drücke ENTER, um fortzufahren.

tcpdump installieren

Führe nun den folgenden tcpdump-Befehl aus, um den Datenverkehr auf der Schnittstelle„eth0“ mit DoT-Port 853 zu überwachen. In diesem Beispiel läuft der Unbound DNS über die IP-Adresse„192.168.5.20“ und die Schnittstelle„eth0„.

tcpdump -vv -x -X -s 1500 -i eth0 'port 853'

Gehe zum Client-Rechner und führe den unten stehenden Befehl aus, um über den unten stehenden dig-Befehl auf externe/Internet-Domänennamen zuzugreifen.

dig google.com

Ausgabe:

Punkt überprüfen

Gehe danach zurück zum Unbound-Server und du solltest jetzt eine ähnliche Ausgabe wie diese auf der tcpdump-Ausgabe erhalten.

Abfrageverkehre verschlüsselt

Damit hast du den lokalen DNS-Server über Unbound installiert und konfiguriert. Außerdem hast du einen DNS-Resolver auf Ubuntu-Clients über systemd-resolved und NetworkManager und auf Debian-Clients über systemd-resolved konfiguriert.

Fazit

In dieser Anleitung hast du den Unbound Local DNS Server auf einem Debian 11 Server installiert. Du hast den DNS-Cache und DNSSEC (standardmäßig aktiviert) aktiviert, private Adressen und ACLs konfiguriert, die lokale Domain über local-zone hinzugefügt und Unbound als DNS-Resolver mit DoT (DNS-over-TLS) konfiguriert.

Außerdem hast du grundlegende DNS-Datenschutz- und Sicherheitseinstellungen vorgenommen, Unbound optimiert und Unbound-Logs über rsyslog und logrotate konfiguriert.

Am Ende dieses Leitfadens hast du auch gelernt, wie du einen DNS-Resolver auf Ubuntu- und Debian-Rechnern über NetworkManager und systemd-resolved einrichtest. Außerdem hast du gelernt, wie du den Befehl dig zur Überprüfung des DNS-Servers verwendest.

Das könnte dich auch interessieren …