Zentrale Kontrolle

DNS und DHCP mit Dnsmasq

23.02.2009
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.

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.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Das eigene Netz dynamisch konfigurieren
    Um Computern in einem Netzwerk die Kommunikation zu ermöglichen, muss normalerweise jeder beteiligte Rechner von Hand konfiguriert werden. Diese Arbeit lässt sich vermeiden, wenn einer davon IP-Adressen und weitere Einstellungen dynamisch per DHCP verteilt.
  • DHCP-Server fürs lokale Netzwerk
    Werden mehrere Rechner zu einem Netzwerk zusammengeschlossen, wächst der Konfigurationsaufwand. Besser man zentralisiert das Ganze so, dass ein DHCP-Server IP-Adressen und andere Werte an die Clients vergibt.
  • Netzwerk unter der Lupe
    Trotz Datenflut bahnen sich Datenpakete zielstrebig ihren Weg durch das weltweite Netz. IP kennt den Weg, TCP sorgt für eine sichere Verbindung.
  • Bin ich schon drin?
    Wenn Sie über einen Router mit DHCP ins Internet gehen, können Sie im Handumdrehen ein Heimnetzwerk aufbauen. Was aber tun, wenn Sie eine feste IP-Adresse brauchen?
  • Netzwerkoplizei
    "Ich dachte, unsere Daten wären sicher…!?" Sollten Sie diesen Satz schon einmal von sich gegeben haben, wird es höchste Zeit, über einen zusätzlichen Schutz Ihrer Rechner nachzudenken. Der Firewallrouter IPCop bietet in dieser Hinsicht viel für wenig Geld.
Kommentare

Infos zur Publikation

LU 11/2014: VIDEOS BEARBEITEN

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

WLAN-Signalqualität vom Treiber abhängig
GoaSkin , 29.10.2014 14:16, 0 Antworten
Hallo, für einen WLAN-Stick mit Ralink 2870 Chipsatz gibt es einen Treiber von Ralink sowie (m...
Artikelsuche
Erwin Ruitenberg, 09.10.2014 07:51, 1 Antworten
Ich habe seit einige Jahre ein Dugisub LinuxUser. Dann weiß ich das irgendwann ein bestimmtes Art...
Windows 8 startet nur mit externer Festplatte
Anne La, 10.09.2014 17:25, 6 Antworten
Hallo Leute, also, ich bin auf folgendes Problem gestoßen: Ich habe Ubuntu 14.04 auf meiner...
Videoüberwachung mit Zoneminder
Heinz Becker, 10.08.2014 17:57, 0 Antworten
Hallo, ich habe den ZONEMINDER erfolgreich installiert. Das Bild erscheint jedoch nicht,...
internes Wlan und USB-Wlan-Srick
Gerhard Blobner, 04.08.2014 15:20, 2 Antworten
Hallo Linux-Forum: ich bin ein neuer Linux-User (ca. 25 Jahre Windows) und bin von WIN 8 auf Mint...