DHCP-Server mit DNS #

Dieser Artikel beschreibt ein älteres Setup, das wir im KrefixLinux-Router benutzt haben. Eine für normale Heimnetze viel einfachere Lösung bietet das neuere Paket DnsMasq. Die hier verwendete Kombination aus Bind und dem DHCP-Server vom ISC ist für sehr komplexe Aufgabenstellungen immer noch die leistungsfähigere, aber DnsMasq sollte eigentlich für jeden, der einen Server in seinem Heim- oder Firmennetz benötigt, die bessere Wahl sein.

Ein DHCP-Server mit einer herkömmlichen Konfiguration gibt an neue, unbekannte Clients lediglich IP-Adressen aus einem vorgegebenen Adresspool. Bei unserem Projekt KrefixLinux wollen wir jedoch, dass das gesamte Netz komplett automatisch konfiguriert werden kann. Dazu gehört, daß für einen neuen Client auch ein Name vergeben wird, der dann auch vom Nameserver richtig aufgelöst wird.

Dabei sind folgende Schritte nötig:

  • Vergabe einer IP-Adresse
  • automatische Erzeugung eines Namens und Übergabe an den Client
  • Übergabe des Namens an den Nameserver
  • Konfiguration des Nameservers, damit er diesen Namen annimmt

Benutzte Softwarepakete #

Wir benutzen für KrefixLinux die Debian-Pakete dhcp3-server und bind9, die beide vom Internet Software Consortium kommen. Diese beiden arbeiten gut miteinander und auch mit dem von uns verwendeten DHCP-Client (siehe NetzKonfigMitDHCP) zusammen. Außerdem stellt bind sowieso den de-facto-Standard für DNS-Server im Internet dar.

Leider ist die (hier beschriebene) Konfiguration der Server des ISC nicht gerade einfach und übersichtlich. Deshalb an dieser Stelle eine einfache Alternative, die im Wesentlichen in einer Datei konfiguriert wird: Das Debian-Paket DnsMasq enthält einen DNS-Proxy. Er kann die /etc/hosts-Datei des Servers auslesen und benutzt die IP-Adresse/Name-Zuordnung für die lokale Domain. Und IP-Adressen per DHCP vergeben kann er auch! Das wäre sicher eine Alternative für KrefixLinux2...

Nach Installation des dhcp3-server-Paketes muss die Datei /etc/dhcp3/dhcpd.conf angepasst werden. Einfache Beispiele sind darin bereits enthalten, so daß wir keine besonderen Probleme hatten. Für kompliziertere Dinge ist dieser Server allerdings auch zu haben. Dieser DHCP-Server ist wohl auch der einzige, der direkt (ohne Hilfs-Skripte) einen Nameserver updaten kann, wenn neue Hosts angemeldet werden.

Vergabe einer IP-Adresse #

Mit folgendem Ausschnitt aus der dhcpd.conf vergeben wir unsere IP-Adressen:

 default-lease-time 86400;  # ein Tag
 max-lease-time 604800;     # eine Woche
 subnet 192.168.200.0 netmask 255.255.255.0 {
   range 192.168.200.2 192.168.200.127;
   option host-name = concat("alpha", binary-to-ascii(
                        10,8,"",substring(leased-address,3,1)));
   option routers 192.168.200.1;
 }
 subnet 192.168.201.0 netmask 255.255.255.0 {
   range 192.168.201.2 192.168.201.127;
   option host-name = concat("beta", binary-to-ascii(
                        10,8,"",substring(leased-address,3,1)));
   option routers 192.168.201.1;
 }
 subnet 192.168.202.0 netmask 255.255.255.0 {
   range 192.168.202.2 192.168.202.127;
   option host-name = concat("gamma", binary-to-ascii(
                        10,8,"",substring(leased-address,3,1)));
   option routers 192.168.202.1;
 }
 subnet 192.168.203.0 netmask 255.255.255.0 {
   range 192.168.203.2 192.168.203.127;
   option host-name = concat("delta", binary-to-ascii(
                        10,8,"",substring(leased-address,3,1)));
   option routers 192.168.203.1;
 }

Dabei benutzen wir für KrefixLinux immer 4 Interfaces, weil das die von uns gewählte Höchstzahl an Interfaces ist. Bei der Anwendung für einen speziellen Rechner braucht man natürlich nur soviele subnet-Deklarationen wie Netzwerkkarten. Falls eine dieser subnet-Deklarationen kein passendes Interface findet (weil es z.B. gar nicht so viele Interfaces gibt), wird die Deklaration einfach verworfen. Nachdem der Server selber die Adresse 192.168.20x.1 hat, werden die restlichen Clients jetzt auf die Adressen ...20x.2 bis ...20x.127 verteilt. (Die Adressen 128-255 behalten wir uns vor, falls ein Admin Adressen fest vergeben will.)

Erzeugung des Namens #

Zur dynamischen Erzeugung von Namen hat der dhcp eine Art Skriptsprache, die mächtig genug ist, um alle benötigten Ausdrücke auszuwerten. Diese ist auf der dhcp-eval-Manpage beschrieben. Um nun unsere Namen zu erzeugen, benutzen wir folgende Zeile:
 option host-name = concat("alpha", binary-to-ascii(10,8,"",substring(leased-address,3,1)));

Die host-name-Zeile wandelt die letzte Zahl der vergebenen IP-Adresse in einen Textstring und hängt diesen an das Wort "alpha" (den Basisnamen für unsere Clients) an. So heisst z.B. der Rechner mit der IP-Adresse 192.168.200.42 dann alpha42. In unserer Konfiguration haben wir für verschiedene Netzwerkkarten (die jeweils andere IP-Subnetze versorgen) dann verschiedene Basisnamen benutzt.

Übergabe des Namens an den Client #

Die folgenden Optionen haben wir in unserer Konfiguration auch noch eingesetzt. Durch diese meldet der DHCP-Server dem angegebenen Nameserver (auf 127.0.0.1) alle Namen, die er vergibt.

 ddns-update-style interim;
 ddns-domainname "intranet";
 update-static-leases true;
 ignore client-updates;
 authoritative;
 zone intranet. {
   primary 127.0.0.1;
 }
 zone 168.192.in-addr.arpa. {
   primary 127.0.0.1;
 }

Konfiguration des Nameservers #

Wie im folgenden Ausschnitt der named.conf gezeigt, muss im Nameserver lediglich die allow-update-Direktive gesetzt werden:

 zone "intranet" {
   type master;
   file "/etc/bind/db.intranet";
   allow-update { 127.0.0.1; };
 };
 zone "168.192.in-addr.arpa" {
   type master;
   file "/etc/bind/db.192.168";
   allow-update { 127.0.0.1; };
 };

Sicherheit #

Es ist natürlich wichtig, daß nicht irgendein anderes Programm einfach den Nameserver manipuliert. Andere Beispiel-Lösungen und die manpage zeigen, wie man eine Authentifizierung benutzen kann, um sicherzustellen, daß nur der DHCP-Server dies kann. Dadurch, das wir updates nur von der localhost-Adresse 127.0.0.1 zulassen, haben wir bereits den wichtigsten Schritt getan. Updates von anderen als dem eigenen Rechner aus sollten eigentlich nie nötig sein. Dennoch haben jetzt alle Benutzer und Dienste auf diesem Rechner die Möglichkeit, die angegebenen DNS-Zonen zu verändern.

Tags:  Netzwerk, ThinClient

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-4) was last changed on 25-Jan-2008 09:06 by ThomasBayen