[[Vorlage(Getestet, focal)]] [[Vorlage(Fortgeschritten)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Editor: Einen Editor öffnen] [:Root-Rechte: Root-Rechte erlangen] [:DNS-Konfiguration:] }}} [[Inhaltsverzeichnis(2)]] ##[[Bild(Wiki/Icons/service.png, 48, align=left)]] [[Bild(./dnsmasq_icon.png, 48, align=left)]] [https://thekelleys.org.uk/dnsmasq/doc.html dnsmasq] {en} ist ein einfacher DNS- und DHCP-Server für kleine Netzwerke. Es werden die Namen aus dem lokalen Netz entsprechend der Datei [:hosts:/etc/hosts] aufgelöst. Unbekannte Namensanfragen werden weitergeleitet und im Cache gespeichert. Dnsmasq ist somit: * ein Nameserver-Forwarder * ein DHCP-Server * ein Namenscache * optimiert für Netzwerke mit Dialup-Außenverbindung = Installation = {{{#!vorlage Hinweis Auf einem Ubuntu-Desktop-System können einige Dienste laufen, die die DNS-Konfiguration beeinflussen. Dies sind unter anderem [:systemd/systemd-resolved:systemd-resolved], [:NetworkManager:] und [:ISC-DHCPD:dhcpd]. Diese sind so zu konfigurieren, dass sie nicht mit Dnsmasq in die Quere kommen. Dies betrifft auch den [:NetworkManager:], sofern dieser installiert ist (bei Desktopsystemen Standard). }}} Das Programm ist in den offiziellen Paketquellen enthalten. Es kann über das folgende Paket installiert [1] werden: {{{#!vorlage Paketinstallation dnsmasq, universe }}} = Konfiguration als DNS-Server = Dnsmasq greift zur lokalen Namensauflösung auf die Datei '''[:hosts: /etc/hosts]''' zurück. Daher sollte man diese mit einem Editor [2] und Root-Rechten bearbeiteten [3] und Zeilen in dieser Art hinzufügen. {{{ ## Lokales Netzwerk # = IP = = Domainname = = Alias = 192.168.1.1 router.example.org ns1.example.org ## Router und Nameserver auf einer IP, ns1 ist ein Alias. 192.168.1.2 neo.example.org ## Workstation ohne Alias mit IPv4-Adresse 2001:db8::5 neo.example.org ## IPv6-Eintrag für obige Workstation }}} Bei Reverse-Anfragen wird mit dem ersten Eintrag geantwortet. Es können auch Aliase gelistet werden, wie hier ''ns1''. Als Beispiel-Domain wird ''"example.org"'' genutzt. Üblicherweise besitzt man in einem LAN keine echte Domain, man sollte hier eine Bezeichnung nutzen, die nicht im Internet vorkommt (in [https://tools.ietf.org/html/rfc6762#appendix-G Anhang G zur RFC6762] {en} empfiehlt die [https://www.ietf.org IETF] {en} bspw. ''.intranet'', ''.internal'', ''.private'', ''.corp'', ''.home'' oder ''.lan''). Als Schutz vor Namenskollisionen empfiehlt die [https://www.icann.org ICANN] {en} jedoch, besser eigene FQDN zu nutzen (z.B. beispiel.de) und dann für interne Netze eine Subdomain (z.B. intranet.beispiel.de) zu verwenden ([https://www.icann.org/en/about/staff/security/ssr/name-collision-mitigation-05dec13-en.pdf PDF] {en}). Weiterhin sollte die Endung ''".local"'' nicht verwendet werden, da diese für Multicast-DNS über [:Avahi:] benutzt wird und es dabei zu Konflikten kommen kann, da eben nicht der eigene DNS-Server abgefragt wird, sondern der Domainname per Multicast-DNS aufgelöst wird. === Verwendung des Cache === Unter Ubuntu wird in 18.04 und neuer der Dienst [:systemd/systemd-resolved:systemd-resolved] genutzt. Dieser lauscht auf 127.0.0.53 auf Port 53. Dieser Dienst verwaltet ebenso die Datei '''/etc/resolv.conf''' und muss entsprechend beendet und deaktiviert werden, damit die Namensauslösung korrekt arbeitet. Dazu muss ggf. die Verknüpfung gelöscht und diese Datei anschließend manuell erstellt und mit Inhalt gefüllt werden. Damit alle DNS-Anfragen über Dnsmasq verarbeitet und bei Bedarf an externe DNS-Server weitergereicht werden, ist der einfachste Weg, die Datei '''/etc/resolv.conf''' zu bearbeiten. Dabei ist sicher zu stellen, dass der lokale DNS-Server (Dnsmasq) als erste Zeile eingetragen wird (`127.0.0.1`). Als nächste Zeile muss mindestens ein weiterer DNS-Server definiert werden, damit Dnsmasq die Anfragen weiterreichen kann. Beispiel mit Weiterleitung an den DNS-Cache der Fritz-Box und einen öffentlichen IPv6-Nameserver: {{{ nameserver 127.0.0.1 nameserver 192.168.178.1 nameserver 2001:470:20::2 }}} Das erfolgreiche lokale Cachen überprüft man am Terminal: {{{#!vorlage Befehl dig ubuntuusers.de }}} antwortet am Ende mit {{{ ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) }}} Soll Dnsmasq wirklich nur als DNS-Server für den eigenen Rechner arbeiten, braucht man nichts mehr zu konfigurieren. === Dnsmasq als DNS-Server für andere Rechner im lokalen Netz === Möchte man den DNS-Server auch für andere Rechner im lokalen Netz nutzen, dann muss man Dnsmasq dazu bringen, dass es auch an der Netzwerkschnittstelle nach DNS-Abfragen lauscht. Damit die Clients wissen, wie sie den DNS-Server finden, muss der Rechner, auf dem Dnsmasq läuft, dann mit einer statischen Adresse versehen sein. '''/etc/dnsmasq.conf''' muss mit Administrator-Rechten bearbeitet werden und folgende Zeilen werden geändert bzw. hinzugefügt: {{{ listen-address=127.0.0.1 listen-address=aaa.bbb.ccc.ddd listen-address=2001:db8::34 }}} wobei `aaa.bbb.ccc.ddd` die lokale statische IP4-Adresse des Dnsmasq-Rechners ist, also z.B. 192.168.0.20; es muss sowohl die 127.0.0.1 als auch die `aaa.bbb.ccc.ddd` angegeben werden, damit Dnsmasq sowohl eigene als auch fremde Anfragen bearbeitet. Hat der Rechner mehrere IP-Adressen, muss man - sofern gewünscht oder nötig - auch die zusätzlichen IP-Adressen angeben. Dies gilt ebenso für IPv6. Damit kann man z.B. für ein ganzes Heim-Netzwerk, ein Büro oder auch eine größere Firma zentral die Zugriffe zum Internet regeln (s. unten), indem man am DNS-Server Antworten manipuliert. Ob das funktioniert, kann man mit dem Befehl {{{#!vorlage Befehl sudo ss -tulpen | grep dnsmasq }}} überprüfen, man sieht dann in der Abteilung LISTEN, ob Dnsmasq auf 127.0.0.1 __und__ aaa.bbb.ccc.ddd lauscht. == Umleiten und Manipulieren von DNS-Abfragen == === Umleiten === Das Umleiten von DNS-Abfragen kann nötig oder sinnvoll sein, wenn man sich in einem Firmennetzwerk mit eigenem Nameserver befindet. Man möchte vielleicht nicht, dass mittels Logs auf dem DNS-Server mitprotokolliert werden kann, wo man herumsurft, braucht aber dennoch die Namensauflösung fürs Firmenintranet. Alle Seiten, die z.B. auf ''.intranet'' enden, sollen vom firmeninternen DNS-Server behandelt werden. Alle anderen Namen sollen von einem externen Nameserver aufgelöst werden. Unter dnsmasq ist es einfach möglich, für verschiedene Namensbereiche explizit einen oder mehrere DNS-Server zu bestimmen. Dazu trägt man entsprechende Zeilen in die Datei '''/etc/dnsmasq.conf''' ein: {{{ server=/intranet/10.17.1.1 }}} Dieser Eintrag würde alle DNS-Anfragen für die Toplevel-Domain ''.intranet'', also Seiten wie ''firmenportal.intranet'' an den Server ''10.17.1.1'' schicken. Alle übrigen Anfragen z.B. an ''ubuntuusers.de'' würden von dem Nameserver bearbeitet werden, der in der Datei '''/etc/resolv.conf''' eingetragen ist. Dies funktioniert ebenso mit IPv6-Adressen. Hier zwei weitere mehr oder weniger sinnvolle Beispiele: {{{ server=/google.com/8.8.8.8 # leitet alle DNS-Anfragen für google.com-Seiten an den Google Nameserver weiter server=/de/213.73.91.35 # leitet alle DNS-Anfragen für .de-Seiten an den Nameserver des Berliner CCC weiter }}} === Manipulieren === Es gibt verschiedene Gründe, warum man DNS-Abfragen manipulieren möchte. Ein Einsatzgebiet ist das Ausblenden von Werbung oder der Schutz der Privatsphäre. Der Ansatz ist hierbei der einer Blacklist. Das heißt, dass man eine Liste an Adressen pflegen muss, die man umleiten bzw. manipulieren möchte. Dies kann ebenso durch passende Records in der hosts-Datei erfolgen. Beispielsweise könnte man den Zugriff auf Facebook und das Einblenden von ''Like''-Buttons verhindern wollen. Dazu trägt man folgende zwei Zeilen in die Datei '''/etc/dnsmasq.conf''' ein und startet dann dnsmasq neu. {{{ address=/facebook.com/127.0.0.1 address=/fbcdn.net/127.0.0.1 }}} Dadurch werden alle DNS-Anfragen für ''facebook.com'', ''fbcdn.net'' (das Facebook Content Delivery Network) und deren Subdomains (z.B. ''www.facebook.com'') so manipuliert, dass die Anfragen auf den eigenen Rechner umgeleitet werden. Dort laufen sie dann ins Leere. Werbenetzwerke (z.B. Double Click) und Statistikdienste (z.B. Google Analytics) kann man auf die gleiche Art und Weise aus seinem Netzwerk fernhalten: {{{ address=/doubleclick.net/127.0.0.1 address=/google-analytics.com/127.0.0.1 }}} Der Vorteil dieser Lösung ist eine zentrale Stelle, an der die Filterregeln angewendet werden, solange jeder Computer im Netzwerk diesen DNS-Server nutzt. So muss nicht jeder Nutzer an jedem Computer im Netzwerk in jedem Browser einen Werbeblocker installieren. Nachteilig ist jedoch der manuelle Aufwand, da die Blacklist nicht automatisch gepflegt wird. Außerdem kann der Zugriff auf z.B. Facebook nicht verhindert werden, wenn direkt die IP genutzt wird, um auf die Webseite zu gelangen. Damit DNS-Anfragen nicht weiter aufgelöst werden sollen, z.B. interne Domains wie `.localnet` oder `fritz.box`, kann man dies auch konfigurieren: {{{ local=/localnet/ local=/fritz.box/ }}} Alle DNS-Anfragen zu `*.localnet` oder `*.fritz.box` werden nur anhand der '''/etc/hosts''' ausgewertet und verlassen den Rechner nicht. Dies kann ebenso für die Reverse-Bereiche der privaten IPv4- und IPv6-Adressen erfolgen. {{{ local=/10.in-addr.arpa/ #sorgt dafür, dass die Anfragen der PTR-Records für 10.0.0./8 nie an anderen DNS-Server gehen local=/d.f.ip6.arpa/ #wie oben, aber für IPv6 und das Netz fd00::/8 }}} === Loglevel === Das Aktivieren der Option loggt die DNS-Anfragen mit. Diese werden ins Syslog geschrieben. {{{ log-queries }}} Ausschnitt aus dem Syslog: {{{ Sep 11 12:54:00 test systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server. Sep 11 12:54:03 test dnsmasq[1202]: query[AAAA] heise.de from 127.0.0.1 Sep 11 12:54:03 test dnsmasq[1202]: forwarded heise.de to 2001:470:20::2 Sep 11 12:54:03 test dnsmasq[1202]: reply heise.de is 2a02:2e0:3fe:1001:302:: test@test:~$ }}} = Konfigurationsänderungen aktivieren = Nach einer Änderung von '''/etc/dnsmasq.conf''' muss dnsmasq neu gestartet werden, um die Änderungen wirksam werden: {{{#!vorlage Befehl sudo systemctl restart dnsmasq }}} = NetworkManager konfigurieren = Damit der [:NetworkManager:] nicht die Datei '''/etc/resolv.conf''' verändert, muss in der Datei '''/etc/NetworkManager/NetworkManager.conf''' folgende Zeile vorhanden sein: {{{dns=None }}} Dadurch greift der NM gar nicht mehr in die DNS-Konfiguration ein. = Links = * [https://thekelleys.org.uk/dnsmasq/doc.html Projektseite] {en} * [debian:HowTo/dnsmasq:dnsmasq] {en} - HowTo im Debian-Wiki * [ubuntu_doc:community/Dnsmasq:Dnsmasq] {en} im Ubuntu-Wiki * [https://linuxwiki.org/dnsmasq dnsmasq] {de} - Tipps und Tricks von LinuxWiki.org * [https://ctaas.de/dnsmasq.htm Ubuntu dnsmasq DNS-Server Howto] {de} - DNS caching/forwarding/adblock, 10/2016 #tag: Netzwerk, Server, dhcp, dns