DNS-Server
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Dieser Artikel beschreibt die Möglichkeiten zur Bereitstellung eines DNS-Servers über ein Router-Multifunktionsgerät[2].
Man hat grundsätzlich diese Möglichkeiten:
Man teilt den Clients per DHCP lediglich die IP-Adressen von DNS-Servern mit. Hierzu siehe Router/DHCP-Server.
Man installiert auf dem Router zusätzlich einen DNS-Server, z.B. Bind oder Unbound 🇬🇧. Den Clients teilt man per DHCP die eigene IP-Adresse als DNS-Server mit.
Man installiert auf dem Router einen DNS-Cache, dies ist ein DNS-Server, welcher selber keinerlei Autorität über irgendwelche DNS-Namen oder -Zonen hat, sondern alle bei ihm eintreffenden Anfragen an ihm bekannte DNS-Server (Forwarder) weiterleitet und die Antworten speichert. Bei Ubuntu kann man hierfür beispielsweise Dnsmasq oder systemd-resolved verwenden. Den Clients teilt man per DHCP die eigene IP-Adresse (in diesem Artikel beispielhaft:
192.168.33.1
) als DNS-Server mit; dazu muss man im DHCP-Server des Routers diese als Namensserver für die Clients konfigurieren.
Im weiteren beschränkt sich dieser Artikel auf die zuletzt genannte Variante.
DNS-Cache mit dnsmasq¶
Diese Wahl liegt nahe, wenn man ohnehin dnsmasq bereits als DHCP-Server verwendet. In der Konfigurationsdatei /etc/dnsmasq.conf muss lediglich die Funktion DNS-Cache aktiviert werden:
interface=LAN listen-address=127.0.0.1 listen-address=192.168.33.1 server=8.8.8.8 server=213.73.91.35
Mit
interface
gibt man den Namen (hier beispielhaft:LAN
) der Netzwerkschnittstelle an, auf der DNS-Anfragen erwartet werden. Man kann dieses Schlüsselwort mehrmals verwenden.listen-address
benennt eine IP-Adresse dieses DNS-Servers. (Die man dem Router über die Netzwerk-Konfiguration bereits gegeben hat.) Man sollte immer zusätzlich auch eine Adresse aus dem Block127/8
angeben, damit der Router seinen eigenen DNS-Cache auch selbst benutzen kann.server
bezeichnet einen anderen DNS-Server, an den DNS-Anfragen weitergeleitet werden. (Forwarder) Man kann dieses Schlüsselwort mehrmals verwenden.
In den Artikel Dnsmasq und Router/DHCP-Server finden sich weitere Hinweise.
DNS-Cache mit systemd-resolved¶
Dies ist attraktiv, wenn man auf dem Router systemd-networkd zur Konfiguration des Netzwerks benutzt und dnsmasq nicht installieren möchte.
Man richtet zuerst den DNS-Cache auf dem Router ein, so wie es im Artikel systemd-resolved beschrieben ist. Die zu befragenden DNS-Server kann man z.B. in der .network-Datei der Schnittstelle zum Internet hinterlegen.
Der DNS-Cache von systemd-resolved ist nun zwar auf den Ports 53/udp
und 53/tcp
über das Netzwerk erreichbar, jedoch nur über die Adresse 127.0.0.53
. Somit kann nur der Router selber den DNS-Server nutzen. Damit Rechner im LAN diesen Server auch erreichen können, müssen auf dem Router aus dem internen Netzwerk auf seiner internen IP-Adresse (hier beispielhaft: 192.168.33.1
) eintreffende DNS-Anfragen auf diese IP-Adresse umgeleitet werden. Dies kann per NAT erfolgen, wie im Artikel Router/NAT beschrieben, hier jedoch für die interne Netzwerkschnittstelle:
iptables -t nat -I PREROUTING -p tcp --dport 53 -d 192.168.33.1/32 -j NETMAP --to 127.0.0.53/32 iptables -t nat -T POSTROUTING -p tcp --sport 53 -s 127.0.0.53/32 ! -d 127.0.0.0/8 -j NETMAP --to 192.168.33.1/32 iptables -t nat -I PREROUTING -p udp --dport 53 -d 192.168.33.1/32 -j NETMAP --to 127.0.0.53/32 iptables -t nat -T POSTROUTING -p udp --sport 53 -s 127.0.0.53/32 ! -d 127.0.0.0/8 -j NETMAP --to 192.168.33.1/32
Dies funktioniert nicht über das Protokoll IPv6, da systemd-resolved kein Netzwerk-Interface hierfür besitzt.