Wie man einen lokalen DNS Resolver mit Dnsmasq auf Rocky Linux installiert
Dnsmasq ist ein kleiner und leichter DNS-Server für deine lokale Umgebung. Er kann als DNS-Server, DHCP-Server und TFTP-Server eingesetzt werden. Was den DNS-Server angeht, kann Dnsmasq als Forwarder, rekursiver DNS-Server und DNS-Caching-System eingesetzt werden. Er lädt auch DNS-Inhalte aus der Datei /etc/hosts, die es dir ermöglicht, Domänennamen für lokale Hostnamen einzurichten.
Dnsmasq ist so konzipiert, dass es leichtgewichtig ist und nur wenig Platz benötigt, so dass es für Geräte mit geringen Ressourcen wie Router und Firewalls geeignet ist. Dnsmasq hat geringe Systemanforderungen und verbraucht wenig Ressourcen. Es kann auf Linux, BSDs, Android und macOS ausgeführt werden.
In diesem Lernprogramm geht es um die Installation und Einrichtung eines lokalen DNS-Servers mit Dnsmasq auf einem Rocky Linux 9 Server. Du installierst Dnsmasq und richtest den lokalen DNS-Server mit einigen zusätzlichen Funktionen ein, z. B. dem Aktivieren lokaler Domainnamen, dem Einrichten von Subdomains über die Datei /etc/hosts und dem Aktivieren des DNS-Caches für schnelleren Zugriff. Zum Schluss aktivierst du den DHCP-Server über Dnsmasq.
Außerdem lernst du, wie du Client-Rechner so einrichtest, dass sie den lokalen DNS-Server als primären DNS-Resolver verwenden.
Voraussetzungen
Es gibt einige Voraussetzungen, die du erfüllen musst, bevor du loslegst. Im Folgenden findest du eine Liste der Voraussetzungen:
- Ein Rocky Linux 9 Server – In diesem Beispiel wird der Rocky Linux mit dem Hostnamen ‚dnsmasq-rocky‚ und der IP-Adresse ‚192.168.5.50‚.
- Ein Nicht-Root-Benutzer mit sudo/root-Administrator-Rechten.
- SELinux läuft mit ‚permissive‚ Modus.
Für die Client-Rechner kannst du jede beliebige Linux-Distribution verwenden. Du kannst Debian- oder RHEL-basierte Distributionen für die Client-Rechner verwenden.
System vorbereiten
Auf RHEL-basierten Betriebssystemen wird der Standard-DNS-Resolver „/etc/resolv.conf“ vom NetworkManager-Dienst erstellt. Bevor du Dnsmasq installierst, richtest du einen statischen DNS-Resolver über die Datei /etc/resolv.conf ein und deaktivierst den DNS-Resolver des NetworkManager-Dienstes.
Dazu öffnest du die NetworkManager-Konfigurationsdatei /etc/NetworkManager/NetworkManager.conf mit dem unten stehenden nano-Editor-Befehl.
sudo nano /etc/NetworkManager/NetworkManager.conf
Füge die Zeile„dns=none“ in den Abschnitt „[section]“ ein.
[main] dns=none
Speichere die Datei und schließe den Editor, wenn du fertig bist.
Als nächstes öffnest du die DNS-Resolver-Konfigurationsdatei „/etc/resolv.conf“ mit dem unten stehenden nano-Editor-Befehl.
sudo nano /etc/resolv.conf
Lösche alle vorhandenen Zeilen und ersetze sie durch die folgenden Zeilen. Damit verwendest du den öffentlichen DNS von Cloudflare und Google als Haupt-DNS-Server.
nameserver 1.1.1.1 nameserver 8.8.8.8
Speichere die Datei und beende sie, wenn du fertig bist.
Zum Schluss führst du den folgenden systemctl-Befehl aus, um den NetworkManager neu zu starten und die Änderungen zu übernehmen.
sudo systemctl restart NetworkManager
Wenn diese Einstellungen abgeschlossen sind, wird dein DNS-Resolver nicht mehr vom NetworkManager-Dienst geändert und du kannst ihn jederzeit hinzufügen oder ändern.
In den nächsten Schritten wirst du die Installation und Konfiguration von Dnsmasq auf Rocky Linux starten.
Installation von Dnsmasq auf Rocky Linux
In diesem Schritt installierst du das Dnsmasq-Paket auf einem Rocky Linux-Server. Dann startest du den Dnsmasq-Dienst und aktivierst ihn, damit er beim Hochfahren des Systems läuft.
Standardmäßig ist das Paket„dnsmasq“ im Rocky Linux AppStream Repository verfügbar. Führe den folgenden dnf-Befehl aus, um Informationen über das Paket„dnsmasq“ zu erhalten.
sudo dnf info dnsmasq
Dnsmasq v2.85 ist zum Zeitpunkt dieses Artikels auf Rocky Linux 9 verfügbar.
Führe nun den unten stehenden Befehl aus, um Dnsmasq zu installieren. Gib y ein, wenn du zur Bestätigung aufgefordert wirst, und drücke dann ENTER, um fortzufahren.
sudo dnf install dnsmasq dnsmasq-utils
Die Dnsmasq-Installation sollte jetzt gestartet werden.
Nach der Installation von Dnsmasq führst du den folgenden systemctl-Befehl aus, um den Dienst„dnsmasq“ zu starten und zu aktivieren. Wenn der unten stehende Befehl ausgeführt wird, sollte der„dnsmasq„-Dienst jetzt laufen und aktiviert sein. Er wird beim Hochfahren automatisch gestartet.
sudo systemctl start dnsmasq sudo systemctl enable dnsmasq
Überprüfe den„dnsmasq„-Dienst mit dem folgenden systemctl-Befehl.
sudo systemctl status dnsmasq
Du erhältst die folgende Ausgabe: Der Dienst„dnsmasq“ wird derzeit ausgeführt, ist aktiviert und wird beim Hochfahren automatisch gestartet.
Wenn Dnsmasq installiert ist und läuft, kannst du als Nächstes mit der Konfiguration von Dnsmasq beginnen, damit es als lokaler DNS-Server läuft.
Dnsmasq konfigurieren
In diesem Schritt richtest du Dnsmasq als lokalen DNS-Server mit einigen aktivierten Funktionen wie Cache-DNS und DHCP-Server ein und konfigurierst den Domainnamen und die Subdomains für lokale Anwendungen. So kann deine Anwendung über die lokalen Domainnamen/Subdomains erreichbar sein, z. B. ‚db1.hwdomain.io‚, ‚app.hwdomain.io‚, und viele mehr.
Um zu beginnen, führe den folgenden Befehl aus, um die Standard-Dnsmasq-Konfigurationsdatei nach „/etc/dnsmasq.conf.orig“ zu kopieren, und öffne dann die ursprüngliche Dnsmasq-Konfigurationsdatei „/etc/dnsmasq.conf“ mit dem unten stehenden nano-Editor-Befehl.
sudo cp /etc/dnsmasq.conf{,.orig} sudo nano /etc/dnsmasq.conf
Füge die folgenden Zeilen in die Datei ein.
# dnsmasq run on UDP port 53 # with IP address localhost and 192.168.5.50 # and network interface eth1 port=53 listen-address=127.0.0.1,192.168.5.50 interface=eth1 # disable forwarding of non-routed address # disable forwarding names without the main domain.com # automatically append the domain part to simple names # disable dnsmasq to read /etc/resolv.conf file domain-needed bogus-priv expand-hosts no-resolv # upstream DNS server for non-local domains # using Cloudflare and google public DNS server=1.1.1.1 server=8.8.8.8 # define the domain for dnsmasq domain=hwdomain.io address=/hwdomain.io/192.168.5.50 # enable DNS Cache and adjust cache-size cache-size=10000 # enable dhcp via dnsmasq # define lease db file # make the dhcp server as an authoritative dhcp-range=192.168.5.100,192.168.5.150,12h dhcp-leasefile=/var/lib/dnsmasq/dnsmasq.leases dhcp-authoritative
Speichere die Datei und beende den Editor, wenn du fertig bist.
Im Folgenden findest du die detaillierten Optionen, die du für deine Dnsmasq-Installation verwenden wirst:
- port: Der Port, über den du Dnsmasq ausführen willst.
- listen-address: Die IP-Adresse, über die du Dnsmasq laufen lassen willst. Du kannst mehrere IP-Adressen verwenden.
- interface: welche Schnittstelle der Dnsmasq binden und ausführen soll.
- domain-needed: Deaktiviere die Weiterleitung von Namen ohne die Hauptdomainadresse. Du kannst auf einen Host wie „mysql1“ zugreifen, es sei denn, du gibst die vollständige lokale Domain an, z. B. „mysql1.hwdomain.io“.
- bogus-priv: Deaktiviere die Weiterleitung für nicht geroutete Adressen.
- expand-hosts: Fügt automatisch den lokalen Domain-Teil an einfache Namen an.
- no-resolv: Ignoriere die Datei „/etc/resolv.conf“ auf dem Server.
- server: Lege den vorgelagerten DNS-Server fest, den du für nicht-lokale Adressen oder Domänen verwenden willst. In diesem Beispiel wird der Public DNS Server von Cloudflare und Google verwendet.
- domain: Definiere den Domainnamen für den Dnsmasq-Server. In diesem Beispiel erhält der Dnsmasq-Server die lokale Domain hwdomain.io.
- Adresse: Definiere die IP-Adresse für den Domainnamen auf Dnsmasq. In diesem Beispiel wird die Domain hwdomain.io zur IP-Adresse 192.168.5.50 aufgelöst.
- cache-size: aktiviert den DNS-Cache auf Dnsmasq. Achte darauf, dass du die Größe anpasst, denn das erhöht die Leistung und Geschwindigkeit.
- dhcp-range: aktiviere den DHCP-Server über den Dnsmasq. Passe den IP-Adresspool für dein Netzwerk und die Lease Time an.
- dhcp-leasefile: Lege die Datei fest, in der die DHCP-Leases gespeichert werden sollen.
- dhcp-authoritative: Erstelle den DHCP-Server als autorisierend.
Als Nächstes öffnest du die Datei„/etc/hosts“ mit dem unten stehenden Befehl nano editor. Du wirst nun einige Subdomains für Anwendungen in deiner lokalen Umgebung definieren.
sudo nano /etc/hosts
Füge die folgenden Zeilen in die Datei ein. In diesem Beispiel erstellst du drei Subdomains wiki, mysqlund Dateien. Jede Subdomain wird der Hauptdomain des Dnsmasq-Servers „hwdomain.io“ folgen und auf eine bestimmte IP-Adresse zeigen.
Die Subdomain wiki.hwdomain.io wird auf die IP-Adresse ‚192.168.5.10‚, die Subdomain ‚mysql.hwdomain.io‚ wird auf die IP-Adresse ‚192.168.5.25‚, und die ‚files.hwdomain.io‚ wird auf die IP-Adresse ‚192.168.5.30‚.
192.168.5.10 wiki 192.168.5.25 mysql 192.168.5.30 files
Speichere die Datei und schließe den Editor, wenn du fertig bist.
Öffne nun die DNS-Resolver-Konfigurationsdatei„/etc/resolv.conf“ mit dem unten stehenden nano-Editor-Befehl.
sudo nano /etc/resolv.conf
Füge die folgenden Zeilen am Anfang der Datei ein. Achte darauf, dass du die IP-Adresse durch die IP-Adresse des Dnsmasq-Servers ersetzt.
nameserver 127.0.0.1 nameserver 192.168.5.50
Speichere die Datei und beende den Editor, wenn du fertig bist.
Führe nun den folgenden Befehl aus, um die Dnsmasq-Konfiguration zu überprüfen und sicherzustellen, dass du die richtige Konfiguration hast. Du erhältst die folgende Ausgabe:„dnsmasq: Syntaxprüfung OK„.
sudo dnsmasq --test
Zum Schluss führst du den folgenden systemctl-Befehl aus, um den Dienst „dnsmasq“ neu zu starten und die Änderungen zu übernehmen.
sudo systemctl restart dnsmasq
Damit hast du die Konfiguration von Dnsmasq als lokaler DNS-Server auf dem Rocky Linux System abgeschlossen. Außerdem hast du den Domainnamen für den Dnsmasq-Server und einige Subdomains in der Datei „/etc/hosts“ konfiguriert. Schließlich hast du den DNS-Cache und den DHCP-Server über den Dnsmasq aktiviert.
In den nächsten Schritten überprüfst du die Installation und Konfiguration des Dnsmasq-Servers.
Überprüfe die Dnsmasq-Installation
Nachdem die Dnsmasq-Konfiguration abgeschlossen ist, überprüfst du nun den Dnsmasq-Dienst selbst. Du überprüfst Dnsmasq, um sicherzustellen, dass es auf dem Standardport 50 läuft und der Dienst läuft. Dann überprüfst du den lokalen Domänennamen und die Subdomänen, die du mit dem Paket„dns-utils“ erstellt hast.
Führe den folgenden Befehl aus, um den offenen Port auf deinem System zu überprüfen. Überprüfe dann den Dienst„dnsmasq“ mit dem Dienstprogramm systemctl.
ss -tulpn | grep 53 sudo systemctl status dnsmasq
Du erhältst die folgende Ausgabe – Dnsmasq läuft auf dem Standardport 53 und der Dienststatus lautet „currently running“. Außerdem ist er aktiviert und wird beim Booten automatisch gestartet.
Als Nächstes führst du den unten stehenden dnf-Befehl aus, um das Paket „bind-utils“ auf deinem Rocky Linux Server zu installieren. Dieses Paket enthält mehrere Kommandozeilen-Tools zum Testen und zur Fehlerbehebung bei DNS-Servern.
sudo dnf install bind-utils
Gib y ein, wenn du dazu aufgefordert wirst und drücke ENTER, um fortzufahren.
Führe nun den folgenden dig-Befehl aus, um den Domainnamen für den Dnsmasq-Server zu überprüfen ‚hwdomain.io‚. Du solltest sehen, dass der ‚hwdomain.io‚ auf die Server-IP-Adresse ‚192.168.5.50‚.
dig hwdomain.io
Führe abschließend den folgenden Befehl aus, um die Subdomänen zu überprüfen, die du in der Datei„/etc/hosts“ definiert hast.
dig wiki.hwdomain.io +short dig mysql.hwdomain.io +short dig files.hwdomain.io +short
Du erhältst eine ähnliche Ausgabe wie diese – Die Sub-Domain wiki.hwdomain.io verweist auf die IP-Adresse 192.168.5.10die Subdomain mysql.hwdomain.io zeigt auf die IP-Adresse 192.168.5.25, und schließlich die Subdomain files.hwdomain.io auf die Server-IP-Adresse 192.168.5.30.
Mit diesen Ergebnissen hast du die Konfiguration von Dnsmasq als lokalen DNS-Server abgeschlossen. In den nächsten Schritten wirst du den DNS-Port über die Firewalld sichern.
Firewalld einrichten
In diesem Schritt richtest du die Firewalld ein, um den DNS-Service-Port zu öffnen und fügst die IP-Adressen des internen Netzwerks als Hauptquelle für den Zugriff auf den DNS-Service-Port zur Firewalld hinzu.
Führe den folgenden Befehl firewall-cmd aus, um den DNS-Dienst zur Firewalld hinzuzufügen. Füge dann die IP-Adressen des internen Netzwerks als Quelle hinzu.
sudo firewall-cmd --add-service=dns sudo firewall-cmd --add-source=192.168.5.0/24
Führe anschließend den folgenden Befehl aus, um die erstellten temporären Regeln zu speichern und die Firewalld neu zu laden, damit die Änderungen übernommen werden.
sudo firewall-cmd --runtime-to-permanent sudo firewall-cmd --reload
Überprüfe die Firewalld mit dem folgenden Befehl. Du solltest sehen, dass der DNS-Dienst zur Firewalld hinzugefügt wurde und dass die Quell-IP-Adresse des Netzwerks ebenfalls zur Firewalld hinzugefügt wurde.
sudo firewall-cmd --list-all
Ausgabe:
Einrichten des Clients (Debian- oder RHEL-basiert)
In diesem Schritt erfährst du, wie du sowohl Debian- als auch RHEL-basierte Distributionen so einrichtest, dass sie den lokalen DNS-Server nutzen, den du über Dnsmasq erstellt hast.
Für RHEL-basierte Distributionen
Füge eine neue Konfigurationsdatei für den NetworkManager„/etc/NetworkManager/conf.d/dns-servers.conf“ hinzu, indem du den unten stehenden nano-Editorbefehl verwendest.
sudo nano /etc/NetworkManager/conf.d/dns-servers.conf
Füge die folgenden Zeilen in die Datei ein und achte darauf, die IP-Adresse durch die IP-Adresse des Dnsmasq-Dienstes zu ersetzen. Mit dieser Konfiguration richtest du den Standard-DNS-Resolver für den Client ein, indem du die IP-Adresse des Dnsmasq-Servers verwendest. Dadurch wird automatisch die DNS-Resolver-Konfiguration in die Datei„/etc/resolv.conf“ geschrieben.
[global-dns-domain-*] servers=192.168.5.50
Speichere die Datei und beende den Editor, wenn du fertig bist.
Als Nächstes führst du den folgenden systemctl-Befehl aus, um den NetworkManager-Dienst neu zu starten und die Änderungen zu übernehmen.
sudo systemctl restart NetworkManager
Du kannst die Datei „/etc/resolv.conf“ anzeigen, um die Einstellungen zu überprüfen. Du solltest sehen, dass der Standard-Nameserver der lokale Dnsmasq-Server mit der IP-Adresse 192.168.5.50 ist.
cat /etc/resolv.conf
Als nächstes führst du den folgenden dnf-Befehl aus, um die bind-utils‘ Paket auf deinem System zu installieren.
sudo dnf install bind-utils
Für Debian-basierte Distributionen
Wenn du ein Debian-basiertes Betriebssystem verwendest, kannst du den DNS-Resolver manuell einrichten und den Dienst „systemd-resolved“ auf deinem System deaktivieren – insbesondere bei Ubuntu.
Führe den folgenden Befehl aus, um den systemd-resolved-Dienst zu stoppen und zu deaktivieren.
sudo systemctl disable --now systemd-resolved
Führe nun den folgenden Befehl aus, um die Symlink-Datei der DNS-Resolver-Konfiguration „/etc/resolv.conf“ zu entfernen. Erstelle dann eine neue Resolver-Konfigurationsdatei„/etc/resolv.conf“ mit dem unten stehenden nano-Editor-Befehl.
unlink /etc/resolv.conf sudo nano /etc/resolv.conf
Füge die folgende Zeile in die Datei ein und ändere die IP-Adresse mit der IP-Adresse deines Dnsmasq-Servers.
nameserver 192.168.5.50
Speichere die Datei und beende den Editor, wenn du fertig bist.
Als Nächstes führst du den unten stehenden apt-Befehl aus, um das Paket„dnsutils“ auf deinem System zu installieren.
sudo apt install dnsutils
Sobald „bind-utils“ oder „dns-utils“ installiert ist, kannst du die Konfiguration deines Dnsmasq mit dem Befehl dig überprüfen.
Überprüfe den Domainnamen des Dnsmasq-Servers ‚hwdomain.iomit dem unten stehenden dig-Befehl. Du solltest sehen, dass die Domain ‚hwdomain.io‚ auf die IP-Adresse des Dnsmasq-Servers zeigt 192.168.5.50.
dig hwdomain.io
Als Nächstes überprüfst du die Subdomains, die du in der Datei „/etc/hosts“ konfiguriert hast, mit dem folgenden Befehl. Du solltest sehen, dass jede Subdomain auf die IP-Adresse zeigt, die du in der Datei „/etc/hosts “ konfiguriert hast.
dig wiki.hwdomain.io +short dig mysql.hwdomain.io +short dig files.hwdomain.io +short
Du erhältst die folgende Ausgabe – Die Subdomain wiki.hwdomain.io zeigt auf die IP-Adresse 192.168.5.10die Subdomain mysql.hwdomain.io verweist auf die IP-Adresse 192.168.5.25und schließlich die Sub-Domain files.hwdomain.io auf die Server-IP-Adresse 192.168.5.30.
Damit sind der lokale Domain-Name und die Sub-Domains erfolgreich konfiguriert. Wie sieht es nun mit öffentlichen Domainnamen wie Github.com usw. aus?
Führe den folgenden Befehl aus, um die Internet-Domänennamen von deinem Client-Rechner aus zu überprüfen. Damit stellst du sicher, dass du dich mit dem Internet verbinden kannst, auch wenn der lokale DNS auf dem Dnsmasq-Server aufgelöst wurde.
dig github.com
Du erhältst eine ähnliche Ausgabe wie diese – Die dig-Abfrage zu github.com wird über den lokalen DNS-Server mit der IP-Adresse 192.168.5.50 und dem Standardport 53 ausgeführt.
Überprüfe abschließend die DNS-Cache-Einstellungen mit dem unten stehenden dig-Befehl. Dieser zeigt dir die Statistiken der ausgeführten Abfrage an, einschließlich der„Abfragezeit“ für den Ziel-Domainnamen.
dig +noall +stats duckduckgo.com dig +noall +stats duckduckgo.com
Du erhältst dann eine ähnliche Ausgabe wie diese – Die erste Abfrage, die du erhältst, ist die ‚Abfragezeit‚ in 63 ms. Bei der zweiten und dritten Abfrage beträgt die Abfragezeit jedoch 2 ms, was bedeutet, dass deine Abfragen an denselben Domainnamen über den lokalen DNS-Server von Dnsmasq zwischengespeichert werden.
Fazit
In diesem Tutorial hast du deinen eigenen lokalen DNS-Server mit Dnsmasq erstellt. Du hast deinen eigenen DNS Server für deine lokale Umgebung mit Dnmasq auf einem Rocky Linux 9 Server eingerichtet. Dazu gehörte auch die Konfiguration von Dnsmasq mit lokalen Domainnamen und Subdomains, die Aktivierung des DNS-Caches, um schneller zu werden, und die Aktivierung des DHCP-Servers über Dnsmasq.
Schließlich hast du auch Client-Rechner (Debian- und RHEL-basierte Distributionen) hinzugefügt und konfiguriert, um den von dir erstellten lokalen DNS-Server zu nutzen. Dabei hast du auch gelernt, wie du den DNS-Server mit dem dig-Befehl auf Fehler überprüfen kannst und wie du einen DNS-Resolver auf einem Linux-System einrichtest.