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.
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.
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 Block 127/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.
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.