dnsmasq 21-08-18/12:07

Eigener Nameserver mit DNSMASQ

Ich hatte vor kurzem das Problem das eine (existentiell wichtige ) Webanwendung nur auf Basis vom "absoluten Pfad" lauffähig ist. Was in einem Intranet mit VPN-Clients stellenweise zu großen Problemen führt, da 10.x.x.x eben nicht 192.x.x.x ist. In Zeiten von Web 3.0 ist es aus meiner Sicht eigentlich ein Unding noch absolute Pfade zu verweden. Im folgen Szenario blieben "auf die Schnelle" nur zwei Möglichkeiten. Entweder besagte Anwendung umschreiben (was sich als nicht wirklich effektiv erwiesen hat, da es sich um ein komplettes Framework handelt) oder aber einen eigenen Nameserver stellen, welcher alle Anfragen an eine lokale Domain weiterleitet. Letzteres hat langfristig gesehen sogar mehrere Vorteile. 

Die Anleitung bezieht sich auf Debian 8.0 - verhält sich aber auf fast allen Linux Distributionen gleich. Im folgenden Szenario hat der Host/Server eine statische IP (z.B. 192.168.178.xxx) vom DHCP des Routers. Dnsmasq kann ebenfalls als eigenständiger DHCP fungieren, wir benötigen jedoch nur den DNS-Server.

 Aufgabe: Lokale & VPN-Clients sollen Zugriff auf Webanwendungen mit absolutem Pfad haben
Ziel: Eigener DNS-Server im Intranet, welcher alle Anfragen auf die interne Domain leitet 
cheeky Bonus: Keine lästigen IP-Adressen mehr ^^


Dnsmasq installieren:

apt-get install dnsmasq

Die Konfiguration von dnsmasq ist im Gegensatz zu Bind9 relativ simpel und benötigt sudo auf folgende Dateien:

/etc/dnsmasq.conf 
/etc/resolv.dnsmasq
/etc/resolv.conf
/etc/hosts

/etc/hosts 

# Beispiel Konfiguration 
127.0.0.1       localhost                   # default

192.168.178.50  server.bastelbude   server  # server via lan
10.0.0.1        server.bastelbude   server  # server via vpn

192.168.178.60  drucker.bastelbude  drucker # drucker via lan
10.0.0.2        drucker.bastelbude  drucker # drucker via vpn

/etc/dnsmasq.conf

# Auf welchen IPs wird gelauscht
listen-address=127.0.0.1 
listen-address=192.168.178.50 
listen-address=10.0.0.1 
port=53 

# Interne IP-Auflösung verhindern
bogus-priv 

# Weitere Config laden (siehe nächster Schritt)
resolv-file=/etc/resolv.dnsmasq

# Interne Domain
domain=bastelbude

# Adressen die intern verfügbar sein sollen
local=/drucker.bastelbude/
local=/server.bastelbude/

# Domain Namen vereinfachen
expand-hosts

# Welche Netzwerk Interfaces werden genutzt (eth0, loopback etc., bind=alle)
bind-interfaces

# Zwischenspeicher Größe
cache-size=500

# Log
log-queries

/etc/resolv.dnsmasq

# Nameserver vom Router und der Google DNS-Server (als Beispiel)
nameserver 192.168.178.1
nameserver 8.8.8.8

/etc/resolv.conf

# WICHTIG! Hier muss die IP unseres Servers an erster Stelle stehen!
# Alle DNS-Anfragen gehen zuerst an unseren internen Server, welcher sich die Domains aus der "hosts" Datei holt. 
# Wenn nicht fündig, wird die Anfrage an den zweiten DNS-Eintrag (Router) weitergeleitet
nameserver 127.0.0.1
nameserver 192.168.178.1

Fertig mail Dienst starten...

service dnsmasq start

Folgende Ausgaben sollten nun zu sehen sein:

netstat -tulpen | grep dnsmasq
##############################
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      0          34470312    19848/dnsmasq
tcp        0      0 192.168.178.50:53       0.0.0.0:*               LISTEN      0          34470310    19848/dnsmasq
tcp        0      0 10.0.0.1:53             0.0.0.0:*               LISTEN      0          34470308    19848/dnsmasq
udp        0      0 127.0.0.1:53            0.0.0.0:*                           0          34470311    19848/dnsmasq
udp        0      0 192.168.178.50:53       0.0.0.0:*                           0          34470309    19848/dnsmasq
udp        0      0 10.0.0.1:53             0.0.0.0:*                           0          34470307    19848/dnsmasq




nslookup server.bastelbude
##########################
Server:         127.0.0.1    <---# Unser DNS/Nameserver
Address:        127.0.0.1:53 

Name:   server.bastelbude    <---# Ereichbar via VPN
Address: 10.0.0.1
Name:   server.bastelbude    <---# Ereichbar via LAN
Address: 192.168.178.50

Nun können Clients aus dem LAN, wie auch Clients aus dem VPN, gemeinsam auf "http://server.bastelbude/ordner" oder z.B. "http://server.bastelbude/mail.php" zugreifen und das Problem mit dem absoluten Pfad ist Geschichte. Auch der (in unserem Beispiel) Drucker auf 192.168.178.60 wäre nun direkt via "http://drucker.bastelbude" verfügbar.

Natürlich muss bei den Clients noch der "Host" (VPN: 10.0.0.1 oder LAN: 192.168.178.50) als DNS-Server eingetragen werden, damit unser eigener DNS-Server als erster antwortet und auf das interne Ziel verweist. Unter Windoof zu finden in den IPV4 Einstellungen der jeweiligen Verbindung. Auf Linux System sollte hingegen die resolv.conf angepasst werden.