Dnsmasq ermöglicht es, auf der FRITZ!Box
zu betreiben.
Das Besondere ist, dass dnsmasq statische DHCP-Leases beherrscht, was die FRITZ!Box ohne DS-Mod nicht kann. Dnsmasq läuft komplett auf der FRITZ!Box, man braucht also keine gesonderten Rechner als DHCP-Server und als DNS-Server.
Dnsmasq ist als Paket im Rahmen des DS-Mod realisiert und kann bei dessen Erzeugung einfach ausgewählt werden.
Zur Konfiguration gibt es im Web-Interface des DS-Mod die Seiten:
Wenn der DHCP-Server von dnsmasq genutzt werden soll, dann ist der FRITZ!Box-interne DHCP-Server aus der Original-Firmware
unter System → Netzwerkeinstellungen → IP-Adressen zu deaktivieren
Im Abschnitt Der DNS Server ist gebunden an: Port: trägt man den Port ein, an den der DNS-Server gebunden ist. Der Default-Wert ist hier Port 53.
Im Feld Domain kann die Domain (Domain-Teil des Hostnamens) für den DHCP-Server angegeben werden.
Das hat zwei Effekte. Erstens veranlasst es den DHCP-Server, diese Domain an Hosts zurückzugeben, die sie anfordern. Zweitens bestimmt es die Domain, die legitimiert ist, von DHCP-konfigurierten Hosts angefordert zu werden.
Dahinter steckt die Absicht, einen Hostnamen zu erzwingen, so kann ein nicht vertrauenswürdiger Host im LAN seinen Namen über DHCP z. B nicht als „ip-phone-forum.de“ angeben.
Wenn unter Domain nichts angegeben wurde, wird jeder DHCP-Hostname, der einen Domain-Teil enthält, zurückgewiesen. Wenn jedoch im Feld Domain ein Name angegeben wurde, dann sind Hostnamen, die einen Domain-Teil enthalten, erlaubt, vorausgesetzt, dieser Domain-Teil und der Name im Feld Domain stimmen überein.
Wenn ein Name unter Domain angegeben wurde und somit Hostnamen ohne Domain-Teil erlaubt sind, kann außerdem der Name im Domain-Feld als optionaler Domain-Teil hinzugefügt werden.
Wenn man z. B. im Feld Domain „fritz.box“ einträgt und außerdem ein Rechner mit dem DHCP-Hostnamen „Laptop“ vorhanden ist, dann ist mit dnsmasq die IP-Adresse dieses Rechners sowohl als „Laptop“ als auch als „laptop.fritz.box“ verfügbar.
Gibt man die Domain als „#“ an, dann wird die Domain von der ersten „search“-Direktive in /etc/resolv.conf gelesen.
Anmerkung: Diese Funktion entspricht den dnsmasq-Parametern -E -s <domainname>
Unter Zusätzliche Kommandozeilen-Optionen (für Experten) lassen sich weitere dnsmasq-Optionen eintragen. Einige dieser Optionen sind in den folgenden Beispielen erläutert. Alle Parameter finden sich auf der originalen Man-Page von dnsmasq.
Durch
-O 44,192.168.178.1 -O 45,192.168.178.1 -O 46,8
wird unter der Adresse 192.168.178.1 ein WINS- und ein NBDD-Server mit dem NetBIOS-Knotentyp „h-Knoten“ beim Client eingetragen.
-O bezeichnet spezielle Optionen für DHCP-Clients, hier für NetBIOS über TCP/IP; dem Code 44 folgt die IP-Adresse für WINS-Server, 45 die für NBDD-Server, und 46 der Knotentyp.
Die meisten DHCP-Optionen sind in RFCs festgelegt, eine Übersicht in deutscher Sprache findet man bei Microsoft.
Durch
-R -S 208.67.222.222 -S 208.67.220.220
werden eigene DNS-Einträge genutzt, im Beispiel diejenigen von www.OpenDNS.com. -S nutzt den DNS mit der angegebenen IP-Adresse. Dieser Schalter unterdrückt nicht das Lesen der Datei resolv.conf, das muss zusätzlich mit -R erledigt werden.
Der integrierte TFTP-Server für einen Zugriff auf die Daten unter /var/ftpd wird wie folgt aktiviert:
--enable-tftp --tftp-root=/var/ftpd
Man sollte also zusätzlich zum Parameter --enable-tftp (der den integrierten TFTP-Server aktiviert) mittels --tftp-root=/irgendein_pfad_auf_der_box angeben, wo die Dateien liegen, auf die per TFTP zugegriffen werden darf. Soll ein Client-Rechner via BOOTP (Bootstrap Protocol – die erweiterte automatische Methode per PXE [Preboot Execution Environment] ist hier nicht möglich) und TFTP gebootet werden, muss noch das entsprechende Bootimage definiert werden. Das geschieht mit folgendem Parameter:
-M [net:<network-id>,]<filename>,[<servername>[,<serveraddress>]]
Dieser setzt die durch den DHCP-Server zurückgegebenen BOOTP-Optionen. Dabei sind Servername und Serveraddress optional, ist hier nichts angegeben, wird der Name leer gelassen und die Adresse auf die Adresse der FRITZ!Box, auf der dnsmasq läuft, gesetzt. Für den von dnsmasq mit --enable-tftp zur Verfügung gestellten TFTP-Dienst ist hier nur der Dateiname erforderlich der das Booten ermöglicht. Sollten optionale Netzwerk-IDs angegeben werden, müssen diese mit der zu sendenden Konfiguration zusammenpassen und außerdem den Vorsatz net: aufweisen.
Nutzen kann man das Ganze zum Beispiel, um den Debian-Etch-Installer via Netzwerk zu booten. Dazu ist auf einem USB-Datenträger das Verzeichnis tftp zu erstellen und von einem Debian-Mirror die Datei netboot.tar.gz herunterzuladen (z. B. vom Debian-Mirror der TU Chemnitz) und in das soeben erstellte Verzeichnis zu entpacken. Ist der Datenträger mit NTFS oder FAT32 formatiert, muss der komplette Ordner debian-installer/i386/pxelinux.cfg und die Datei debian-installer/i386/pxelinux.0 auf die gleiche Ebene wie debian-installer verschoben werden. Anschließend konfiguriert man dnsmasq wie folgt (Pfad eventuell noch anpassen, je nach Konfiguration beim Bauen des ds-mod):
--enable-tftp --tftp-root=/var/media/ftp/uStor01/tftp -M pxelinux.0
Wenn der TFTP-Server auf einem anderen Rechner läuft, z. B. hier auf 192.168.178.10 mit dem Bootfile pxelinux.0, dann ist dieser anzugeben:
-M pxelinux.0,192.168.178.10,192.168.178.10
Im Bereich DHCP Range (eine pro Zeile) werden die Ranges in der Form
[[net:]network-id,]<start-addr>,<end-addr>[[,<netmask>],<broadcast>][,<default lease time>]
eingetragen.
Dabei werden Adressen aus dem Bereich von <start-addr> bis <end-addr> zuzüglich der statisch definierten Adressen aus den Einträgen in der Hosts-Liste vergeben.
Wenn eine Lease-Time („Mietzeit“) angegeben wird, dann werden Leases für diese Zeitspanne vergeben. Die Lease-Time kann in Sekunden (z. B. 30) oder Minuten (z. B. 45m) oder Stunden (z. B. 1h) oder durch das Wort „infinite“ (unendlich) angegeben werden. Diese Option kann mit unterschiedlichen Adressen wiederholt werden, um den DHCP-Service zu mehr als einem Netz zu ermöglichen.
Für direkt verbundene Netze (d. h. Netze, zu denen die FRITZ!Box mit laufenden dnsmasq eine Schnittstelle hat) ist netmask optional. Es wird jedoch für Netze verlangt, die den DHCP-Service über einen Relay-Agenten empfangen.
Die Broadcast-Adresse ist immer optional. Die optional freigestellte Network-ID ist ein alphanumerisches Label, das dieses Netz kennzeichnet, damit DHCP-Optionen auf einer Per-Netzwerk-Basis spezifiziert werden können. Wenn `net:’ davor gesetzt wird, ändert sie ihre Bedeutung von Setzen eines Tag zu Matching. Nur ein Tag kann gesetzt werden, mehr als ein Tag können jedoch gematchet werden. Die Endadresse kann durch das Schlüsselwort static ersetzt werden, das weist dnsmasq an, DHCP für das spezifizierte Netz zu ermöglichen, aber IP-Adressen nicht dynamisch zuzuteilen. Nur Hosts, die statisch vergebene Adressen entsprechend der Einträge in der Hosts-Liste haben, werden bedient.
Mit dem Eintrag
192.168.178.20,192.168.178.200,12h
werden Adressen von IP 192.168.178.20 bis IP 192.168.178.200 mit einer Lease-Time von 12 Stunden vergeben.
<ipaddr>|* <hwaddr>|[id:]<client_id>|* [net:]<netid>|* <hostname>|* [ignore]
Die Einträge in der Liste fest vorgegebener Hostnamen erlauben, dass einem Rechner mit einer bestimmten Hardwareadresse immer die gleichen Hostname, IP-Adresse, Lease-Time zugeteilt werden können. Ein hier spezifizierter Hostname wird über den DHCP-Client auf den Rechner geliefert. Hier statisch vergebene IP-Adressen werden logischerweise bei der dynamischen IP-Vergabe ausgespart.
Hostnamen mit Punkten im Namen sind ab Release 1.6 nicht mehr zulässig! Dies quittiert dnsmasq mit der Fehlermeldung
fritz daemon.err dnsmasq[ ]: bad name at /etc/ethers line ...
Eine Zuordnung aus der Hosts-Liste ist dann nicht mehr möglich, und es werden einfach andere Adressen zugeordnet.
Es ist auch zulässig, die Hardwareadresse auszulassen und dafür den Hostnamen mit anzugeben, in diesem Fall treffen IP-Adresse und Lease-Time auf jeden möglichen Rechner zu, der diesen Hostnamen liefert. Z. B. weist 00:20:e0:3b:13:af wap infinite dnsmasq an, dem Rechner mit der Hardwareadresse 00:20:e0:3b:13:af den Namen wap und eine unendliche DHCP-Lease-Time zuzuteilen.
lap 192.168.0.199 weist dnsmasq an, dem Rechner lap immer die IP-Adresse 192.168.0.199 zuzuteilen. Die Adressen, die so zugeteilt werden, werden nicht auf den durch die dhsp-range-Option angegebenen Bereich begrenzt, aber sie müssen im Netz, das durch den DHCP-Server bedient wird, vorhanden sein.
Um Hosts zu kennzeichnen, kann man statt der Hardwareadresse auch die Client-ID verwenden, indem man `id:' vorsetzt. So bezieht sich id:01:02:03:04 ….. auf den Host mit Client-ID 01:02:03:04. Man kann auch die Client-ID als Text spezifizieren: id:clientidastext ….. Die spezielle Option id:* bedeutet „alle möglichen Client-IDs ignorieren und ausschließliche Nutzung der Hardwareadressen.“ Dies ist nützlich, wenn ein Client meistens eine feste Client-ID hat, manchmal aber eine andere.
Nur wenn ein Eintrag in der Hosts-Liste mit dem entsprechenden Namen vorhanden ist, kann die zugehörige IP-Adresse über einen DHCP-Lease zugeteilt werden.
Das spezielle Schlüsselwort „ignore“ weist dnsmasq an, einem Rechner nie einen DHCP-Lease anzubieten. Dieser Rechner kann durch seine Hardwareadresse, Client-ID oder Hostnamen, zum Beispiel 00:20:e0:3b:13:af ignore spezifiziert werden. Dies ist nützlich, wenn es einen anderen DHCP-Server im Netz gibt, der von einigen Rechnern benutzt werden soll.
Die Option net:<network-id> setzt das Netzwerk-ID-Tag, wenn diese DHCP-Host-Richtlinie genutzt wird. Das kann verwendet werden, um DHCP-Optionen für diesen Host selektiv zu senden. Ethernet-Adressen (aber nicht Client-IDs) können Wildcard-Bytes, so zum Beispiel 00:20:e0:3b:13:* ignore enthalten. Das veranlasst dnsmasq, ein Range der Hardwareadressen zu ignorieren.
Hardwareadressen können normalerweise irgendeinen Netz(ARP)-Typ aufweisen. Aber es ist auch möglich, sie auf einzelne ARP-Typen einzuschränken, indem man ihnen den ARP-Typ (in HEX) und „-“ voranstellt. So bezeichnet 06-00:20:e0:3b:13:af 1.2.3.4 nur eine Token-Ring-Hardware-Adresse, da die ARP-Adresse für Token Ring 6 ist.