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:
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:
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:
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
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:
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.
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.
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.
Ü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:
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
Ü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:
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:
Ü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.
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:
Ausgabe für 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:
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:
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:
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.
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:
Gehe danach zurück zum Unbound-Server und du solltest jetzt eine ähnliche Ausgabe wie diese auf der tcpdump-Ausgabe erhalten.
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.