DNS und DHCP mit Dnsmasq

Aus LinuxUser 03/2009

DNS und DHCP mit Dnsmasq

Zentrale Kontrolle

Wer im heimischen Netz etwas mehr Komfort möchte, als ihn ein kleiner DSL-Router bietet, dem bietet Dnsmasq alle erforderlichen Funktionen in einem praktischen Doppelpack.

Das Internet Systems Consortium (ISC) liefert mit Bind und DHCPD gut funktionierende und vollständige Implementierungen von DNS und DHCP. Ein DSL-Router braucht jedoch lange nicht alle Funktionen, die die beiden Server bieten: So reicht es in der Regel, nur DNS-Anfragen nach Hosts aus dem lokalen Netz zu beantworten und alle anderen an DNS-Server des Providers weiterzuleiten.

Das Programm Dnsmasq bietet DNS sowie optional DHCP und TFTP für ein kleines, lokales Netzwerk ([1],[2]). DNS-Anfragen für externe Hosts leitet das Programm dabei an beliebige DNS-Server weiter. Der DNS-Server von Dnsmasq merkt sich auf Wunsch die Namen der via DHCP mit ihrer Netzwerkkonfiguration versorgten Hosts.

So entfällt jegliche Netzwerkkonfiguration auf den Clients. Es genügt, auf jedem Client DHCP einzustellen. Das Pflegen einer Datei /etc/hosts, die Hostnamen und Adressen zuordnet, erübrigt sich. Das Programm verbraucht wenig Ressourcen und eignet sich daher gut für den Einsatz in einem kleinen Linux-basierten Router.

Gängige Distributionen halten Dnsmasq im Repository vor. Unter Debian, Ubuntu und OpenSuse installieren Sie das Paket dnsmasq. Auch die gängigen Router-Distributionen OpenWRT, DD-WRT und FreeWRT liefern das Programm mit ([3],[4]). Im Test lief Dnsmasq unter Debian von einem USB-Stick, der an einen DSL-Router des Typs Asus WL-Premium 500g angeschlossen war (Abbildung 1, [5]). Der Artikel setzt einen konfigurierten Internetzugang auf dem Dnsmasq-Rechner voraus.

Abbildung 1: Dnsmasq läuft ohne Probleme auf einem kleinen DSL-Router.

Abbildung 1: Dnsmasq läuft ohne Probleme auf einem kleinen DSL-Router.

Die Konfigurationdatei von Dnsmasq finden Sie unter /etc/dnsmasq.conf. Es gibt aber eine komfortablere Konfigurationsmöglichkeit, als diese Datei direkt zu bearbeiten und bei jedem Update des Programms die eigenen Änderungen wieder einzupflegen: Mit conf-dir=/etc/dnsmasq.d lassen sich Konfigurationsschnipsel aus dem Verzeichnis /etc/dnsmasq.d nachladen. Alternativ lädt conf-file eine einzelne Konfigurationsdatei. Die verschiedenen Konfigurationsoptionen dokumentiert die Manpage der Software. Nach Änderungen liest der Dienst mit /etc/init.d/dnsmasq restart die angepasste Konfiguration neu ein.

DNS einrichten

Den DNS-Server haben Sie im Handumdrehen eingerichtet. Es reicht, eine kurze Konfigurationsdatei mit einem Namen wie /etc/dnsmasq.d/dns anzulegen (Listing 1). Mit domain-needed fragt Dnsmasq nur dann den Upstream-Nameserver, wenn der angefragte Hostname einen Domainnamen enthält. Mit bogus-priv leitet das Tool Anfragen nach IP-Adressen, so genannte Reverse Lookups, nur dann an den Upstream-DNS-Server weiter, wenn diese nicht aus privaten IP-Adress-Bereichen stammen (siehe Kasten “Private IP-Adressbereiche”).

Listing 1
# Freundlich zu Upstream-DNS-Servern sein
domain-needed
bogus-priv
# Einige Windows-DNS-Anfragen ausfiltern
filterwin2k
# Nur auf LAN-Schnittstellen lauschen
interface=eth0.1
bind-interfaces
# Lokale Domain
domain=lichtvoll.home

Private IP-Adressbereiche

Einige IP-Adressbereiche leiten Router nach RFC1918 nicht ins Internet weiter. Dabei handelt es sich um folgende Adressen:

  • 192.168.0.0/16: 168.168.0.1 bis 168.168.255.254
  • 172.16.0.0/12: 172.16.0.1 bis 172.31.255.254
  • 10.0.0.0/8: 10.0.0.1 bis 10.255.255.254

Diese Adressbereiche eignen sich daher für den Aufbau lokaler Netzwerke. Es sind die für Hosts nutzbaren IP-Adressen angegeben.

Die beiden Direktiven interface und bind-interfaces weisen den DNS-Server an, nur im lokalen Netzwerk auf Anfragen zu lauschen. Schließlich gibt domain noch die lokale Domain an, die Sie sich frei ausdenken dürfen. Es empfiehlt sich, keine im Internet verwendete Domain zu verwenden. So eignet sich zum Beispiel .home ausgezeichnet. Die Domain landet bei den Clients als Option search in der /etc/resolv.conf. Geben Sie einen Hostnamen ohne Domain an, so probiert der Resolver den Namen mit angehängter Domain aufzulösen und erspart dadurch Tipparbeit.

Eine Frage beantwortet die Beispielkonfiguration jedoch nicht: Woher weiß Dnsmasq welche DNS-Server ihm für Anfragen nach Hosts im Internet zur Verfügung stehen? Diese entnimmt Dnsmasq der Datei /etc/resolv.conf auf dem Rechner, auf dem es läuft. Diese Datei nimmt die mit dem Schlüsselwort nameserver versehenen IP-Adressen von bis zu drei Nameservern auf. Mit dem Debian-Paket resolvconf geht es sogar noch eleganter: Die Liste der DNS-Server für Dnsmasq landet in /var/run/dnsmasq/resolv.conf, in der /etc/resolv.conf steht nur noch 127.0.0.1 als Nameserver [6].

Mit resolv-file liest Dnsmasq die zu verwendenden DNS-Server aus einer anderen Datei ein, mit server geben Sie die DNS-Server direkt in der Konfigurationsdatei ein. So erlaubt der folgende Eintrag den Einsatz der DNS-Server des Providers OpenDNS.com:

# OpenDNS.com DNS-Server
server=208.67.222.222
server=208.67.220.220

Alternativ integrieren Sie für das lokale Netzwerk oder bestimmte andere Domains einen bereits vorhandenen anderen DNS-Server. Zusätzlich übernimmt Dnsmasq die Einträge aus /etc/hosts ins DNS. Dort tragen Sie zum Beispiel den Namen des Hosts ein, auf dem Dnsmasq läuft. Die laut der Manpage von hosts empfohlene Schreibweise ist: Zuerst die IP-Adresse, dann Hostname mit Domain, und schließlich Hostname ohne Domain, jeweils mit Leerzeichen getrennt. Bei einem Host im lokalen Netz sollte die Domain zur in Dnsmasq eingestellten Domain passen, sonst klappt das Auflösen des Namens nicht.

DHCP in einer Zeile

Auch DHCP haben Sie ruckzuck eingerichtet. So vergibt das Programm mit der Option

dhcp-range=10.0.1.9,10.0.1.99,12h

in einer Datei wie /etc/dnsmasq.d/dhcp dynamische Leases mit IP-Adressen von 10.0.1.9 bis 10.0.1.99 und einer Gültigkeitsdauer von 12 Stunden. Dank der langen Lease-Zeiten brauchen die DHCP-Clients der Hosts nicht gleich ihre IP-Adressen abzugeben, falls der Server einmal ausfällt.

Wer möchte, vergibt mit dhcp-host für bestimmte Hosts statische IP-Adressen. Ein Beispiel zeigt Listing 2. Dnsmasq erkennt dabei Hosts anhand der MAC-Adresse der Netzwerkschnittstelle, anhand des Hostnamens oder anhand der DHCP-Client-Identifikation.

Listing 2
# Dynamisches DHCP
dhcp-range=10.0.1.9,10.0.1.99,12h
# ThinkPad T42
dhcp-host=shambhala,10.0.0.21
# ThinkPad T23
dhcp-host=deepdance,10.0.0.99
# Sam440ep
dhcp-host=00:50:c2:5a:44:e9,gaia,10.0.0.5
# Amiga 4000 mit USB Ethernet-Adapter
dhcp-host=00:80:c9:40:00:c0,sunshine,10.0.0.77

Nur mit einer Option wie send host-name "Hostname" in der Konfigurationsdatei des DHCP-Clients des ISC – bei Debian und dessen Derivaten /etc/dhcp3/dhclient.conf – sendet dieser den Hostnamen. Alternativ übermittelt send dhcp-client-identifier eine DHCP-Client-Identifikation (siehe man dhcp-options). OpenSuse verwendet standardmäßig dhcpcd als DHCP-Client, der standardmäßig den Hostnamen sendet. Alternativ aktivieren Sie den ISC-Client mit dhclient in der Variable DHCLIENT_BIN in der Datei /etc/sysconfig/dhcp auf Ihrem System. In /etc/dhclient.conf findet sich die Konfiguration.

Die MAC-Adresse einer Netzwerkschnittstelle ermittelt direkt am Linux-System ip link oder ifconfig -a. Im ARP-Cache befinden sich die MAC-Adressen der Rechner, mit denen ihr Linux-System zuletzt Kontakt hatte. Der Befehl ip neigh oder arp zeigt den Inhalt des Caches an. Fehlt das gewünschte Gerät in der Liste, so befördert ein ping auf die IP-Adresse dessen MAC-Adresse in den ARP-Cache. Alternativ holen Sie vom Client via DHCP ein dynamisches Lease und beobachten mit tail -f /var/log/daemon.log | grep DHCP unter Debian und Co. oder tail -f /var/log/messages | grep DHCP unter OpenSuse das Protokoll von Dnsmasq (Abbildung 2).

Abbildung 2: So richten Sie einen DHCP-Host-Eintrag mit MAC-Adresse ein.

Abbildung 2: So richten Sie einen DHCP-Host-Eintrag mit MAC-Adresse ein.

Klappt alles?

Haben Sie DNS und DHCP eingerichtet, wartet Dnsmasq auf den Praxiseinsatz. Sie vermeiden Schwierigkeiten, wenn Sie nur einen DHCP-Server in einem Netzwerksegment betreiben. Stoppen Sie daher alle anderen DHCP-Dienste, etwa auf einem Access Point, vor dem Test. Starten Sie dann Dnsmasq mit /etc/init.d/dnsmasq restart neu.

Für erste Tests bietet sich unter Linux der ISC-DHCP-Client an. Dekonfigurieren Sie die Netzwerkschnittstelle (meist eth0) mit ifdown eth0 und starten Sie mit dhclient eth0 den DHCP-Client. Erhalten Sie eine Ausgabe wie in Abbildung 3, so klappt die Konfiguration via DHCP. Die Datei /var/lib/misc/dnsmasq.leases auf dem Rechner mit dem Server enthält eine Liste der vergebenen Leases (Abbildung 4).

Abbildung 3: So sieht es aus, wenn DHCP und DNS funktionieren.

Abbildung 3: So sieht es aus, wenn DHCP und DNS funktionieren.

Abbildung 4: LAN-Party mit zwei Linux-Laptops und zwei Amiga-Systemen.

Abbildung 4: LAN-Party mit zwei Linux-Laptops und zwei Amiga-Systemen.

Ansonsten überprüfen Sie mit netstat -tulpen | grep dnsmasq, ob Dnsmasq läuft. Für DHCP lauscht die Software auf dem UDP-Port 67, für DNS auf dem TCP- und dem UDP-Port 53. Bei einer falsch geschriebenen Option gibt Dnsmasq beim Start eine Fehlermeldung aus. Weitere Hinweise liefert das bereits erwähnte Protokoll. Die resolv.conf enthält den Dnsmasq-Server als Nameserver in der Regel bereits. Mit einem Aufruf wie host linux-user.de überprüfen Sie das Auflösen der Namen.

Klappt alles wie gewünscht, stellen Sie die Schnittstelle in YaST unter Netzwerkgeräte | Netzwerkeinstellungen | Übersicht permanent auf DHCP um. Bei Debian und dessen Ablegern ersetzen Sie in der /etc/network/interfaces in der passenden Zeile iface Schnittstelle inet static die Option static durch dhcp und entfernen die folgenden Zeilen für die manuelle Konfiguration.

Ein ifup eth0 löst die Konfiguration der Schnittstelle via DHCP aus, sofern noch nicht geschehen. Alternativ verwenden Sie den Networkmanager. Den aktivieren Sie in YaST unter Netzwerkgeräte | Netzwerkeinstellungen | Globale Optionen | Methode für den Netzwerkaufbau. Unter Debian und Verwandten verwaltet der Networkmanager alle Schnittstellen, die nicht in der /etc/network/interfaces konfiguriert sind.

Fazit

Dnsmasq beschränkt sich auf Funktionen, die für ein kleines lokales Netz mit Internetzugang Sinn machen. Es funktioniert zuverlässig – einmal konfiguriert, vergisst man schnell, dass es läuft. Die Konfiguration ist einfach und übersichtlich.

Glossar

ISC

Internet Software Consortium. Gemeinnützige, ursprünglich aus der Universität Berkeley ausgegliederte Organisation, die den Root-Nameserver F-Root betreibt und für die Entwicklung einiger freier Software-Projekte verantwortlich ist.

DNS

Domain Name System. System und Protokoll, um Namen IP-Adressen und IP-Adressen Namen zuzuordnen. Beispiel: linux-user.de hat die IP-Adresse 87.106.38.241.

DHCP

Dynamic Host Configuration Protocol. Protokoll zur dynamischen Netzwerk-Konfiguration von Hosts.

Resolver

Sammlung von Funktionen in der C-Bibliothek zum Auflösen von Hostnamen und IP-Adressen via DNS. Viele Anwendungen verwenden diese Funktionen.

Leases

Lease (Sing.), von englisch “to lease”, mieten. Zuteilen einer Netzwerkkonfiguration, insbesondere einer IP-Adresse, durch den DHCP-Server.

MAC-Adresse

Weltweit eindeutige Adresse für eine Netzwerkhardware nach dem Ethernet-Standard. Eine 48-Bit-Zahl, üblicherweise hexadezimal geschrieben, Beispiel: 00:02:8A:4F:58:42.

Infos

[1] Martin Steigerwald, “Komplexe Architektur”, LinuxUser 03/2007, S. 87, https://www.linux-community.de/Artikel/11894/

[2] Martin Steigerwald, “Gute Verbindungen”, LinuxUser 12/2007, S. 88, https://www.linux-community.de/Artikel/14149/

[3] Dnsmasq in OpenWRT: http://wiki.openwrt.org/OpenWrtDocs/dnsmasq

[4] Dnsmasq als DHCP-Server: http://www.dd-wrt.com/wiki/index.php/DNSMasq_as_DHCP_server

[5] Debian auf dem Asus WL-500G Deluxe: http://wpkg.org/Running_Debian_on_ASUS_WL-500G_deluxe

[6] Dnsmasq in Debian: /usr/share/doc/dnsmasq/README.Debian

LinuxUser 03/2009 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben