Unterabschnitte

DHCP Server (ISC-DHCPD 4)

Version 1.4.0 - Stand 14.05.2011
(c) Maximilian Pasternak <max(at)eisfair(dot)org>

Copyrights

Der in diesem Paket enthaltene DHCP Server ist eine Open Source Software und unterliegt dem Copyright des Internet Systems Consortium, Inc. (``ISC''). Die Verwendung erfolgt nach den Bestimmungen der ISC-Lizenz (ähnlich der BSD License), diese kann unter http://www.isc.org/software/licenseeingesehen werden.

Die ebenfalls enthaltenen Bestandteile des Syslinux Projekts und des Etherboot Projekts unterliegen der GNU General Public License Version 2 oder aktueller. Diese kann unter http://www.gnu.org/licenses/gpl-2.0.htmleingesehen werden.

Die in diesem eisfair-Paket zusätzlichen, eisfair-spezifischen Bestandteile unterliegen ebenfalls der GNU General Public License Version 2 oder aktueller.

Achtung: Ich gebe weder eine Garantie auf die Funktionsfähigkeit des dhcpd Pakets, noch hafte ich für Schäden, z.B. Datenverlust, die durch den Einsatz des dhcpd Pakets entstehen.

Einleitung

Das DHCP (Dynamic Host Configuration Protocol) wird zur Automatisierung der Konfiguration von Computern in TCP/IP-Netzwerken genutzt. DHCP kann dabei die IP-Adressen automatisch vergeben, TCP/IP-Stack Konfigurationen wie die Subnet-Mask und den Standard-Gateway übergeben und andere Konfigurationen wie Adressen der Drucker-, Zeit- oder Newsserver verteilen.
(Übersetzt von http://www.dhcp.org/)

Dieses Paket enthält den Server (=Daemon) zur Vergabe von IP-Adressen in lokalen und entfernten Netzwerken.

Dieses Paket enthält:

Leistungsmerkmale des Pakets:

Ziel bei der Erstellung dieses Paketes war die möglichst vollautomatische Erstellung der Konfigurationsdatei. Dazu werden die auf dem Server bekannten Einstellungen und Dienste als Basis genutzt. Ein Anwender soll im Sinne der Philosophie von eisfair möglichst ``easy'' dieses Paket konfigurieren können. Deshalb wurde bewusst eine minimalistische Konfiguration und ein weitreichender Automatismus implementiert.

Für fortgeschrittene Anwender und individuelle Netztopologien bzw. Anforderungen kann auf eigenes Risiko die Plugin-Schnittstelle genutzt werden.

Der DHCP Server dhcpd

Der DHCP Server vergibt IP-Adressen in lokale Netzwerken. Dafür gibt es einen Pool von Adressen, die vergeben werden dürfen. Zudem bestimmt der Server eine Zeitspanne, für die die vergebenen Adressen gültig sind. Nach dieser Zeit muss der Client die Adresse erneuern. Im Normalfall bekommt der Client die selbe Adresse erneut, aber darauf kann man sich nicht verlassen.

Zusätzlich zur IP-Adresse sendet der Server Informationen über das Standard Gateway und den Nameserver. Daher müssen diese Werte nicht am Desktop PC eingegeben werden, solange das am DHCP Server korrekt konfiguriert wurde. In diesem Paket werden diese Werte für die gängigsten Netztopologien automatisch ermittelt und müssen daher nicht manuell gepflegt werden. Unter Windows muss eine Option wie „IP-Adresse automatisch beziehen`` gewählt werden. Leider unterscheidet sich hier die Konfiguration von Version zu Version.

Zusätzlich zu normalen dynamischen IP-Adressen hat der Server eine Funktion um einem Client immer die selbe IP-Adresse zuzuweisen. ``So ein Unfug'' - werden nun viele denken, aber es gibt dafür gute Gründe. So müssen nicht sämtliche Client PCs neu konfiguriert werden, falls sich etwas in der Netzwerkkonfiguration geändert hat (z.B. die Adresse des Standard Gateways oder der Nameserver).

Konfiguration

Die Konfiguration kann über den Menüpunkt ``Edit Configuration'' geändert werden. Nach dem beenden des Editors wird diese dann geprüft. Sofern ein Fehler aufgetreten ist sollten Sie diesen dann beheben.

Allgemeine Einstellungen [Basic configuration]

START_DHCPD

Setzen Sie diesen wert auf 'yes' um den DHCP Server zu aktivieren und IP-Adressen zu vergeben.

Gültige Werte: yes,no

Default: START_DHCPD='no'

Dynamische IP-Bereiche [Dynamic IP Ranges]

DHCPD_DYNAMIC_N

Hier wird die Anzahl der Bereiche von IP-Adressen angegeben, die per DHCP vergeben werden sollen.

Default: DHCPD_DYNAMIC_N='1'

DHCPD_DYNAMIC_x_ACTIVE

Hier kann für jeden einzelnen Bereich die Verteilung der IP-Adressen deaktiviert ('no') werden.

Gültige Werte: yes,no

Default: DHCPD_DYNAMIC_1_ACTIVE='yes'

DHCPD_DYNAMIC_x_RANGE

Hier werden die Bereiche der IP-Adressen angegeben, die der Server vergeben darf. Achtung! Hier dürfen keine IP-Adressen angegeben werden, die einem Client fest zugeteilt sind oder die Gateways oder andere Server nutzen.

Default: DHCPD_DYNAMIC_1_RANGE='192.168.6.100 192.168.6.150'

PXE Menü [PXE Menu]

DHCPD_PXE_N

Hier wird die Anzahl der Einträge im PXE-Bootmenü angegeben. Das PXE-Bootmenü wird für alle Clients mit dynamischen IP-Adressen sowie für die Clients mit statischen IP-Adressen, bei denen PXE aktiviert wurde, aber keine individuellen PXE-Startparameter angegeben wurden, verwendet.

Default: DHCPD_PXE_N='1'

DHCPD_PXE_x_NAME

Hier wird der Name der PXE Konfiguration angegeben.

Beispiel: DHCPD_PXE_1_NAME='fli4l'

DHCPD_PXE_x_ACTIVE

Hier kann eine PXE-Konfiguration deaktiviert ('no') werden. Um eine Konfiguration zu verwenden, muss diese Variable auf 'yes' gesetzt werden.

Gültige Werte: yes,no

Default: DHCPD_PXE_1_ACTIVE='no'

DHCPD_PXE_x_DESCRIPTION

Hier wird der beschreibende Text für die Anzeige im PXE-Bootmenü eingegeben.

Beispiel: DHCPD_PXE_1_DESCRIPTION='fli4l (router)'

DHCPD_PXE_x_KERNEL

Hier wird der für PXE zu verwendende Kernel angegeben.

Hier wird der Pfad des Kernel relativ zum Verzeichnis /tftpboot angegeben. Zur Übertragung des Kernel wird pxelinux verwendet, die Konfiguration von pxelinux wird automatisch erstellt.

Um von der lokalen Festplatte oder Diskette zu booten, muss diese Option leer gelassen werden.

Um ein Image mittels memdisk booten zu können, muss diese Option ebenfalls leer gelassen werden.

Beispiel: DHCPD_PXE_1_KERNEL='fli4l/kernel'

DHCPD_PXE_x_INITRD

Hier wird der Name der zu DHCPD_PXE_x_KERNEL gehörigen initrd angegeben. Hier muss der Pfad relativ zu /tftpboot angegeben werden.

Um von der lokalen Festplatte oder Diskette zu booten, muss diese Option leer gelassen werden.

Um ein Image mittels memdisk zu booten, muss hier der Pfad des Images relativ zu /tftpboot angegeben werden.

Beispiel: DHCPD_PXE_1_INITRD='fli4l/rootfs.img'

DHCPD_PXE_x_ROOTFS

Hier wird der Name des zu DHCPD_PXE_x_KERNEL gehörigen rootfs angegeben.

Beispiel: DHCPD_PXE_1_ROOTFS='/dev/tmpfs'

DHCPD_PXE_x_APPEND

Diese Option dient zur Angabe weiterer Optionen bei der Verwendung von pxelinux.

Beispiel: DHCPD_PXE_1_APPEND='vag=normal ramdisk_size=28000'

Default: DHCPD_PXE_1_APPEND=' '

Statische IP-Adressen [Static IP Adresses]

DHCPD_CLIENT_N

Hier wird die Anzahl der festen IP-Adressen angegeben, die per DHCP zugeteilt werden sollen. Dies ist eine spezielle Verteilung von IP-Adressen, die auf Basis der Hardware Adresse der Netzwerkkarte des Clients geschieht.

Beispiel: DHCPD_CLIENT_N='2'

DHCPD_CLIENT_x_NAME

Hier wird der Hostname des Clients angegeben, dem eine feste Adresse zugeteilt werden soll. Wenn diese Feld leer gelassen wird, wird der Hostname automatisch generiert.

Beispiel: DHCPD_CLIENT_1_NAME='fixed-ip-1'

DHCPD_CLIENT_x_ACTIVE

Hier kann ein einzelner Client deaktiviert ('no') werden. Um einen Client zu verwenden, muss diese Variable auf 'yes' gesetzt werden.

Gültige Werte: yes,no

Default: DHCPD_CLIENT_1_ACTIVE='no'

DHCPD_CLIENT_x_MAC

Hier wird die Hardware Adresse der Netzwerkkarte angegeben, der die IP-Adresse per DHCP zugeteilt werden sollen. (Ethernet Karten habe eine Adresse der Form 00:10:A4:0B:4D:36). Die Adresse kann mittels winipcfg unter Windows 95/98/Me, ``ipconfig -all'' unter Windows NT/2000/XP und ``ifconfig'' unter Linux ausgelesen werden.

Beispiel: DHCPD_CLIENT_1_MAC='00:01:02:03:04:06:07'

DHCPD_CLIENT_x_IP

Dieser Eintrag enthält die IP-Adresse zur korrespondierenden DHCPD_CLIENT_%_MAC. Achtung: hier darf keine Adresse aus dem in DHCPD_DYNAMIC_%_RANGE angegebenen Bereich verwendet werden!

Beispiel: DHCPD_CLIENT_1_IP='192.168.6.2'

DHCPD_CLIENT_x_NETBOOT

Wenn diskless Clients (z.B. PCs ohne eingebaute Festplatte) zum Einsatz kommen sollen, kann mit dieser Option das Image angegeben werden, des dem Client übermittelt werden soll.

Für den Einsatz von pxelinux über die Optionen DHCPD_CLIENT_x_PXE_KERNEL usw. muss diese Option leer bleiben.

Durch die Angabe von 'yes' wird der Standard pxelinux.0 (in diesem Paket enthalten) aktiviert. Zur Verwendung des PXE-Menüs muss diese Option auf 'yes' gesetzt werden und die zu diesem Client gehörigen PXE-Parameter müssen leer bleiben.

Um ein spezielles Netboot-Image (z.B. Etherboot) booten zu können, muss dieses im Verzeichnis /tftpboot abgelegt werden und der hier angegebene Dateiname darf das führende /tftpboot nicht enthalten (z.B. DHCPD_CLIENT_1_NETBOOT='3c90x.zpxe').

Default: DHCPD_CLIENT_1_NETBOOT='yes'

DHCPD_CLIENT_x_PXE_KERNEL

Beim Booten über PXE wird mit dieser Option der Kernel angegeben, der dem Client übermittelt werden soll.

Der Kernel muss im Verzeichnis /tftpboot/DHCPD_CLIENT_x_NAME abgelegt sein und den hier angegebenen Namen bekommen. Zur Übertragung des Kernel wird pxelinux verwendet, die Konfiguration von pxelinux wird automatisch erstellt.

Um von der lokalen Festplatte oder Diskette zu booten oder um ein Image mittels memdisk zu booten, muss diese Option leer gelassen werden.

Default: DHCPD_CLIENT_1_PXE_KERNEL=' '

DHCPD_CLIENT_x_PXE_INITRD

Hier wird der Name der zu DHCPD_CLIENT_x_PXE_KERNEL gehörigen initrd angegeben. Diese muss im selben Verzeichnis wie der Kernel liegen.

Bei der Verwendung von memdisk wird hier in analoger weise das zu bootende Image angegeben.

Um von der lokalen Festplatte oder Diskette zu booten, muss diese Option leer gelassen werden.

Default: DHCPD_CLIENT_1_PXE_INITRD=' '

DHCPD_CLIENT_x_PXE_ROOTFS

Hier wird der Name des zu DHCPD_CLIENT_x_PXE_KERNEL gehörigen rootfs angegeben.

Default: DHCPD_CLIENT_1_PXE_ROOTFS=' '

DHCPD_CLIENT_x_PXE_APPEND

Diese Option dient zur Angabe weiterer Optionen bei der Verwendung von pxelinux.

Default: DHCPD_CLIENT_1_PXE_APPEND=' '

Entfernte Netzwerke [Remote Networks]

DHCPD_EXTRA_N

Hier wird die Anzahl der entfernten Netzwerke angegeben, an die der Server IP-Adressen über ein DHCP Relay vergeben soll.

Default: DHCPD_EXTRA_N='0'

DHCPD_EXTRA_x_ACTIVE

Hier kann für ein einzelnes entferntes Netzwerk die Vergabe von IP-Adressen deaktiviert ('no') werden.

Gültige Werte: yes,no

Default: DHCPD_EXTRA_1_ACTIVE='no'

DHCPD_EXTRA_x_RANGE

Hier werden die zusätzlichen IP-Bereiche angegeben, die von diesem DHCP Server verwaltet werden. Im Gegensatz zu DHCPD_DYNAMIC_%_RANGE sind diese Netzwerke nicht direkt an diesen Server angeschlossen. Der Router zu diesem Netzwerk muss den DHCP-RELAY Service anbieten.

Beispiel: DHCPD_EXTRA_1_RANGE='192.168.70.100 192.168.70.150'

DHCPD_EXTRA_x_NETMASK

Netzmaske für das entfernte Netzwerk.

Default: DHCPD_EXTRA_1_NETMASK='255.255.255.0'

DHCPD_EXTRA_x_DNS_SERVER

DNS-Server für das entfernte Netzwerk.

Default: DHCPD_EXTRA_1_DNS_SERVER='192.168.6.1'

DHCPD_EXTRA_x_GATEWAY

Default Route das entfernte Netzwerk.

Default: DHCPD_EXTRA_1_GATEWAY='192.168.70.1'

Aktivierung der Plugins [DHCP Server Plugins -> Plugin Activation]

DHCPD_PLUGIN_x

Hier kann die Verwendung der einzelnen, separat zu installierenden Plugins aktiviert werden.

ACHTUNG: Bei Aktivierung eines Plugins kann es zu unvorhersehbaren Fehlfunktionen kommen. Die Sicherstellung der korrekten Funktion obliegt dem Autor des jeweiligen Plugins.

Gültige Werte: yes,no

Default: DHCPD_PLUGIN_x='no'

Anwendungsbeispiel: Booten der System Rescue CD per PXE

Als Basis dieses Beispiels dient das ISO-Image der unter SystemRescueCD, das unter http://www.sysresccd.org/ heruntergeladen werden kann. Im weiteren wird von der Version 2.0.1 ausgegangen.

Das ISO-Image wird unter /tmp/systemrescuecd-x86-2.0.1.iso abgelegt. Dann werden die notwendigen Dateien extrahiert:

    cd /tmp
    mkdir -m 0755 iso
    mount -o loop -t iso96600 systemrescuecd-x86-2.0.1.iso iso

    mkdir -p -m 0755 /tftpboot/sysrcd
    cp iso/isolinux/initram.igz /tftpboot/sysrcd/initram.igz
    cp iso/isolinux/rescuecd    /tftpboot/sysrcd/rescuecd
    cp iso/sysrcd.md5           /tftpboot/sysrcd/sysrcd.md5
    cp iso/sysrcd.dat           /tftpboot/sysrcd/sysrcd.dat

    umount iso
    rmdir iso

Danach kann man in der Konfiguration des dhcpd Pakets die entsprechenden Eintragungen vornehmen. Dazu wird zunächst ein neuer Eintrag dem PXE-Menü hinzugefügt. Dann werden dort folgende Einstellungen vorgenommen:

    DHCPD_PXE_*_NAME         sysrescd
    DHCPD_PXE_*_ACTIVE       yes
    DHCPD_PXE_*_DESCRIPTION  System Rescue CD
    DHCPD_PXE_*_KERNEL       sysrcd/rescuecd
    DHCPD_PXE_*_INITRD       initram.igz
    DHCPD_PXE_*_ROOTFS
    DHCPD_PXE_*_APPEND       dodhcp netboot=tftp://192.168.6.1/sysrcd/sysrcd.dat

Anstatt der 192.168.6.1 muss hier natürlich die IP-Adresse des DHCPD und TFTP Servers eingetragen werden.

Nach dem aktivieren der Konfiguration steht dann den per PXE bootenden Clients die System Rescue CD als zusätzliche Option zur Verfügung.

Administration

Zur Administration des DHCP Servers gibt es ein Untermenü im Setup. Dort kann die Konfiguration bearbeitet (Edit Configuration), der Status des Servers angezeigt bzw. dieser gestartet oder gestoppt werden.

Der Server kann von der Kommandozeile aus mit dem Script in /etc/init.d gesteuert werden:

    /etc/init.d/dhcpd start|stop|status|restart

Beschreibung der Plugin-Schnittstelle

Die Plugin-Schnittstelle wurde geschaffen, um Paketen Zugriff auf die Funktionalitäten des dhcpd Pakets zu ermöglichen. Ein Beispiel dafür wäre ein Paket, das ein über PXE bootbares Betriebssystem enthält. Mittels eines Plugins kann dieses Betriebssystem in das PXE-Menü eingehängt werden, ohne dass dazu die Konfiguration des dhcpd Pakets angepasst werden muss.

Als Beispiel hierfür steht das Paket dhcpd_pxe_diag zur Verfügung, das ein paar einfache Tools zur Hardwarediagnose (z.B. memtest86+) enthält.

Als weiteres Beispiel könnte ein Paket spezielle Hardware direkt in die dhcpd Konfiguration mit eintragen lassen, sodass der Anwender hier nicht mehr eingreifen muss.

Als weitere Anwendungsmöglichkeit der Plugin-Schnittstelle kann über ein Plugin die Erstellung der dhcpd Konfiguration beeinflusst werden. So kann bei umfangreicheren Netztopologien z.B. ein veränderter Gateway oder ein spezieller WINS-Server oder NTP-Server zugesteuert werden. Notfalls kann sogar am Ende des Erstellungsprozesses die gesamte dhcpd Konfiguration (dhcpd.conf) nochmals angepasst oder überschrieben werden.

Alle Plugins werden im Verzeichnis /var/install/plugin.d abgelegt und müssen einen Namen der Form dhcpd.[function].[pos][plugin-name].[extra].sh haben.

Der Name (plugin-name) muss dabei dem package name des eisfair Pakets des Plugins entsprechen, wobei dem eigentlichen Namen noch die Startpriorität (pos) bei mehreren installierten Plugins mittels 2 führender Ziffern vorangestellt wird. Der optionale Block extra kann paketspezifisch frei gewählt werden.

Als Exits (function) stehen derzeit folgende Einstiegspunkte zur Verfügung:

ACHTUNG: Die Plugins werden inline ausgeführt, somit stehen sämtliche Funktionen der eislib direkt zur Verfügung und auch die Variablen der dhcpd Konfiguration können direkt verändert werden. Allerdings darf das Plugin keinesfalls mittels exit beendet werden. Der Rücksprung sollte daher mittels return erfolgen.

Neben dem Hinzufügen weiterer Einträge in einem pre-Plugin ist wohl die Modifikation der Konfiguration während der main-Phase der häufigste Anwendungsfall. Ein wichtiger Punkt hierbei ist, dass die Konfiguration der Vergabe der lokalen dynamischen und statischen IP-Adressen (DHCPD_DYNAMIC_* und DHCPD_CLIENT_*) unterhalb der Konfiguration der jeweiligen Netzwerkkarte (DHCPD_NIC_x_RANGE_x bzw. DHCPD_NIC_x_STATIC_x) verschoben wurde.

In diese Phase stehen neben den bereits aus der Konfiguration bekannten Variablen (unter anderen) noch die Folgenden zur Verfügung:

Als interessantes Beispiel können die in diesem Paket unter /usr/share/doc/dhcpd/dhcpd.config.*.99trace.sh beiliegenden Plugins dienen. Diese schreiben die zum Abschluss der jeweiligen Phase vorliegenden Konfigurationsvariablen in eine Datei /tmp/dhcpd.*.trace.

Plugins können ihre Benutzeroberflächen oder Konfigurationseditoren im Untermenü ``DHCPD Server Plugins'' einhängen indem sie über add-menu (siehe eisfair Entwicklerdokumentation) eigene Einträge in das Menü setup.services.dhcpd.plugins.menu hinzufügen.

eis 2017-05-03