Einrichten eines lokalen DNS-Resolvers mit Unbound unter Ubuntu 22.04

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 diesem Tutorial installierst du Unbound auf dem Ubuntu 22.04 Server und richtest ihn als lokalen DNS-Server ein, wobei du einige Funktionen aktivierst, wie DNSSEC, DNS-Cache, lokale Domainnamen und Subdomains sowie DNS-over-TLS (DoT). Außerdem richtest du die Unbound-Protokollierung über Rsyslog und logrotate ein und richtest einen Ubuntu-Client-Rechner ein, um deine Unbound-Installation zu überprüfen.

Voraussetzungen

Um dieses Tutorial durchzuführen, brauchst du die folgenden Voraussetzungen:

  • Einen Ubuntu 22.04-Server – In diesem Beispiel wird ein Ubuntu-Server mit dem Hostnamen„unbound-server“ und der IP-Adresse„192.168.5.100“ verwendet.
  • Ein Nicht-Root-Benutzer mit sudo/root-Administrator-Rechten.

Das war’s. Jetzt kannst du mit der Installation von Unound fortfahren.

Installation von Unbound DNS Server

Das Ubuntu-Repository stellt standardmäßig ein Unbound-Paket bereit, das du einfach über die APT installieren kannst. Bevor du mit der Unbound-Installation beginnst, gibst du den folgenden apt-Befehl ein, um deinen Ubuntu-Paketindex zu aktualisieren und aufzufrischen.

sudo apt update

Überprüfe nun die Details des Unbound-Pakets mit dem folgenden Befehl.

sudo apt info unbound

Zum Zeitpunkt der Erstellung dieses Artikels enthält das Standard-Repository von Ubuntu Unbound 1.13.

ungebundene Pakete anzeigen

Als nächstes installierst du Unbound mit dem folgenden apt-Befehl. Wenn du dazu aufgefordert wirst, gib zur Bestätigung y 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.

sudo systemctl is-enabled unbound
sudo systemctl status unbound

Die Ausgabe„enabled“ bestätigt, dass Unbound aktiviert ist und beim Systemstart automatisch gestartet wird. Und die Ausgabe„active (running)“ bestätigt, dass Unbound läuft.

ungebunden prüfen

Unbound als lokalen DNS-Server konfigurieren

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

Du lernst nun die Grundkonfiguration eines Unbound-DNS-Servers kennen, wie du den DNS-Cache aktivierst, lokale Domainnamen und Subdomains einrichtest und Unbound als DNS-Resolver mit aktiviertem DoT (DNS-over-TLS) einrichtest.

Grundlegende Konfiguration

Öffne die standardmäßige Unbound-Konfigurationsdatei „/etc/unbound/unbound.conf“ mit einem Editor deiner Wahl. 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.100“ 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.100
    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 ausgeführt werden, 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 ausgeführt wird und der die Verbindungen der Clients verarbeitet. 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 Details 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: 11000

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.„11000“ 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 aggressiven NSEC zu aktivieren und die DNSSEC NSEC-Kette zu nutzen, um NXDOMAIN und andere Verweigerungen zu synthetisieren. Schau auf der IETF-Webseite über ‚NSEC‘ https://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 „0x100-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. Achte darauf, dass du das lokale Subnetz in den unten stehenden Zeilen an deine aktuelle Netzwerkumgebung anpasst.

    private-address: 192.168.0.0/16
    private-address: 192.168.5.0/24
    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 private Adressen und Zugriffskontrolllisten konfiguriert hast, legst du die lokale Zone deines Domainnamens 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„home.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: "home.lan." static
local-data: "firewall.home.lan.  IN A 10.0.0.1"
local-data: "vault.home.lan.    IN A 10.0.0.2"
local-data: "media.home.lan.   IN A 10.0.0.3"
local-data: "docs.home.lan.       IN A 10.0.0.4"
local-data: "wiki.home.lan.     IN A 10.0.0.5"

local-data-ptr: "10.0.0.1  firewall.home.lan"
local-data-ptr: "10.0.0.2  vault.home.lan"
local-data-ptr: "10.0.0.3  media.home.lan"
local-data-ptr: "10.0.0.4  docs.home.lan"
local-data-ptr: "10.0.0.5  wiki.home.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 sie 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, damit Unbound mehr Speicher für den Key-Cache verwendet.
  • 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. Auf dem Ubuntu-System musst du auch einen höheren Wert für den Kernel-Parameter„net.core.rmem_max“ einstellen.

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 folgenden Befehl aus, um den Standardwert für „net.core.rmem_max“ in der Datei „/etc/sysctl.conf“ zu erhöhen. Anschließend wendest du die Änderungen mit dem Befehl„sysctl“ an.

echo "net.core.rmem_max= 8388608" >> /etc/sysctl.conf
sudo sysctl -p

sysctl einrichten

Danach führst du den folgenden systemctl-Befehl aus, um den Unbound-Dienst neu zu starten und die Änderungen zu übernehmen.

sudo systemctl restart unbound

Nun sollte der Unbound-Dienst mit der neuen Konfiguration unter der IP-Adresse 192.168.5.100 an Port 53 laufen.

ungebunden konfigurieren

Überprüfe die Liste der offenen Ports auf deinem System mit dem ss-Befehl unten.

ss -tulpn

Du wirst eine Ausgabe wie diese erhalten – Der Standard-DNS-udp-Port 53 wird vom Unbound-Dienst verwendet.

Ungebundenen Port prüfen

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

Einrichten der UFW-Firewall

Unter Ubuntu ist die Standard-Firewall UFW installiert. Sie ist zwar installiert, aber noch inaktiv. In diesem Schritt richtest du die UFW-Firewall ein und öffnest den UDP-Port für Unbound.

Führe den unten stehenden Befehl aus, um den OpenSSH-Dienst auf der UFW zu ö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 unten stehenden 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

Einrichten von Unbound 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.

Führe den folgenden Befehl aus, um eine neue Rsyslog-Konfiguration „/etc/rsyslog.d/unbound.conf“ für den Unbound-Dienst hinzuzufügen. Damit werden die Unbound-Protokolle unter „/var/log/unbound.log“ gespeichert.

cat <<EOF | sudo tee /etc/rsyslog.d/unbound.conf
# Log messages generated by unbound application 
if $programname == 'unbound' then /var/log/unbound.log
# stop processing it further
& stop
EOF

Als Nächstes führst du den folgenden Befehl aus, um die Logrotate-Konfiguration „/etc/logrotate.d/unbound“ für den Unbound-Dienst hinzuzufügen. Dadurch wird die Logrotation für die Unbound-Logdatei „/var/log/unbound.log“ täglich durchgeführt.

cat <<EOF | sudo tee /etc/logrotate.d/unbound
/var/log/unbound.log {
  daily
  rotate 7
  missingok
  create 0640 root adm
  postrotate
    /usr/lib/rsyslog/rsyslog-rotate
  endscript
}
EOF

Einrichtung Protokollierung ungebunden

Führe nun den folgenden systemctl-Befehl aus, um die Dienste Rsyslog und Logrotate neu zu starten. Dadurch werden die Änderungen, die du an beiden Diensten vorgenommen hast, übernommen.

sudo systemctl restart rsyslog logrotate

rsyslog und logrotate neu starten

Zum Schluss kannst du die Protokolldatei überprüfen, indem du den Unbound-Dienst mit dem unten stehenden Befehl neu startest.

Dadurch werden die Nachrichten, die der Unbound-Dienst während des Neustarts erzeugt, in der Protokolldatei „/var/log/unbound.log“ gespeichert. Führe den Befehl cat aus, um den Inhalt der Protokolldatei „/var/log/unbound.log“ anzuzeigen.

sudo systemctl restart unbound
cat /var/log/unbound.log

Ausgabe:

ungebundenes Protokoll prüfen

Einrichten des DNS-Resolvers auf dem Client

Auf der Client-Seite musst du den DNS-Resolver einrichten und Unbound als Standard-Resolver auf dem Client-System verwenden. Bei der Ubuntu-Distribution kannst du den NetworkManager oder den systemd-resolved-Dienst verwenden oder eine statische Datei für „/etc/resolv.conf“ einrichten.

In diesem Schritt erfährst du, wie du den DNS-Resolver auf Ubuntu Desktop und Ubuntu Server einrichtest.

Für Ubuntu Desktop

Der NetworkManager-Dienst verwaltet das Standard-Netzwerk für die Ubuntu Desktop-Version. Du kannst den DNS-Resolver also ganz einfach über den NetworkManager einrichten. Das geht entweder über die Kommandozeilen-GUI oder durch Bearbeiten der Konfigurationsdatei für jede Netzwerkschnittstelle.

Um den DNS-Resolver über die Kommandozeile einzurichten, kannst du nmcli verwenden. Führe den folgenden Befehl aus, um den DNS-Resolver für eine bestimmte Netzwerkschnittstelle einzurichten. Du kannst den Schnittstellennamen eth0 ersetzen.

sudo nmcli connection modify eth0 ipv4.dns "192.168.5.100"

Jede von NetworkManager verwaltete Schnittstelle hat eine eigene Konfigurationsdatei, die im Verzeichnis „/etc/NetworkManager/system-connections“ im Format „.nmconnection“ gespeichert ist.

Du kannst die Schnittstellenkonfiguration mit deinem bevorzugten Texteditor ändern und die folgenden Zeilen in den Abschnitt ‚[ipv4]‚ einfügen.

[ipv4]
dns=192.168.5.100
ignore-auto-dns=true
never-default=true

Wenn du lieber eine GUI-Anwendung verwendest, öffne die NetworkManager-Anwendung auf deinem Rechner und bearbeite den Schnittstellennamen, den du ändern möchtest. Klicke auf die Registerkarte „IPv4-Einstellungen“ und gib deinen lokalen DNS-Server ein. Klicke dann zur Bestätigung auf Speichern.

dns resolver guyide network manager

Für generische Ubuntu Server

Bei generischen Ubuntu-Servern wird das Netzwerk von netplan mit dem Backend-Dienst systemd-networkd verwaltet. Und für die Konfiguration des DNS-Resolvers wird systemd-networkd mit systemd-resolved verwendet. Um also einen DNS-Resolver auf einem allgemeinen Ubuntu-Server einzurichten, kannst du den Dienst systemd-resolved‚ verwenden.

Öffne die Konfigurationsdatei systemd-resolved mit deinem bevorzugten Editor. In diesem Beispiel wird der nano-Editor verwendet.

sudo nano /etc/systemd/resolved.conf

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

[Resolve]
DNS=192.168.5.100

Speichere und beende die Datei, wenn du fertig bist.

Führe nun den folgenden Befehl aus, um den Dienst systemd-resolved neu zu starten und die Änderungen zu übernehmen. Anschließend kannst du den Status des DNS-Resolvers mit dem resolvectl-Befehl (siehe unten) überprüfen.

sudo systemctl restart systemd-resolved
sudo resolvectl status

Bei Erfolg solltest du eine Ausgabe wie diese sehen – Der Standard-DNS-Resolver wurde auf die IP-Adresse des lokalen Unbound DNS-Servers 192.168.5.100 geändert.

dns resolver systemd aufgelöst

Testen des Unbound DNS Servers

Um sicherzustellen, dass der Unbound DNS als DNS-Resolver funktioniert, führe den folgenden dig-Befehl auf dem Ubuntu-Client-Rechner aus. Der Parameter„@192.168.5.100“ stellt sicher, dass du einen Unbound DNS Server verwendest, der auf der IP-Adresse„192.168.5.100“ läuft.

dig @192.168.5.100

Bei Erfolg 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.

verify dig dns server

Als Nächstes führst du den folgenden Befehl aus, um sicherzustellen, dass die Clients auf die Domänennamen im Internet 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, 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„1748“ und für„duckduckgo.com“ ist„999„.

Ausgabe für github.com:

github.com graben

Ausgabe für duckduckgo.com:

dig ducducgo before

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

Greife auf Github zu, nachdem der Cache gespeichert wurde:

dns cache verify

Zugriff auf duckduckgo, nachdem der Cache gespeichert wurde:

nach gespeichert

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

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

Ausgabe:

lokale Domänen überprüfen

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:

test ptr records

Du kannst 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 unter der IP-Adresse„192.168.5.100“ mit der 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:

Google graben

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

dns verschlüsselt mit DoT

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

Fazit

In dieser Anleitung hast du den Unbound Local DNS Server auf einem Ubuntu 22.04 Server installiert. Du hast den DNS-Cache aktiviert, DNSSEC (standardmäßig 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 Desktops und Servern ü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 …