Eigener DNS-Server 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
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 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 "https://server.bastelbude/ordner" oder z.B. "https://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 "https://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.