iX 7/2016
S. 135
Praxis
Tools und Tipps
Aufmacherbild

DHCP-Server richtig konfigurieren

Adressverteiler

Das Dynamic Host Configuration Protocol (DHCP) ist eines der wichtigsten Protokolle für die IT-Infrastruktur. Es beherrscht jedoch weit mehr als das bekannte Verteilen von IP-Adressen aus einem Pool.

Ein DHCP-Server weist dynamisch zu konfigurierenden Geräten Netzparameter wie IP-Adresse, Netzmaske, Gateway- und DNS-Server-Adresse zu (RFC 2131). Meist kommt der isc-dhcp-server des Internet Systems Consortium (ISC) zum Einsatz. Unter Linux startet der Server nach dem Installieren mit einer Konfiguration in /etc/dhcp/dhcpd.conf, die man sichern und durch eine einfache Basiskonfiguration ersetzen sollte:

option domain-name "ix.lan";
default-lease-time 3600;
max-lease-time 86400;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
 option routers 192.168.1.254;
 option domain-name-servers 192.168.1.254;
 range 192.168.1.10 192.168.1.199;
}

Die erste Zeile teilt den DHCP-Clients den Namen der Standarddomäne mit. Die *-lease-time-Angaben legen fest, wie viele Sekunden die zugewiesenen Daten benutzt werden dürfen. max legt den Maximalwert fest, den ein Client erbitten darf. Die authoritative-Direktive bestimmt, dass dieser DHCP-Server für das LAN-Segment zuständig ist. Einige mobile Geräte scheinen diese Option für das Erneuern ihrer Daten zu benötigen.

Wenigstens eine subnet-Deklaration ist für den DHCP-Betrieb notwendig. Sie besteht mindestens aus der Definition des Subnetzes und der Subnetzmaske. Der Block in geschweiften Klammern ist optional und legt die Subnetzparameter fest. Innerhalb von Subnetzen kann der Administrator Gruppen und einzelne Hosts definieren. In jedem Abschnitt gelten die jeweils am Anfang definierten Optionen. Fehlen sie, kommen diejenigen des darüberliegenden Abschnitts zum Tragen.

Fremde im Netz enttarnen

Listing: host-Direktive für Adresszuweisung

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.10 192.168.1.199;
  deny unknown-clients; 

  host desktop {
    hardware ethernet 06:12:34:56:78:9A;
    
  }

  host hp712 {
    hardware ethernet 08:00:DE:AD:BE:EF;
    fixed-address 192.168.1.12;
    option host-name "hp712";
    filename "lif59.fs";
    # deny booting;
  }
}

subnet 192.168.100.0 netmask 255.255.255.0 {
  range 192.168.100.200 192.168.100.229;
  option host-name = concat("fremdling",  binary-to-ascii(10,8,"", substring(leased-address,3,1)));
  allow unknown-clients; 
}

Die host-Direktive weist einem bestimmten Client Werte zu, wobei nur dessen MAC-Adresse (Media Access Control, die eindeutige Kennung einer Netzkarte) angegeben werden muss (siehe Listing-Kasten). Vom Host desktop etwa ist nur die MAC-Adresse hinterlegt, sodass der DHCP-Server diesen Rechner als bekannt ansieht („known client“) und ihm eine freie IP-Adresse aus dem Subnetz zuordnet. Die deny-Option verhindert hier, dass unbekannte oder nicht definierte MAC-Adressen eine IP-Adresse erhalten. Gäste im WLAN lassen sich so etwa in ein anderes Subnetz ausgliedern.

Im Listing weist die Konfiguration einer HP-Workstation eine feste IP-Adresse und einen Hostnamen (hp712) zu. Per filename-Direktive bootet diese Maschine mit einem OpenBSD-Dateisystem (lif59.fs) aus dem Netz – dazu ist jedoch ein TFTP-Server erforderlich. Die zusätzliche Direktive deny booting (im Listingkasten per Kommentarzeichen deaktiviert) setzt die Funktion zeitweise außer Kraft.

Schließlich definiert die Beispielkonfiguration ein zweites Subnetz, aus dem Systeme mit unbekannten MAC-Adressen eine IP-Adresse erhalten. Dabei wird der Rechnername automatisch aus „fremdling“ und dem letzten Oktett der IP-Adresse gebildet.

Außerdem lassen sich Bereiche von MAC-Adressen in Subnetzen oder Pools zusammenfassen und so etwa virtuelle Maschinen in eigene Adressräume verlagern. Der Administrator muss hierzu Klassen und Pools definieren. VirtualBox beispielsweise teilt seinen virtuellen Maschinen zufällige MAC-Adressen im Bereich 08:00:*:*:*:* zu:

class "virtualbox" 
 {match if binary-to-ascii(16,8,":", 
 substring(hardware, 1, 2)) = "08:00";
}

Die VMs sollen einen eigenen Adresspool bekommen:

pool {
      allow members of "virtualbox";
      range 192.168.1.200 192.168.1.249;
}

Weitere Optionen finden sich in den Manual Pages (man dhcpd.conf), spannend für Administratoren ist jedoch vor allem die ausführliche Dokumentation unter www.isc.org (siehe „Alle Links“).

Manche Virtualisierungsprodukte, Office-Router und vorkonfigurierte Server-Appliances bringen einen DHCP-Server mit, der den eigenen im LAN stört. Will man solche versteckten Server findet, gibt es unter Linux spezielle Werkzeuge wie dhcping, das einen DHCP-Request sendet:

dhcping -s 255.255.255.255 -r -v

Erhält der Administrator mehr als eine Antwort, befinden sich weitere DHCP-Server im LAN. Alternativ lässt sich der Datenverkehr mit tcpdump oder Wireshark beobachten. In Letzterem sollte man der Übersicht halber bootp.type == 2 als Filter verwenden, damit die Software nur DHCP-Offers anzeigt. (tiw)