Klassenbildung im DHCP

Einführung

Es gibt Situationen, in welchen es notwendig ist, Gruppen von DHCP-Clients unterschiedlich zu behandeln.

Beispiel: Ein IP-Netz wird zwei OEs zugeteilt. Diese müssen sich das IP-Netz teilen. Für jede von ihnen ist ein Bereich daraus reserviert:

  • Netz: 130.60.10.0/25
  • OE A: 130.60.10.3 - 63
  • OE B: 130.60.10.54 - 124

Die Clients sollen mittels eines gemeinsamen DHCP-Servers konfiguriert werden. Die Clients von OE A und OE B sollen dabei die IP-Adressen aus jeweils einem separaten IP-Pool erhalten, der im jeweiligen Adressbereich liegt.
Mit einer simplen DHCP-Serverkonfiguration ist das nicht möglich. Alle Clients erhalten die Adressen aus einem einzigen Adresspool.
Damit das gewünschte Szenario möglich wird, müssen Klassen von Clients gebildet werden, z.B. die für die OEs A und B, und diesen Klassen müssen die Clients aufgrund spezifischer Merkmale automatisch zugeordnet werden. Im Prinzip liess sich das über eine Erfassung der Ethernet-Adressen schon immer erreichen, was aber ziemlich aufwändig ist. Mit den DHCP-Klassen kann das Merkmal auf jedem Client per Software-Konfiguration gesetzt werden.
Für Unix- und Windows-Clients kann dazu das Konzept der «User Class» nach RFC 3004 (DHCP-Option 77) benutzt werden: Auf allen Clients wird in der DHCP-Konfiguration eine einheitliche «User Class» gesetzt.
OS X-Clients unterstützen die Option 77 leider nicht. Allerdings lässt sich zu diesem Zweck auch die Option 61 «Client-Identifier» einsetzen, indem man auf jedem Client der Gruppe den gleichen Identifier setzt.
Die Optionen 77 und 61 lassen sich dann gemischt nutzen.

Server-Konfiguration (fiktives Beispiel)

# Allgemeine Klassendeklaration

# Klasse A fuer Clients mit "UserClass-ID" (Option 77: Windows, Unix)
class "user-class-a" {
match option user-class;
}

# Klasse A fuer Clients mit "Client-ID" (Option 61: OS X)
class "client-class-a" {
match substring ( option dhcp-client-identifier, 1, 9);
}

# Klasse B fuer Clients mit "UserClass-ID" (Option 77: Windows, Unix)
class "user-class-b" {
match option user-class;
}

# Klasse B fuer Clients mit "Client-ID" (Option 61: OS X)
class "client-class-b" {
match substring ( option dhcp-client-identifier, 1, 9);
}

# Subklassen im Netz 130.60.10.0/25:

# Subklasse "user-class-a" fuer Clients mit Wert "OEA"
subclass "user-class-a" "OEA";

# Subklasse "client-class-a" fuer Clients mit Wert "OEA"
subclass "client-class-a" "OEA";

# Subklasse "user-class-b" fuer Clients mit Wert "OEB"
subclass "user-class-b" "OEB";

# Subklasse "client-class-b" fuer Clients mit Wert "OEB"
subclass "client-class-b" "OEB";

# Poolzuweisungen der (Sub)klassen im Netz 130.60.10.0/25:

# Pool fuer den Subklassen "user-class-a" und "client-class-a" zugeordnete Clients:
deny dynamic bootp clients;
allow members of "user-class-a";
allow members of "client-class-a";
range 130.60.10.3 130.60.10.63;
}

# Pool fuer den Subklassen "user-class-b" und "client-class-b" zugeordnete Clients:
deny dynamic bootp clients;
allow members of "user-class-b";
allow members of "client-class-b";
range 130.60.10.64 130.60.10.124;
}

Unix/Linux Client-Konfiguration

Unter Linux wird die DHCP-Client-Konfigurationsdatei /etc/dhcp3/dhclient.conf um folgenden Eintrag ergänzt:

interface "<interface>" {
send user-class "<user class>";
}

Beispiel für die «user-class-a» gemäss obigem Serverkonfigurations-Beispiel:
interface "eth0" {
send user-class "OEA";
}

Windows Client-Konfiguration

Unter Windows (XP, Vista) wird der Befehl «ipconfig» zum Setzen und Abfragen der «User Class» benutzt. Der gesetzte Wert wird in der Systemkonfiguration gespeichert und überdauert den Systemneustart.

  • Setzen: ipconfig /setclassid <LAN-Verbindung> <user class>
  • Abfragen: ipconfig /showclassid <LAN-Verbindung>
  • Löschen: ipconfig /setclassid <LAN-Verbindung>

Anstelle von <LAN-Verbindung> kann auch «*» für alle Interfaces benutzt werden.

Beispiel für die «user-class-a» gemäss onigem Serverkonfigurations-Beispiel:
ipconfig /setclassid "LAN-Verbindung" OEA

Macintosh/OS X Client-Konfiguration

Unter «Systemeinstellung - Netzwerk - Weitere Optionen - TCP/IP - IPv4 konfigurieren» wird «DHCP» eingestellt. Im Eingabdefeld «DHCP-Client-ID:» wird der Wert der User Class als Client-ID eingegeben.

Beispiel für die «user-class-a» gemäss obigem Servekonfigurations-Beispiel: