Dnsmasq

Aus wiki.archlinux.de

Dnsmasq ist ein sehr einfacher, kombinierter DNS- und DHCP-Server für kleine bis mittlere Netzwerke, der eine leicht verständliche Konfiguration ermöglicht, und sehr zuverlässig arbeitet.

Vorüberlegung

Im Allgemeinen reicht es völlig aus, einfach einen Router zu betreiben, an den man die Clients anschließt. Im Regelfall ist es für den durchschnittlichen Anwender nicht nötig, einen dedizierten DNS- oder DHCP-Server zu betreiben. Für beides kann es aber dennoch diverse Gründe geben.

DNS

Um für einen Host die jeweilige IP-Adresse zu erhalten, bedarf es eines Nameservers. Dieser wandelt eine Anfrage nach einem Host in eine bestimmte IP um und teilt diese dem anfragenden Client mit. Statt der IP wird also der Hostname angegeben, dies ist leichter zu merken. Zudem ist es relativ egal welche IP der jeweilige Host gerade hat, wenn er im Domain Name System (DNS) richtig eingetragen ist.

Einen Nameserver aufzusetzen kann verschiedene Gründe haben. Allem voran ist da die einfache Wartbarkeit diverser Hostnamen. Bei zwei Rechnern im Netz, die sich gegenseitig über den Hostnamen aufrufen sollen können, und wo man kein DNS verwendet, bedarf es je eines Eintrages auf jedem Client. Und zwar muss in der Datei „/etc/hosts“ jeweils ein Eintrag für den jeweils anderen Client vorgenommen werden.

Dies summiert sich bei steigender Anzahl von Hosts. Bei zwei Clients ist es nur 2×1 Eintrag, bei drei Clients sind es 3×2 Einträge, bei vier Clients 4×3 Einträge, und bei fünf Clients schon insgesamt 16 Einträge (5×4) die gemacht werden müssen, jeweils immer vorausgesetzt, dass der Clients sich nicht selbst über seinen vollständigen Hostnamen muss aufrufen können.

Wenn sich nun ein einziger Eintrag aus irgendwelchen Gründen ändert, muss dies auf allen anderen Clients ebenfalls geändert werden. Das ist nicht nur zeitaufwendig, sondern auch unnötig. Denn genau so, wie im Internet, kann auch im lokalen Netzwerk DNS benutzt werden, um die Hosts zu verwalten.

DHCP

Es gibt praktisch zwei Arten, auf die man einem Client eine IP zu weisen kann. Zum Einen besteht die Möglichkeit, dem Client manuell eine IP zuzuweisen, dies geschieht unter Arch in der rc.conf. Zum Anderen kann man in der selben Datei das System auch anweisen, per DHCP eine IP zu erfragen.

Vorteil der manuellen Konfiguration ist, dass jeder Client bei jedem Start eine vorher festgelegte IP hat, und über diese natürlich auch angesprochen werden kann. Nachteil, wenn man kein DHCP verwendet, ist, dass neue Clients erst manuell in das Netz gebracht werden müssen, und zudem alle Nameserver-Einträge ebenfalls erst manuell gesetzt werden müssen.

Ein weiterer Nachteil von DHCP ist, dass die Clients mitunter bei jedem Start unterschiedliche IPs haben. Und hier kommt ein kombinierter DHCP/DNS-Server ins Spiel. Die Clients können am DHCP-Server-Teil des Systems eine IP erbitten, und bekommen diese zugewiesen, gleichzeitig wird im DNS-Server-Teil des Systems vermerkt, welchen Hostname der Client besitzt. So kann unabhängig der gerade vergebenen IP der Client immer über den Hostname angesprochen werden.

Üer Dnsmasq ist es möglich, Clients anhand ihrer MAC-Adresse zu identifizieren, und diesen Clients (bzw. den Clients, die sich mit der MAC-Adresse im Netzwerk melden, die in Dnsmasq konfiguriert wurde) immer per DHCP die selbe IP zuzuweisen (so genanntes „Static-DHCP“).

Installation

Dnsmasq ist über das gleichnamige Paket aus dem extra-Repository installierbar.

pacman -Sy Dnsmasq

Nach der Installation muss Dnsmasq noch konfiguriert und dann natürlich gestartet werden. Es ist zudem ratsam, Dnsmasq in das DAEMONS-Array in der „rc.conf“ mit aufzunehmen, wenn es bei jedem Systemstart automatisch mitgestartet werden soll.

Funktionsweise von Dnsmasq

Im Gegensatz zu umfangreichen, „großen“ DNS-Server-Programmen wie bind9 ist Dnsmasq für relativ „kleine“ Netze bis zu 50-100 Clients ausgelegt. Die jeweiligen Daten bezüglich der Hostnamen, IPs, Relay-Nameserver, etc. bezieht es standardmäßig aus den Systemdateien des Systems, auf dem es installiert wurde.

Für die DNS-Funktionalität wird auf die Dateien /etc/hosts und /etc/resolv.conf zurückgegriffen, die keinerlei Dnsmasq-spezifischer Anpassung bedürfen, und weiterhin standardkonform verwendet werden können. Dieses Verhalten kann allerdings angepasst werden. Die DHCP-Funktionalität wird in der Konfigurationsdatei von Dnsmasq angepasst.

DNS

Im einfachsten Falle wird Dnsmasq als DNS-Server verwendet. In der hosts-Datei werden alle Clients eingetragen, die per DNS ansprechbar sein sollen. Beispielsweise sieht ein Eintrag wie folgt aus. Es wird davon ausgegangen, dass der Host „host20“ über die feste IP 192.168.0.20 angesprochen werden kann.

192.168.0.20	host20.example.lan	host20

An erster Stelle steht die IP (in diesem Fall eine IP aus einem privaten Class-A-Netz). Danach kommt der FQDN (Fully Qualified Domain Name, vollständig qualifizierender Domainname) des Clients. Die Toplevel-Domain ist theoretisch frei wählbar, man sollte aber eine TLD wählen, die nicht verwendet wird, da dies zu Problemen führen kann. Es kann auch einfach nur „host20.local“ verwendet werden. Am Ende der Zeile steht noch mal der Hostname alleine.

Nach dem Eintragen eines Clients in die hosts-Datei muss Dnsmasq (neu) gestartet werden. Wenn man „host20“ nun von einem anderen Client aus, der den Rechner, auf dem Dnsmasq läuft, als Nameserver eingetragen hat aufrufen will, funktioniert dies.

# ohne den Nameserver
Host host20 not found: 3(NXDOMAIN)
# mit dem Nameserver
Host host20 has address: 192.168.0.20

Anfragen, die Dnsmasq nicht direkt beantworten kann, werden in der Standardkonfiguration an den in „/etc/resolv.conf“ definierten Nameserver weitergeleitet. Dieser Nameserver antwortet nun, Dnsmasq schreibt das Ergebnis in seinen Puffer und gibt die Antwort an den Client zurück. Bei der nächsten Anfrage kann Dnsmasq die Auflösung anhand der Daten aus dem Puffer selbst vornehmen.

DHCP

Um die DHCP-Funktionen von Dnsmasq zu verwenden, bedarf es ebenfalls kaum Einstellungen. Um die DHCP-Funktion zu aktivieren, und im selben Zuge auch die Grundkonfiguration vorzunehmen, bedarf es ledeiglich des Auskommentierens einer Zeile in der Datei „/etc/Dnsmasq.conf“

dhcp-range 192.168.0.10,192.168.0.128,12h

Dies aktiviert die DHCP-Funktion und definiert gleichzeitig den IP-Adressbereich, der für DHCP verwendet werden soll. In diesem Fall wird der IP-Bereich von der IP 192.168.0.10 bis zur IP 192.168.0.128 verwendet. Die Lease Time beträgt 12 Stunden. Innerhalb dieser 12 Stunden wird dem Client immer diese IP zugewiesen, wenn er nachfragen sollte.

Nach der Konfiguration muss Dnsmasq (neu) gestartet werden. Wenn ein Client nun per DHCP im Netz nach einer IP fragt, wird der Rechner, auf dem Dnsmasq läuft, ihm Antworten, und ihm per DHCP eine IP zuweisen.

eth0: dhcpcd 4.0.12 starting
eth0: broadcasting for a lease
eth0: offered 192.168.0.10 from 192.168.0.1
eth0: acknowledged 192.168.0.10 from 192.168.0.1
eth0: checking 192.168.0.10 is available on attached networks
eth0: leased 192.168.0.10 for 43200 seconds

Static-DHCP

Durch so genanntes „Static-DHCP“ wird einem Client anhand der angegebenen MAc-Adresse immer die selbe IP zugeordnet. Dies ist zum Beispiel für Laptops interessant, die im LAN immer über die selbe IP erreichbar sein sollen, ansonsten aber ihre IP ganz normal per DHCP beziehen, und man nicht jedes mal erst von DHCP auf manuelle Konfiguration umstellen möchte.

Static-DHCP wird in der Datei „/etc/Dnsmasq.conf“ eingestellt.

dhcp-host=00:1E:C9:26:8A:F7,notebook,192.168.0.70,infinite

Hierdurch wird dem Client, der die MAC-Adresse 00:1E:C9:26:8A:F7 übergibt, der Hostname notebook und die IP 192.168.0.70 zugewiesen. Die Lease-Time ist dabei unbegrenzt.

Weitere DHCP-Informationen

Will man den Clients über DHCP weitere Informationen übergeben, so ist dies ebenfalls mittels einfachen Einträgen in der Konfigurationsdatei von Dnsmasq möglich.

dhcp-option=3,192.168.1.1
dhcp-option=42,83.170.1.225

Die DHCP-Optionen 3 und 42 stehen für das Gateway (3) und einen NTP-Zeitserver (42), hier der Deutschland-Pool von ntp.org. Weitere Optionen sind in der Konfigurationsdatei beschrieben.

Siehe auch

Weblinks