Wie man einen lokalen DNS Resolver mit Unbound auf Rocky Linux 9 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 diesem Lernprogramm werde ich einen lokalen DNS-Server mit Unbound auf einem Rocky Linux 9 Server einrichten. Du wirst Unbound als autorisierenden, validierenden und rekursiven Caching-DNS konfigurieren. Darüber hinaus richtest du Unbound als DNS-Resolver für dein lokales Netzwerk ein und aktivierst DNS-over-TLS (DoT) darauf.

Am Ende dieses Tutorials richtest du außerdem Unbound-Logs über Rsyslog und Logrotate ein und richtest einen Linux-Client-Rechner ein, der Unbound als DNS-Resolver nutzt und von dem aus du deine gesamte Installation überprüfst.

Voraussetzungen

Bevor du mit diesem Lernprogramm beginnst, solltest du sicherstellen, dass du die folgenden Voraussetzungen erfüllst:

  • Ein Server mit installiertem Rocky Linux 9 – In diesem Beispiel wird ein Rocky Linux mit dem Hostnamen „unbound-rocky“ und der IP-Adresse „192.168.5.25“ verwendet.
  • Ein Nicht-Root-Benutzer mit Root/Sudo-Administrator-Rechten.
  • Ein SELinux läuft im permissiven Modus.

Und das war’s. Wenn alle Voraussetzungen erfüllt sind, kannst du damit beginnen, Unbound auf deinem Server zu installieren.

Installation von Unbound

Unbound ist eine DNS Server Software, die die meisten Betriebssysteme unterstützt, darunter Linux, BDS und macOS. Unter Rocky Linux ist das Unbound-Paket standardmäßig im offiziellen Rocky Linux AppStream Repository verfügbar.

In diesem ersten Schritt installierst du das Unbound-Paket auf deinem Rocky Linux-System.

Führe nun den unten stehenden dnf-Befehl aus, um zu überprüfen, ob das Paket„unbound“ im AppStream-Repository verfügbar ist. Zum Zeitpunkt der Erstellung dieses Artikels enthält das Rocky Linux AppStream Repository Unbound 1.16.

sudo dnf info unbound

Ausgabe:

Ungebundene Infopakete

Installiere Unbound mit dem unten stehenden dnf-Befehl. Wenn du dazu aufgefordert wirst, bestätige mit y und drücke ENTER, um fortzufahren.

sudo dnf install unbound

Ausgabe:

ungebunden installieren

Sobald Unbound installiert ist, starte und aktiviere den Dienst „unbound“ mit dem unten stehenden systemctl-Befehl. Dadurch wird Unbound auf deinem Rocky Linux Server gestartet und kann automatisch beim Systemstart ausgeführt werden.

sudo systemctl start unbound
sudo systemctl enable unbound

Überprüfe den Unbound-Dienst mit dem unten stehenden systemctl-Befehl. Die Ausgabe„active (running)“ bestätigt, dass der Unbound-Dienst läuft. Und die Ausgabe„loaded ….; enabled;...“ bestätigt, dass der Unbound-Dienst aktiviert ist.

sudo systemctl status unbound

Ausgabe:

ungebunden prüfen

Dein Unbound ist nun installiert und läuft mit der Standardkonfigurationsdatei„/etc/unbound/unbound.conf“. Als Nächstes änderst du die Unbound-Konfigurationsdatei„/etc/unbound/unbound.conf“ und richtest Unbound als autorisierenden, validierenden und rekursiven Caching-DNS ein und aktivierst Unbound als DNS-Resolver mit aktiviertem DoT.

Unbound konfigurieren

Standardmäßig befindet sich die Unbound-Konfigurationsdatei unter „/etc/unbound/unbound.conf“. In diesem Schritt wirst du die Konfigurationsdatei „/etc/unbound/unbound.conf“ ändern und die Unbound-Installation einrichten und optimieren.

Du richtest Unbound so ein, dass es als autoritativer, validierender und rekursiver Caching DNS läuft. Darüber hinaus optimierst du die Unbound-Installation im Hinblick auf Leistung, Datenschutz und Sicherheit. Und schließlich richtest du Unbound als DNS-Resolver für lokale Netzwerke ein.

Führe zunächst den folgenden wget-Befehl aus, um die Root-DNS-Datei nach„/etc/unbound/root.hints“ herunterzuladen. Dann änderst du den Eigentümer der Datei „/etc/unbound/root.hints“ auf den Benutzer und die Gruppe„unbound„.

wget https://www.internic.net/domain/named.root -O /etc/unbound/root.hints
sudo chown unbound:unbound /etc/unbound/root.hints

Als Nächstes erstellst du eine Sicherungskopie der standardmäßigen Unbound-Konfigurationsdatei„/etc/unbound/unbound.conf.orig“ und änderst die Originaldatei „/etc/unbound/unbound.conf“ mit dem unten stehenden nano-Editorbefehl.

sudo cp -v /etc/unbound/unbound{.conf,.conf.orig}
sudo nano /etc/unbound/unbound.conf

Jetzt können wir mit der Konfiguration von Unbound beginnen.

Unbound Grundkonfiguration

Zuerst legst du die IP-Adresse und den Port fest, auf dem der Unbound-Dienst laufen soll. Dann richtest du ein Zertifikatsbündel ein, das für die Authentifizierung von Verbindungen verwendet wird, und fügst die Root-DNS-Server über den Parameter „root-hints“ hinzu.

Füge die folgenden Zeilen in den Abschnitt„server:“ ein. Mit diesen Einstellungen lässt du Unbound auf einer lokalen IP-Adresse „192.168.5.25“ mit dem Standard-UDP-Port„53“ laufen.

server:
    ...
    ...
    # interface-automatic: no
    do-ip6: no
    interface: 192.168.5.25
    port: 53
    prefetch: yes

tls-cert-bundle: /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
root-hints: /etc/unbound/root.hints

Detailparameter:

  • do-ip6: Verwende‚yes‚, um Unbound mit IPv6 auszuführen oder setze’no‚, um IPv6 zu deaktivieren.
  • interface: Netzwerkschnittstelle oder IP-Adresse, über die Unbound ausgeführt wird. 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 diese Option auf‚yes‚, werden fast abgelaufene Einträge im Nachrichten-Cache vorgeholt.
  • tls-cert-bundle: Zertifikate, die zur Authentifizierung von Upstream-Verbindungen verwendet werden. Bei RHEL-basierten Distributionen befindet sich die Zertifikatsdatei unter „/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem“.
  • root-hints: eine Datei, die Angaben zum Root-DNS-Server enthält. Du hast diese Datei nach „/etc/unbound/root.hints“ heruntergeladen.

Aktiviere den DNS-Cache

Füge nun die folgenden Zeilen hinzu, um das rekursive Caching von DNS über Unbound zu aktivieren. Dadurch werden DNS-Anfragen, die von Clients auf dem Unbound-Server gestellt werden, in der angegebenen Zeit zwischengespeichert.

    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.

Abhärtung von Unbound

Einige Datenschutz- und Sicherheitsparameter für Unbound sind bei der RHEL-basierten Distribution standardmäßig aktiviert. Du kannst aber auch weitere Parameter wie diese Zeilen hinzufügen.

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

Detail-Parameter:

  • hide-identity: auf yes gesetzt, um Antworten von Bind-Anfragen über id.server oder hostname.bind zu deaktivieren.
  • hide-version: setzt du auf yes, um die Abfrage von version.server und version.bind zu deaktivieren.
  • use-caps-for-id: setzt du auf yes, um die Verwendung von „0x20-encoded“ in der Abfrage zu aktivieren, um Spoofing-Versuche zu verhindern.

Private Adress- und Zugriffskontrolllisten definieren

Als Nächstes musst du private Adressen und ACLs (Access Control Lists) für deine lokalen Netzwerke 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: 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„allow_snoop“ sowohl rekursive als auch nicht-rekursive Anfragen zulässt.

Einrichten des lokalen Domainnamens und der Sub-Domains

Nachdem du die private Adresse und die Zugriffskontrolllisten konfiguriert hast, legst du nun mit dem Unbound-Parameter „local-zone“ lokale Domänennamen an. Das ist sehr nützlich, vor allem wenn du mehrere selbst gehostete Anwendungen in deinem lokalen Netzwerk hast. Du kannst ganz einfach deinen Domainnamen oder Sub-Domains definieren und auf die jeweilige Ziel-IP-Adresse verweisen.

In diesem Beispiel richtest du eine„statische“ lokale Domain„garden.lan“ ein und erstellst mit dem Parameter„local-data“ mehrere Sub-Domains. 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 Optimierungen und Tweaks

Als Nächstes fügst du die folgenden Zeilen hinzu, um deine Unbound-Installation zu optimieren. Du kannst die folgenden Parameter je nach deiner aktuellen Umgebung anpassen und optimieren.

    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:

  • msg-cache-slabs: Die Anzahl der Slabs, die für den Nachrichten-Cache verwendet werden sollen. Setze sie 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) als vorgelagerter DNS-Resolver 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 alles fertig ist.

Als Nächstes führst du den folgenden Befehl aus, um die Unbound-Konfigurationen zu überprüfen und sicherzustellen, dass du die richtige Konfiguration hast. Wenn du erfolgreich bist, solltest du die Ausgabe„unbound-checkconf: no errors in /etc/unbound/unbound.conf“ erhalten.

unbound-checkconf

Einrichtung ungebunden

Starte nun den Unbound-Dienst über den systemctl-Befehl neu und wende die Änderungen an.

sudo systemctl restart unbound

Damit hast du die Konfiguration von Unbound abgeschlossen und der Dienst läuft jetzt unter der IP-Adresse„192.168.5.25“ mit dem Standard-UDP-Port„53„.

In den nächsten Schritten richtest du die Firewalld ein, um den DNS-Port zu öffnen und die Unbound-Protokollierung über Rsyslog und Logrotate einzurichten.

Firewalld einrichten

Der Unbound läuft also auf dem Standard-UDP-Port 53. Jetzt musst du den DNS-Port 53/UDP in der Firewalld öffnen und den Clients den Zugriff auf deinen Unbound DNS Server ermöglichen.

Führe den unten stehenden Befehl firewall-cmd aus, um den neuen Dienst„dns“ hinzuzufügen. Lade dann die Firewalld neu, um die Änderungen zu übernehmen. Wenn du erfolgreich bist, solltest du eine Ausgabe wie„success“ auf deinem Terminal erhalten.

sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --reload

Als nächstes führst du den folgenden Befehl aus, um die Liste der aktivierten Dienste in der Firewalld zu überprüfen. Du solltest sehen, dass der Dienst„dns“ zur Firewalld hinzugefügt wurde.

sudo firewall-cmd --list-all

Ausgabe:

firewalld einrichten

Einrichten von Unbound Log über Rsyslog und Logrotate

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

Erstelle eine neue 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 erstellt Rsyslog eine neue Protokolldatei ‚/var/log/unbound.log‘ für den‚$Programmname‘ == ‚unbound‚.

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

Speichere und beende die Datei„/etc/rsyslog.d/unbound.conf„, wenn du fertig bist.

Als Nächstes erstellst du eine neue Logrottate-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.

Zum Schluss führst du den folgenden systemctl-Befehl aus, um die Dienste Rsyslog und Logrotate neu zu starten und die Änderungen in deinem System zu übernehmen.

sudo systemctl restart rsyslog
sudo systemctl restart logrotate

Damit hast du die Installation von Unbound abgeschlossen. Im nächsten Schritt erfährst du, wie du einen lokalen Client-Rechner so einrichtest, dass er Unbound als DNS-Resolver verwendet.

ungebundenes Protokoll über rsyslog und logrotate einrichten

DNS-Resolver für den Client einrichten

Um den DNS-Resolver auf einem Client-Rechner einzurichten, kannst du verschiedene Methoden verwenden. In diesem Schritt erfährst du, wie du DNS-Resolver über NetworkManager und über systemd-resolved in Kombination mit NetworkManager einrichtest.

Über NetworkManager

Wenn du den DNS-Resolver direkt über den NetworkManager einrichten willst, musst du die Konfigurationen deiner Netzwerkschnittstellen bearbeiten, die im Verzeichnis„/etc/NetworkManager/system-connections/“ gespeichert sind.

In diesem Beispiel ist die Hauptverbindung für den Client-Rechner„eth0„, also sollte die Konfiguration im NetworkManager „/etc/NetworkManager/system-connections/eth0.nmconnection“ lauten. Du kannst auch andere Schnittstellennamen haben, z. B. eth1 und viele andere.

Öffne die NetworkManager-Schnittstellenkonfigurationsdatei‚/etc/NetworkManager/system-connections/eth0.nmconnection‚ mit dem unten stehenden nano-Editor-Befehl.

sudo nano /etc/NetworkManager/system-connections/eth0.nmconnection

Füge die folgenden Zeilen in den Abschnitt „[ipv4]“ ein. Achte außerdem darauf, dass du die IP-Adresse im Parameter„dns“ durch deinen Unbound DNS Server ersetzt.

[ipv4]
...
dns=192.168.5.25
ignore-auto-dns=true

Speichere und beende die Datei, wenn du fertig bist.

dns-Auflöser über den Netzwerkmanager

Führe anschließend den folgenden systemctl-Befehl aus, um den NetworkManager-Dienst neu zu starten und die Änderungen zu übernehmen. Überprüfe dann die DNS-Resolver-Konfigurationsdatei „/etc/resolv.conf“ mit dem Befehl cat.

sudo systemctl restart NetworkManager
cat /etc/resolv.conf

Du solltest eine Ausgabe erhalten, dass die IP-Adresse„192.168.5.25“ als Standard-DNS-Resolver für deinen Client-Rechner konfiguriert ist.

dns-Auflöser über den Netzwerkmanager

Über systemd-resolved und NetworkManager

Eine andere Möglichkeit, einen DNS-Resolver einzurichten, ist über systemd-resolved und den NetworkManager. Damit kannst du den DNS-Resolver einfach systemweit ändern und bist nicht von den Netzwerkschnittstellen deines Systems abhängig.

Auf RHEL-basierten Distributionen ist systemd-resolved noch nicht installiert. Du kannst es ganz einfach mit dem unten stehenden dnf-Befehl installieren. Wenn du dazu aufgefordert wirst, gib y zur Bestätigung ein und drücke ENTER, um fortzufahren.

sudo dnf install systemd-resolved

Ausgabe:

systemd-aufgelöst installieren

Nachdem systemd-resolved installiert ist, öffne die Konfigurationsdatei„/etc/systemd/resolved.conf“ mit dem unten stehenden nano-Editor-Befehl.

sudo nano /etc/systemd/resolved.conf

Entferne im Abschnitt „[Resolver]“ die Markierung des Parameters„DNS“ und füge die IP-Adresse deines Unbound DNS-Servers hinzu.

[Resolver]
DNS=192.168.5.25

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

systemd-aufgelöst konfigurieren

Überprüfe nun den Dienst„systemd-resolved„, um sicherzustellen, dass der Dienst läuft. Du solltest eine Ausgabe wie„active (running)“ erhalten, die bestätigt, dass der Dienst läuft. Und die Ausgabe „Loaded ../../systemd-resolved.service; enabled;…“ bestätigt, dass der Dienst aktiviert ist und beim Systemstart automatisch gestartet wird.

sudo systemctl status systemd-resolved

Ausgabe:

systemaufgelöst verifizieren

Wenn systemd-resolved läuft, änderst du als Nächstes das DNS-Backend für den NetworkManager-Dienst.

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

sudo nano /etc/NetworkManager/NetworkManager.conf

Füge unter dem Abschnitt „[main]“ den Parameter„dns“ mit dem Wert„systemd-resolved“ hinzu. Dadurch wird der DNS-Server deines NetworkManagers überschrieben und der Dienst„systemd-resolved“ verwendet.

[main]
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. Der neue DNS-Resolver für NetworkManager wird in der Datei„/run/NetworkManager/resolv.conf“ eingetragen.

sudo systemctl restart NetworkManager

Führe den folgenden Befehl aus, um die Standarddatei „/etc/resolve.conf“ zu entfernen. Erstelle dann einen neuen Symlink von„/run/NetworkManager/resolv.conf“ zu„/etc/resolv.conf„.

rm -f /etc/resolv.conf
ln -s /run/NetworkManager/resolv.conf /etc/resolv.conf

Damit verwendet dein Client-Rechner nun systemd-resolved als DNS-Auflöser. Hinter„systemd-resolved“ verwendest du den Unbound DNS Server.

Nachfolgend siehst du die Details der Datei „/etc/resolv.conf“ nach der Verwendung von systemd-resolved und NetworkManager.

cat /etc/resolv.conf

Ausgabe:

dns-Auflöser über systemd-resolved

Überprüfung 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.25“ stellt sicher, dass du einen Unbound DNS Server verwendest, der unter der IP-Adresse„192.168.5.25“ läuft.

dig @192.168.5.25

Bei Erfolg erhältst du eine Antwort vom Root-DNS-Server wie in der folgenden Ausgabe. 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 auf die Domänennamen im Internet zugreifen können.

dig google.com
dig fb.com

Bei Erfolg solltest du eine Ausgabe mit Details zu den DNS-Einträgen für die Domänen„google.com“ und„fb.com“ erhalten. Du kannst sehen, dass der DNS-Resolver, der auf die Abfrage antwortet,„127.0.0.53#53“ ist, was der systemd-resolved ist, der Unbound als Standardresolver verwendet. Außerdem kannst du die„Abfragezeit“ für jede Abfrage sehen. Die„Abfragezeit“ für die Domain„google.com“ beträgt„74 ms“ und für„fb.com„154 ms„.

Ausgabe für google.com:

googeln.de

Ausgabe für fb.com:

dig fb.com

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

dig google.com
dig fb.com

Ausgabe:

dig google.com nach cached

dig fb.com after cached

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ä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:

Überprüfe die Aufzeichnungen von ptr

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

sudo dnf 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 auf der IP-Adresse„192.168.5.25“ 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 twitter.com

Ausgabe:

DNS-over-TLS verifizieren

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

DNS-over-TLS verifizieren tcpdump

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

Fazit

In dieser Anleitung hast du Unbound Local DNS Server auf einem Rocky Linux 9 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 RHEL-basierten Distributionen über NetworkManager und systemd-resolved einrichtest. Außerdem hast du die grundlegende Verwendung des dig-Befehls zur Überprüfung des DNS-Servers gelernt.

Das könnte dich auch interessieren …