Dnsmasq

Dnsmasq ist ein schlanker DNS-Server. Ich nutze ihn, um im lokalen Netzwerk Namen von Computersystemen auflösen zu können, die nur lokal gültig sind. So rufe ich zum Beispiel unter Verwendung des Reverse Proxy caddy mein lokal betriebenes DMS, das auf Paperless NGX basiert, über die nur lokal gültige Domain dms.korte-kernke.koeln auf.



Installation und Basiskonfiguration

Ich bin auf meinem Server per SSH angemeldet und besitze auch die Sudo-Rechte (siehe hierzu: server-absichern.html). Die Installation ist unter Debian und Ubuntu Linux einfach mit dem Befehl:


sudo apt install dnsmasq
            
durchzuführen. Für die Konfiguration von Dnsmasq ist die Datei /etc/dnsmasq.conf da. Meine sieht so aus:

# Schnittstelle und Port
interface=eth0         
port=53

# Konfigurationen (auch) aus Dateien unter /etc/dnsmasq.d einlesen
conf-dir=/etc/dnsmasq.d

# Time To Lease auf 10 Minuten eingestellt, damit der lokale DNS-Cache
# nicht sofort von einem DNS-Server im Netz ueberschrieben wird
local-ttl=600

# Externe DNS-Server (fuer alles, was nicht kernke.lan ist)
server=8.8.8.8
server=1.1.1.1

# WICHTIG: Erlaube Anfragen aus dem lokalen Netz
bind-interfaces
listen-address=127.0.0.1,192.168.0.94

# Falls aeltere Windows-Clients im Netz unsinnige DNS-Anfragen absonder sollten,
# werden sie ignoriert:
filterwin2k

# Unvollstaendige Anfragen, die nicht nach einer Domain aussehen, werden ignoriert
domain-needed

# Verhindern, dass Anfragen nach privaten IP-Adressen (Reverse DNS fuerr 192.168.x.x)
# ins oeffentliche Internet gelangen.
bogus-priv
            
Die jeweiligen Parameter sind in den Kommentaren bereits erläutert.



Einrichtung von lokalen Adressdaten

Standardmäßig nutzt Dnsmasq die Datei /etc/hosts des Servers. Adressen, die dort eingetragen sind, werden auch an anfragende Clients herausgegeben. Hier könnte ich nun die Adressen pflegen, die im lokalen Netz aufgelöst werden sollen. Das kann aber schnell unübersichtlich werden. Darum schreibe ich die aufzulösenden Adressen in eine Datei unter dem Pfad /etc/dnsmasg.d auf dem Server. Dabei ist die Benennung der Datei eigentlich egal. Mehrere Dateien in diesem Verzeichnis würden in alphabetischer Reihenfolge eingelesen, was man wissen sollte, falls widersprüchliche Daten darin stehen (was man sinnvollerweise aber vermeiden sollte). Ich habe eine Datei lan.conf in dieses Verzeichnis geschrieben mit etwa folgendem Inhalt:


local=/home.korte-kernke.koeln/
address=/home.korte-kernke.koeln/192.168.1.65

local=/pve00.korte-kernke.koeln/
address=/pve00.korte-kernke.koeln/192.168.1.65

local=/pve01.korte-kernke.koeln/
address=/pve01.korte-kernke.koeln/192.168.1.65

local=/pbs.korte-kernke.koeln/
address=/pbs.korte-kernke.koeln/192.168.1.65
            
Die Angabe "local" dient dazu, dass Dnsmasq weiß, dass die Adressdaten für diese jeweilige Subdomain nicht im Internet gesucht werden sollen. Dann folgt der eigentliche Adresseintrag, wobei in diesem Beispiel alle Anfragen an die selbe Adresse geschickt werden. Das kommt daher, dass dort ein Reverseproxy auf entsprechende Anfragen reagiert (s. Caddy).

Viel mehr gibt es hier auch schon für meine Zwecke nicht mehr zu erläutern. Mit

sudo systemctl restart dnsmasq
            
starte ich den dnsmasq-Dienst neu und die Einstellungen sollten funktionieren. Nun muss man nur noch dafür sorgen, dass im lokalen Netzwerk auch wirklich dieser DNS-Server genutzt wird. Das kann normalerweise am Internet-Router, z.B. der Fritzbox eingetragen werden und sollte dann im gesamten LAN funktionieren.