Einen lokalen DNS-Resolver mit Dnsmasq unter Debian 12 installieren

Dnsmasq ist ein kleiner und leichter Netzwerkdienst für deine lokale Umgebung (LAN). Er bietet Netzwerkdienste wie DNS, DHCP und TFTP. Dnsmasq kann als DNS-Forwarder, rekursiver DNS-Server und DNS-Caching-System verwendet werden. Es 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 Speicherplatz benötigt, so dass es sich für Geräte mit geringen Ressourcen wie Router und Firewalls eignet. Dnsmasq kann auf Linux, BSDs, Android und macOS ausgeführt werden.

In dieser Anleitung installieren und konfigurieren wir einen lokalen DNS-Server mit Dnsmasq auf einem Debian 12-Server. Wir werden einen lokalen DNS-Server einrichten, der für dein lokales Netzwerk verwendet werden kann, lokale Domainnamen hinzufügen, den DNS-Cache aktivieren und den DHCP-Server über Dnsmasq aktivieren. Außerdem lernst du, wie du einen Client-Rechner einrichtest und hinzufügst, um den lokalen DNS-Server zu nutzen. Wenn du dieses Tutorial abgeschlossen hast, kannst du auf alle deine Anwendungen über den lokalen Domainnamen zugreifen und deine DNS-Anfragen werden schneller sein, weil du den DNS-Cache aktiviert hast.

Vorraussetzungen

Bevor du anfängst, musst du die folgenden Voraussetzungen erfüllen, um diesen Lehrgang durchzuführen:

  • Ein Debian 12-Server – Dieses Beispiel verwendet einen Debian-Server mit dem Hostnamen ‚dnsmasq-server‚ und der IP-Adresse 192.168.5.20.
  • Ein Nicht-Root-Benutzer mit sudo/root-Administrator-Rechten.

Für den Client-Rechner kannst du eine beliebige Linux-Distribution verwenden, da die DNS-Konfiguration bei allen Distributionen ähnlich ist.

Vorbereiten des Systems

In diesem Schritt bereitest du deinen Debian-Server vor, der als lokaler DNS-Server verwendet werden soll. Du aktualisierst den Paketindex, stoppst und deaktivierst den Dienst„systemd-resolved“ und legst dann die statische DNS-Resolver-Konfiguration in der Datei„/etc/resolv.conf“ fest.

Auf dem Debian-System wird der DNS-Resolver vom Dienst „systemd-resolved“ verwaltet, der die Auflösung von Netzwerknamen über die D-BUS-Schnittstelle ermöglicht. Um eine DNS-Server-Software wie Dnsmasq einzurichten, musst du den„systemd-resolved„-Dienst deaktivieren.

Bevor du loslegst, führe den folgenden apt-Befehl aus, um deinen Debian-Paketindex zu aktualisieren und aufzufrischen.

sudo apt update

Als Nächstes führst du den unten stehenden Befehl aus, um den Dienst„systemd-resolved“ zu beenden und zu deaktivieren. Auf dem Debian-System wird die DNS-Konfiguration durch den NetworkManager und den systemd-resolved-Dienst verwaltet.

sudo systemctl disable --now systemd-resolved
sudo systemctl stop systemd-resolved

Entferne die Link-Datei der DNS-Resolver-Konfiguration „/etc/resolv.conf“ mit dem folgenden Befehl.

sudo unlink /etc/resolv.conf

Erstelle danach eine neue DNS-Resolver-Konfigurationsdatei„/etc/resolv.conf“ mit dem unten stehenden nano-Editor-Befehl.

sudo nano /etc/resolv.conf

Füge die folgenden Zeilen in die Datei ein. Damit fügst du den öffentlichen DNS von Cloudflare und Google als Resolver für deinen Debian-Server hinzu.

nameserver 1.1.1.1
nameserver 8.8.8.8

Speichere die Datei und schließe den Editor, wenn du fertig bist. Gehe nun zu den nächsten Schritten für die Installation und Konfiguration von Dnsmasq über.

bereite das System vor

Installieren und Konfigurieren von Dnsmasq

In diesem Schritt installierst und richtest du den lokalen DNS-Server mit Dnsmasq ein. Du richtest Dnsmasq so ein, dass es mit dem Standard-DNS-Port 53 und der internen IP-Adresse„192.168.5.20“ läuft. Außerdem legst du den Domänennamen für den Dnsmasq-Dienst fest, aktivierst den DNS-Cache und aktivierst den DHCP-Server über den Dnsmasq.

Das Standardpaket„dnsmasq“ ist im Debian-Repository verfügbar. Führe den folgenden apt-Befehl aus, um das Dnsmasq-Paket zu installieren.

sudo apt install dnsmasq

Wenn du dazu aufgefordert wirst, gib zur Bestätigung y ein und drücke ENTER, um fortzufahren.

dnsmasq installieren

Nachdem Dnsmasq installiert ist, führe den folgenden systemctl-Befehl aus, um den Dienst „dnsmasq“ zu überprüfen und sicherzustellen, dass der Dienst aktiviert ist und läuft.

sudo systemctl is-enabled dnsmasq
sudo systemctl status dnsmasq

Du erhältst eine ähnliche Ausgabe wie diese – Der dnsmasq-Dienst ist aktiviert und wird beim Booten automatisch ausgeführt. Und der aktuelle Status des dnsmasq-Dienstes ist running.

dnsmasq verifizieren

Wenn Dnsmasq auf deinem Debian-System läuft, musst du als Nächstes die Dnsmasq-Konfiguration über die Datei „/etc/dnsmasq.conf“ starten.

Um zu beginnen, führe den folgenden Befehl aus, um die Standardkonfigurationsdatei von Dnsmasq zu sichern.

sudo cp /etc/dnsmasq.conf{,.orig}

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

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.20
# and network interface eth1
port=53
listen-address=127.0.0.1,192.168.5.20
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 domain names
# 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.20

# enable DNS Cache and adjust cache-size
cache-size=1000

# enable DHCP via dnsmasq
# define lease db file
# make the dhcp server as an authoritative
dhcp-range=192.168.5.80,192.168.5.150,12h
dhcp-leasefile=/var/lib/misc/dnsmasq.leases
dhcp-authoritative

Speichere die Datei und schließe den Editor, wenn du fertig bist.

Gib die Optionen an, die du für Dnsmasq verwenden wirst:

  • port: den Port, den du für die Ausführung von Dnsmasq verwenden 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.20 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: Legt den DHCP-Server als autorisierend fest.

dnsmasq config

Als Nächstes öffnest du die Konfigurationsdatei „/etc/hosts“ mit dem unten stehenden nano-Editor-Befehl. Du kannst die Subdomain für deine internen Anwendungen definieren und sie wird automatisch mit dem Dnsmasq-Domainnamen„hwdomain.io“ konfiguriert.

sudo nano /etc/hosts

Füge die folgenden Zeilen in die Datei ein. In diesem Beispiel definierst du die Subdomain app1, db1 und files. Die Root-Domain für diese Sub-Domains ist der Dnsmasq-Server selbst„hwdomain.io„.

Mit den folgenden Zeilen wird‚app1.hwdomain.io‚ auf die IP-Adresse‚192.168.5.10‚ aufgelöst, die Subdomain‚db1.hwdomain.io‚ wird auf die Server-IP-Adresse‚192.168.5.25‚ verwiesen und die Subdomain ‚files.hwdomain.io‚ auf die IP-Adresse ‚192.168.5.50‚.

192.168.5.10 app1
192.168.5.25 db1
192.168.5.50 files

Speichere die Datei und schließe den Editor, wenn du fertig bist.

Als nächstes öffnest du die Datei„/etc/resolv.conf“ mit dem folgenden nano-Editor-Befehl und fügst die IP-Adresse des Dnsmasq-Servers als„Nameserver“ hinzu.

sudo nano /etc/resolv.conf

Füge die folgenden Zeilen am Anfang der Datei hinzu. Achte darauf, dass du die IP-Adresse durch die IP-Adresse des Dnsmasq-Servers ersetzt.

nameserver 127.0.0.1
nameserver 192.168.5.20

Speichere die Datei und schließe den Editor, wenn du fertig bist.

Führe nun den Befehl „dnsmasq“ aus, um die Dnsmasq-Konfiguration zu überprüfen und sicherzustellen, dass du das richtige Format eingestellt hast. Du solltest die folgende Ausgabe erhalten:„dnsmasq – Syntaxprüfung OK„.

sudo dnsmasq --test

Zum Schluss führst du den Befehl systemctl aus, um den Dienst„dnsmasq“ neu zu starten und die Änderungen zu übernehmen.

sudo systemctl restart dnsmasq

verifiziere dnsmasq und konfiguriere es

Damit hast du die Konfiguration des lokalen DNS-Servers über Dnsmasq auf dem Debian-System abgeschlossen. Außerdem hast du den lokalen Domainnamen und die Subdomains konfiguriert, den DNS-Cache aktiviert und den DHCP-Server über Dnsmasq eingerichtet.

In den nächsten Schritten überprüfst du die Installation und Konfiguration deines Dnsmasq-Servers.

Überprüfen der Dnsmasq-Installation

In diesem Schritt überprüfst du die Dnsmasq-Installation, indem du den Dnsmasq-Dienst und den LISTEN-Port auf deinem System überprüfst. Dann überprüfst du den lokalen Domainnamen und die Subdomains, die du in der Datei „/etc/hosts“ konfiguriert hast.

Führe den folgenden Befehl aus, um sicherzustellen, dass der Dnsmasq-Dienst auf Port 53 läuft. Überprüfe dann den Status des Dnsmasq-Dienstes mit dem Befehl systemctl.

ss -tulpn | grep 53
sudo systemctl status dnsmasq

Du erhältst eine ähnliche Ausgabe wie diese – Der Dnsmasq-Dienst läuft auf dem Standardport 53, ist aktiviert und wird beim Booten automatisch ausgeführt.

dnsmasq-Dienst überprüfen

Als Nächstes überprüfst du den Domainnamen und die Subdomains, die du in der Datei„/etc/hosts“ für Dnsmasq konfiguriert hast. Zuvor musst du jedoch mit dem folgenden apt-Befehl das Paket„dnsutils“ auf deinem System installieren. Das Paket „dnsutils“ enthält Kommandozeilen-Tools zum Testen der DNS-Server-Konfiguration.

sudo apt install dnsutils

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

Nachdem die„dnsutils“ installiert sind, führe den folgenden dig-Befehl aus, um den Domainnamen und die Subdomains zu überprüfen, die du konfiguriert hast.

Überprüfe die Dnsmasq-Hauptdomain„hwdomain.io„, die auf die IP-Adresse des Dnsmasq-Servers „192.168.5.20“ zeigt.

dig hwdomain.io

Testen mit dem Befehl dig

Überprüfe die Subdomains, die du in der Datei „/etc/hosts“ definiert hast, mit dem unten stehenden Befehl dig.

dig app1.hwdomain.io +short
dig db1.hwdomain.io +short
dig files.hwdomain.io +short

Die Subdomain„app1.hwdomain.io “ zeigt auf die IP-Adresse„192.168.5.10„, die Subdomain„db1.hwdomain.io“ zeigt auf die IP-Adresse„192.168.5.25“ und„files.hwdomain.io“ zeigt auf die IP-Adresse„192.168.5.50„.

Unten siehst du die ähnliche Ausgabe, die du erhalten wirst.

Subdomänen überprüfen

Jetzt hast du die Dnsmasq-Installation als lokalen DNS-Server auf einem Debian-Server konfiguriert und getestet. In den nächsten Schritten wirst du Dnsmasq mit der UFW-Firewall einrichten und absichern.

Einrichten der UFW-Firewall

Jetzt richtest du die Firewall auf deinem lokalen DNS-Server ein. Du sicherst die Dnsmasq-Installation, indem du den Zugriff auf den DNS-Server über die UFW-Firewall einschränkst.

Führe den folgenden apt-Befehl aus, um die UFW-Firewall auf deinem Debian-System zu installieren.

sudo apt install ufw -y

ufw firewall installieren

Nach der Installation von UFW führst du den folgenden Befehl aus, um den OpenSSH-Dienst und den DNS-Port 53 zur UFW-Firewall hinzuzufügen. In diesem Beispiel gibst du die Quelle des Netzwerks an, das auf den Dnsmasq-Server zugreifen darf, nämlich das lokale Netzwerk mit der IP-Adresse 192.168.5.0/24‚.

Achte darauf, dass du die IP-Adressen des lokalen Netzwerks durch das Subnetz deines internen Netzwerks ersetzt.

sudo ufw allow OpenSSH
sudo ufw allow from 192.168.5.0/24 to any port 53 proto udp

Als nächstes führst du den folgenden Befehl aus, um die UFW-Firewall zu starten und zu aktivieren.

sudo ufw enable

Wenn du nach der Konfiguration gefragt wirst, gibst du zur Bestätigung y ein und drückst ENTER, um fortzufahren. Die UFW-Firewall sollte nun laufen und aktiviert sein und wird beim Hochfahren automatisch gestartet.

setup enable ufw

Führe abschließend den folgenden Befehl aus, um den Status der UFW-Firewall zu überprüfen. Du solltest sehen, dass die UFW-Firewall „aktiv“ ist und der OpenSSH-Dienst sowie der DNS-Port 53 zur Firewall hinzugefügt wurden.

sudo ufw status

ufw verifizieren

Wenn die UFW-Firewall konfiguriert ist, kannst du jetzt Clients hinzufügen, die sich mit deinem lokalen DNS-Server verbinden.

Client einrichten

In diesem Schritt richtest du den Client-Rechner mit einer Debian-basierten Distribution und dem Hostnamen„client“ ein. Du fügst den lokalen DNS-Server Dnsmasq auf dem Client-Rechner hinzu.

Führe den folgenden Befehl aus, um den Link der DNS Resolver-Konfigurationsdatei „/etc/resolv.conf“ zu entfernen. Erstelle dann eine neue Resolver-Konfigurationsdatei„/etc/resolv.conf„, indem du den nano-Editor ausführst.

sudo unlink /etc/resolv.conf
sudo nano /etc/resolv.conf

Gib die folgende Zeile in die Datei ein. Achte darauf, dass die IP-Adresse mit der IP-Adresse deines Dnsmasq-Servers übereinstimmt.

nameserver 192.168.5.20

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

Als Nächstes führst du den unten stehenden Befehl aus, um das Paket „dnsutils“ auf dem Client-Rechner zu installieren.

sudo apt install dnsutils

Setup-Client

Führe nun den Befehl dig aus, um den Domainnamen„hwdomain.io“ zu überprüfen, der auf die IP-Adresse des Dnsmasq-Servers zeigt.

dig hwdomain.io

Nachfolgend siehst du die Ausgabe, die du erhalten wirst.

Domäne vom Kunden verifizieren

Für Subdomains führst du den unten stehenden dig-Befehl aus. Jede Subdomain wird auf die IP-Adresse verwiesen, die in der Datei„/etc/hosts“ auf dem Dnsmasq-Server definiert ist.

dig app1.hwdomain.io +short
dig db1.hwdomain.io +short
dig files.hwdomain.io +short

Unten siehst du die ähnliche Ausgabe, die du auf dem Client-Rechner erhalten wirst.

Subdomänen überprüfen

Als Nächstes musst du sicherstellen, dass du den öffentlichen Domainnamen über den lokalen DNS-Server von Dnsmasq erreichen kannst. Das kannst du überprüfen, indem du den öffentlichen Domainnamen wie„github.com“ überprüfst.

dig github.com

Du erhältst eine Ausgabe, die diesem Screenshot ähnelt – unten in der Ausgabe solltest du sehen, dass deine Anfrage vom lokalen Dnsmasq DNS Server beantwortet wird, der auf„192.168.5.20“ mit dem Standardport„53“ läuft. Damit hast du dich erfolgreich über den lokalen DNS-Server von Dnsmasq mit dem öffentlichen Domainnamen verbunden.

sicherstellen, dass das DNS funktioniert

Zum Schluss überprüfst du den DNS-Cache mit den Befehlen „drill“ und „dig“. Der Befehl„drill“ ist Teil des Pakets„ldnsutils„, also führe den folgenden apt-Befehl aus, um es zu installieren.

sudo apt install ldnsutils

ldns installieren

Nach der Installation der ldnsutils führst du den unten stehenden Befehl drill aus, um den DNS-Cache zu überprüfen, den du auf dem Dnsmasq-Server konfiguriert hast.

drill duckduckgo.com | grep "Query time"
drill duckduckgo.com | grep "Query time"

Du erhältst eine Ausgabe wie im folgenden Screenshot – beim ersten Mal, wenn du die Anfrage stellst, beträgt die„Abfragezeit“ 60 ms. Beim zweiten Mal, wenn du dieselbe Domain anforderst, verringert sich die Abfragezeit auf 1 ms. Das bedeutet, dass die DNS-Anfrage auf dem lokalen DNS-Server Dnsmasq zwischengespeichert wird.

dns-cache überprüfen

Du kannst den DNS-Cache auch über den Befehl dig mit der Option„+stats“ überprüfen.

dig +noall +stats duckduckgo.com
dig +noall +stats duckduckgo.com

Damit hast du die Konfiguration des Client-Rechners abgeschlossen und sichergestellt, dass der lokale DNS-Server Dnsmas voll funktionsfähig ist, angefangen bei den lokalen Domänennamen und Subdomänen, die du in der Datei „/etc/hosts“ definiert hast, bis hin zum DNS-Cache, den du auf Dnsmasq aktiviert hast.

Fazit

In diesem Lernprogramm hast du deinen eigenen lokalen DNS-Server mit Dnsmasq erstellt. Du hast deinen eigenen lokalen DNS-Server für deine lokale Umgebung mit Dnmasq auf einem Debian 12-Server eingerichtet. Dazu gehörte auch die Konfiguration von Dnsmasq mit lokalen Domainnamen und Subdomains, die Aktivierung des DNS-Caches, um schnellere wiederkehrende DNS-Antworten zu erhalten, und die Aktivierung des DHCP-Servers über Dnsmasq.

Schließlich hast du auch den Client-Rechner hinzugefügt und so konfiguriert, dass er den von dir erstellten lokalen DNS-Server verwendet. Außerdem hast du gelernt, wie du DNS-Server mit dem dig-Befehl überprüfst und wie du einen DNS-Resolver auf einem Linux-System einrichtest.

Das könnte dich auch interessieren …