%
% dhcpd.tex
% Last Update: $Id$
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%% Kapitel DHCPD %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\chapter{DHCP Server (ISC-DHCPD)}
\index{DHCPD}

\section{Copyrights}

    Der in diesem Paket enthaltene DHCP Server ist eine Open Source Software
    und unterliegt dem Copyright des Internet Systems Consortium,
    Inc. (\glqq{}ISC\grqq{}). Die Verwendung erfolgt nach den Bestimmungen
    der \link{http://www.isc.org/software/license}{ISC-Lizenz}
    ("ahnlich der BSD License).

    \emph{Achtung:}
    Ich gebe weder eine Garantie auf die Funktionsf"ahigkeit des dhcpd Pakets,
    noch hafte ich f"ur Sch"aden, z.B. Datenverlust, die durch den Einsatz des
    dhcpd Pakets entstehen.


\section{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 "ubergeben und andere
    Konfigurationen wie Adressen der Drucker-, Zeit- oder Newsserver
    verteilen.

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


Leistungsmerkmale des Pakets:

    \begin{itemize}
    \item Vergabe von dynamischen und statischen IP-Adressen
    \item Vergabe von IP-Adressen an entfernte Netzwerke "uber einen DHCP
        Relay Router
    \item Vollautomatische Unterst"utzung der auf dem \eisfair Server bekannten
        Services (Wins, NTP, ...)
    \item Fertig konfigurierte Verbindung zum Nameserver BIND9 f"ur Nameserver-
        Aktualisierungen (DDNS)
    \item Unterst"utzung von Netzwerk-Boot f"ur Diskless Clients mittels PXE
    \item Plugin-Schnittstelle f"ur Zusatzpakete oder fortgeschrittene,
        individuelle Konfigurationsanforderungen
    \end{itemize}


    Ziel bei der Erstellung dieses Paketes war die m"oglichst 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"oglichst \glqq{}easy\grqq{} dieses Paket
    konfigurieren k"onnen. Deshalb wurde bewusst eine minimalistische
    Konfiguration und ein weitreichender Automatismus implementiert.

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


\section{Der DHCP Server dhcpd}

    Der DHCP Server vergibt IP-Adressen in lokale Netzwerken. Daf"ur gibt es
    einen Pool von Adressen, die vergeben werden d"urfen. Zudem bestimmt der
    Server eine Zeitspanne, f"ur die die vergebenen Adressen g"ultig 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"atzlich zur IP-Adresse sendet der Server Informationen "uber das
    Standard Gateway und den Nameserver. Daher m"ussen diese Werte nicht am
    Desktop PC eingegeben werden, solange das am DHCP Server korrekt
    konfiguriert wurde. In diesem Paket werden diese Werte f"ur die
    g"angigsten Netztopologien automatisch ermittelt und m"ussen daher
    nicht manuell gepflegt werden. Unter Windows muss eine Option wie
    \glqq{}IP-Adresse automatisch beziehen\grqq{} gew"ahlt werden. Leider
    unterscheidet sich hier die Konfiguration von Version zu Version.

    Zus"atzlich zu normalen dynamischen IP-Adressen hat der Server eine
    Funktion um einem Client immer die selbe IP-Adresse zuzuweisen.
    \glqq{}So ein Unfug\grqq{} -- werden nun viele denken, aber es gibt
    daf"ur gute Gr"unde. So m"ussen nicht s"amtliche Client PCs neu
    konfiguriert werden, falls sich etwas in der Netzwerkkonfiguration
    ge"andert hat (z.B. die Adresse des Standard Gateways oder der Nameserver).


\section{Konfiguration}

    Die Konfiguration kann "uber den Men"upunkt \glqq{}Edit Configuration\grqq{}
    ge"andert werden. Nach dem beenden des Editors wird diese dann gepr"uft.
    Sofern ein Fehler aufgetreten ist sollten Sie diesen dann beheben.


\subsection{Allgemeine Einstellungen [Basic configuration]}

\begin{description}
\config{START\_DHCPD}
{START\_DHCPD}
{STARTDHCPD}
{
    Setzen Sie diesen wert auf 'yes' um den DHCP Server zu aktivieren
    und IP-Adressen zu vergeben.

    G"ultige Werte: yes,no

    Standardeinstellung: \texttt{START\_DHCPD='no'}
}
\end{description}


\subsection{Dynamische IP-Bereiche [Dynamic IP Ranges]}


\begin{description}
\config{DHCPD\_DYNAMIC\_N}
{DHCPD\_DYNAMIC\_N}
{DHCPDDYNAMICN}
{
    Hier wird die Anzahl der Bereiche von IP-Adressen angegeben, die
    per DHCP vergeben werden sollen.

    Standardeinstellung: \texttt{DHCPD\_DYNAMIC\_N='1'}
}


\config{DHCPD\_DYNAMIC\_x\_ACTIVE}
{DHCPD\_DYNAMIC\_x\_ACTIVE}
{DHCPDDYNAMICxACTIVE}
{
    Hier kann f"ur jeden einzelnen Bereich die Verteilung der
    IP-Adressen deaktiviert ('no') werden.

    G"ultige Werte: yes,no

    Standardeinstellung: \texttt{DHCPD\_DYNAMIC\_1\_ACTIVE='yes'}
}


\config{DHCPD\_DYNAMIC\_x\_RANGE}
{DHCPD\_DYNAMIC\_x\_RANGE}
{DHCPDDYNAMICxRANGE}
{
    Hier werden die Bereiche der IP-Adressen angegeben, die der
    Server vergeben darf. Achtung! Hier d"urfen keine IP-Adressen
    angegeben werden, die einem Client fest zugeteilt sind oder
    die Gateways oder andere Server nutzen.

    Standardeinstellung: \texttt{DHCPD\_DYNAMIC\_1\_RANGE='192.168.6.100 192.168.6.150'}
}
\end{description}


\subsection{Statische IP-Adressen [Static IP Adresses]}


\begin{description}
\config{DHCPD\_CLIENT\_N}
{DHCPD\_CLIENT\_N}
{DHCPDCLIENTN}
{
    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: \texttt{DHCPD\_CLIENT\_N='2'}
}


\config{DHCPD\_CLIENT\_x\_NAME}
{DHCPD\_CLIENT\_x\_NAME}
{DHCPDCLIENTxNAME}
{
    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: \texttt{DHCPD\_CLIENT\_1\_NAME='fixed-ip-1'}
}


\config{DHCPD\_CLIENT\_x\_ACTIVE}
{DHCPD\_CLIENT\_x\_ACTIVE}
{DHCPDCLIENTxACTIVE}
{
    Hier kann ein einzelner Client deaktiviert ('no') werden.
    Um einen Client zu verwenden, muss diese Variable auf 'yes'
    gesetzt werden.

    G"ultige Werte: yes,no

    Standardeinstellung: \texttt{DHCPD\_CLIENT\_1\_ACTIVE='no'}
}


\config{DHCPD\_CLIENT\_x\_MAC}
{DHCPD\_CLIENT\_x\_MAC}
{DHCPDCLIENTxMAC}
{
    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,
    \glqq{}ipconfig -all\grqq{} unter Windows NT/2000/XP und
    \glqq{}ip addr show\grqq{} unter Linux ausgelesen werden.

    Beispiel: \texttt{DHCPD\_CLIENT\_1\_MAC='00:01:02:03:04:06:07'}
}


\config{DHCPD\_CLIENT\_x\_IPV4}
{DHCPD\_CLIENT\_x\_IPV4}
{DHCPDCLIENTxIPV4}
{
    Dieser Eintrag enth"alt die IP-Adresse zur korrespondierenden
    DHCPD\_CLIENT\_\%\_MAC. Achtung: hier darf keine Adresse aus dem
    in DHCPD\_DYNAMIC\_\%\_RANGE angegebenen Bereich verwendet werden!

    Beispiel: \texttt{DHCPD\_CLIENT\_1\_IPV4='192.168.6.2'}
}


\config{DHCPD\_CLIENT\_x\_IPV6}
{DHCPD\_CLIENT\_x\_IPV6}
{DHCPDCLIENTxIPV6}
{
    Dieser Eintrag enth"alt die IPv6-Adresse zur korrespondierenden
    DHCPD\_CLIENT\_\%\_MAC. Achtung: hier darf keine Adresse aus dem
    in DHCPD\_DYNAMIC\_\%\_RANGE angegebenen Bereich verwendet werden!

    Als IPv6 Adressen k"onnen nur folgende Adresstypen verwendet werden:
      * Site Local IPv6 Addresses der Form fecx, fedx, feex, fefx
      * Unique Local IPv6 Addresses der Form fcxx, fdxx
      * Global Unicast Addresses der Form 2xxx, 3xxx
    (x steht f"ur beliebige Hexadezimalzeichen 0-9 und a-f)

    ACHTUNG: Diese Option ist noch nicht verf"ugbar!

    Beispiel:  \texttt{DHCPD\_CLIENT\_1\_IPV6='2001:db8:0:f101::123'}
}


\config{DHCPD\_CLIENT\_x\_NETBOOT}
{DHCPD\_CLIENT\_x\_NETBOOT}
{DHCPDCLIENTxNETBOOT}
{
    Wenn diskless Clients (z.B. PCs ohne eingebaute Festplatte) zum
    Einsatz kommen sollen, kann mit dieser Option das Image angegeben
    werden, des dem Client "ubermittelt werden soll.

    F"ur den Einsatz von pxelinux "uber die Optionen
    DHCPD\_CLIENT\_x\_PXE\_KERNEL usw. muss diese Option leer bleiben.

    Durch die Angabe von 'yes' wird der Standard \texttt{pxelinux.0}
    aktiviert. Zur Verwendung des PXE-Men"us
    muss diese Option auf \texttt{'yes'} gesetzt werden und die zu diesem
    Client geh"origen PXE-Parameter m"ussen leer bleiben.

    Um ein spezielles Netboot-Image (z.B. Etherboot) booten zu k"onnen,
    muss dieses im Verzeichnis \texttt{/srv/tftpboot} abgelegt werden und
    der hier angegebene Dateiname darf das f"uhrende \texttt{/srv/tftpboot}
    nicht enthalten (z.B. \texttt{DHCPD\_CLIENT\_1\_NETBOOT='3c90x.zpxe'}).

    Standardeinstellung:  \texttt{DHCPD\_CLIENT\_1\_NETBOOT='yes'}
}


\config{DHCPD\_CLIENT\_x\_PXE\_KERNEL}
{DHCPD\_CLIENT\_x\_PXE\_KERNEL}
{DHCPDCLIENTxPXEKERNEL}
{
    Beim Booten "uber PXE wird mit dieser Option der Kernel angegeben,
    der dem Client "ubermittelt werden soll.

    Der Kernel muss im Verzeichnis \texttt{/srv/tftpboot/\textit{DHCPD\_CLIENT\_x\_NAME}}
    abgelegt sein und den hier angegebenen Namen bekommen. Zur
    "Ubertragung 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.

    Standardeinstellung: \texttt{DHCPD\_CLIENT\_1\_PXE\_KERNEL='{}'}
}


\config{DHCPD\_CLIENT\_x\_PXE\_INITRD}
{DHCPD\_CLIENT\_x\_PXE\_INITRD}
{DHCPDCLIENTxPXEINITRD}
{
    Hier wird der Name der zu DHCPD\_CLIENT\_x\_PXE\_KERNEL geh"origen
    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.

    Standardeinstellung: \texttt{DHCPD\_CLIENT\_1\_PXE\_INITRD='{}'}
}


\config{DHCPD\_CLIENT\_x\_PXE\_ROOTFS}
{DHCPD\_CLIENT\_x\_PXE\_ROOTFS}
{DHCPDCLIENTxPXEROOTFS}
{
    Hier wird der Name des zu DHCPD\_CLIENT\_x\_PXE\_KERNEL geh"origen
    rootfs angegeben.

    Standardeinstellung: \texttt{DHCPD\_CLIENT\_1\_PXE\_ROOTFS='{}'}
}


\config{DHCPD\_CLIENT\_x\_PXE\_APPEND}
{DHCPD\_CLIENT\_x\_PXE\_APPEND}
{DHCPDCLIENTxPXEAPPEND}
{
    Diese Option dient zur Angabe weiterer Optionen bei der Verwendung
    von pxelinux.

    Standardeinstellung: \texttt{DHCPD\_CLIENT\_1\_PXE\_APPEND='{}'}
}
\end{description}


\subsection{Entfernte Netzwerke [Remote Networks]}

\begin{description}
\config{DHCPD\_EXTRA\_N}
{DHCPD\_EXTRA\_N}
{DHCPDEXTRAN}
{
    Hier wird die Anzahl der entfernten Netzwerke angegeben, an
    die der Server IP-Adressen "uber ein DHCP Relay vergeben soll.

    Standardeinstellung:  \texttt{DHCPD\_EXTRA\_N='0'}
}


\config{DHCPD\_EXTRA\_x\_ACTIVE}
{DHCPD\_EXTRA\_x\_ACTIVE}
{DHCPDEXTRAxACTIVE}
{
    Hier kann f"ur ein einzelnes entferntes Netzwerk die Vergabe von
    IP-Adressen deaktiviert ('no') werden.

    G"ultige Werte: yes,no

    Standardeinstellung: \texttt{DHCPD\_EXTRA\_1\_ACTIVE='no'}
}


\config{DHCPD\_EXTRA\_x\_RANGE}
{DHCPD\_EXTRA\_x\_RANGE}
{DHCPDEXTRAxRANGE}
{
    Hier werden die zus"atzlichen 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: \texttt{DHCPD\_EXTRA\_1\_RANGE='192.168.70.100 192.168.70.150'}
}


\config{DHCPD\_EXTRA\_x\_NETMASK}
{DHCPD\_EXTRA\_x\_NETMASK}
{DHCPDEXTRAxNETMASK}
{
    Netzmaske f"ur das entfernte Netzwerk.

    Standardeinstellung: \texttt{DHCPD\_EXTRA\_1\_NETMASK='255.255.255.0'}
}


\config{DHCPD\_EXTRA\_x\_DNS\_SERVER}
{DHCPD\_EXTRA\_x\_DNS\_SERVER}
{DHCPDEXTRAxDNSSERVER}
{
    DNS--Server f"ur das entfernte Netzwerk.

    Standardeinstellung: \texttt{DHCPD\_EXTRA\_1\_DNS\_SERVER='192.168.6.1'}
}


\config{DHCPD\_EXTRA\_x\_GATEWAY}
{DHCPD\_EXTRA\_x\_GATEWAY}
{DHCPDEXTRAxGATEWAY}
{
    Default Route das entfernte Netzwerk.

    Standardeinstellung: \texttt{DHCPD\_EXTRA\_1\_GATEWAY='192.168.70.1'}
}
\end{description}



\section{Aktivierung der Plugins [DHCP Server Plugins --> Plugin Activation]}

\begin{description}
\config{DHCPD\_PLUGIN\_x}
{DHCPD\_PLUGIN\_x}
{DHCPDPLUGINx}
{
    Hier kann die Verwendung der einzelnen, separat zu installierenden
    Plugins aktiviert werden.

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

    G"ultige Werte: yes,no

    Standardeinstellung: \texttt{DHCPD\_PLUGIN\_x='no'}
}
\end{description}



\section{Anwendungsbeispiel: Booten der System Rescue CD per PXE}

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

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

\begin{verbatim}

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

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

    umount iso
    rmdir iso

\end{verbatim}

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

\begin{verbatim}

    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

\end{verbatim}

    Anstatt der 192.168.6.1 muss hier nat"urlich 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"atzliche Option zur Verf"ugung.



\section{Administration}

    Zur Administration des DHCP Servers gibt es ein Untermen"u 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:

\begin{verbatim}

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

\end{verbatim}


\section{Beschreibung der Plugin-Schnittstelle}

    Die Plugin-Schnittstelle wurde geschaffen, um Paketen Zugriff auf die
    Funktionalit"aten des dhcpd Pakets zu erm"oglichen. Ein Beispiel
    daf"ur w"are ein Paket, das ein "uber PXE bootbares Betriebssystem
    enth"alt. Mittels eines Plugins kann dieses Betriebssystem in das
    PXE-Men"u eingeh"angt werden, ohne dass dazu die Konfiguration des
    dhcpd Pakets angepasst werden muss.

    Als Beispiel hierf"ur steht das Paket \emph{dhcpd\_pxe\_diag} zur Verf"ugung,
    das ein paar einfache Tools zur Hardwarediagnose (z.B. memtest86+)
    enth"alt.

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

    Als weitere Anwendungsm"oglichkeit der Plugin-Schnittstelle kann
    "uber ein Plugin die Erstellung der dhcpd Konfiguration beeinflusst
    werden. So kann bei umfangreicheren Netztopologien z.B. ein
    ver"anderter Gateway oder ein spezieller WINS-Server oder NTP-Server
    zugesteuert werden. Notfalls kann sogar am Ende des Erstellungsprozesses
    die gesamte dhcpd Konfiguration (\texttt{dhcpd.conf}) nochmals angepasst oder
    "uberschrieben werden.

    Alle Plugins werden im Verzeichnis \texttt{/var/install/plugin.d} abgelegt und
    m"ussen einen Namen der Form \texttt{dhcpd.[function].[pos][plugin-name].[extra].sh}
    haben.

    Der Name (\textit{plugin-name}) muss dabei dem \textit{package name} des eisfair Pakets
    des Plugins entsprechen, wobei dem eigentlichen Namen noch die
    Startpriorit"at (\textit{pos}) bei mehreren installierten Plugins mittels
    2 f"uhrender Ziffern vorangestellt wird. Der optionale Block \textit{extra}
    kann paketspezifisch frei gew"ahlt werden.

    Als Exits (\textit{function}) stehen derzeit folgende Einstiegspunkte
    zur Verf"ugung:

\begin{itemize}
\item \textbf{\texttt{config.pre}}\\
    Der Aufruf erfolgt nach dem Einlesen der dhcpd Konfiguration und
    dem Setzen der zus"atzlichen Default-Parameter. Hier k"onnen einfach
    eigene Erweiterungen vorgenommen werden, die analog der Pflege
    der Konfigurationsdatei erfolgen k"onnen. Hier kommen in der folgenden
    Verarbeitung noch s"amtliche Automatismen zur Anwendung.

\item \textbf{\texttt{config.main}}\\
    Der Aufruf erfolgt nach Verarbeitung der Konfiguration, aber noch
    vor Ausgabe der PXE und dhcpd Konfigurationsdateien. An dieser
    Stelle wurde die Konfiguration in ein erweitertes Zwischenformat
    (ebenfalls Variablen des Musters DHCPD\_*) "uberf"uhrt und
    mit den auf dem Server ermittelten Zusatzinformationen (z.B.
    verf"ugbares Gateway, WINS-Server; siehe unten) angereichert.

\item \textbf{\texttt{write4.pre}}\\
    Diese Plugins werden zu Beginn der Ausgabe der IPv4 DHCP Konfiguration
    \texttt{/etc/dhcpd.conf} aufgerufen. Die Standardausgabe ist auf diese
    Datei umgeleitet, daher k"onnen hier mittels echo Ausgaben
    zus"atzliche Konfigurationen im oberen Bereich der Datei angef"ugt
    werden.

\item \textbf{\texttt{write6.pre}}\\
    Diese Plugins werden zu Beginn der Ausgabe der IPv6 DHCP Konfiguration
    \texttt{/etc/dhcpd6.conf} aufgerufen. Die Standardausgabe ist auf diese
    Datei umgeleitet, daher k"onnen hier mittels echo Ausgaben
    zus"atzliche Konfigurationen im oberen Bereich der Datei angef"ugt
    werden.

\item \textbf{\texttt{dynamic4.main}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv4 subnet
    Bl"ocke. Als Parameter werden zus"atzlich der Devicename des NIC
    sowie die IP-Adresse des Subnetzes "ubergeben. Die Standardausgabe
    ist auf \texttt{/etc/dhcpd.conf} umgeleitet.

\item \textbf{\texttt{dynamic6.main}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv6 subnet6
    Bl"ocke. Als Parameter werden zus"atzlich der Devicename des NIC
    sowie die IP-Adresse des Subnetzes "ubergeben. Die Standardausgabe
    ist auf \texttt{/etc/dhcpd6.conf} umgeleitet.

\item \textbf{\texttt{static4.pre}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv4 group
    Bl"ocke der statischen Clients aber noch vor den host Definitionen.
    Als Parameter wird zus"atzlich der Devicename des NIC "ubergeben.
    Die Standardausgabe ist auf \texttt{/etc/dhcpd.conf} umgeleitet.

\item \textbf{\texttt{static6.pre}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv6 group
    Bl"ocke der statischen Clients aber noch vor den host Definitionen.
    Als Parameter wird zus"atzlich der Devicename des NIC "ubergeben.
    Die Standardausgabe ist auf \texttt{/etc/dhcpd6.conf} umgeleitet.

\item \textbf{\texttt{static4.main}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv4 group
    Bl"ocke der statischen Clients innerhalb der jeweiligen host
    Definition. Als Parameter werden zus"atzlich der Devicename des NIC
    sowie der Name des Clients "ubergeben. Die Standardausgabe ist auf
    \texttt{/etc/dhcpd.conf} umgeleitet.

\item \textbf{\texttt{static6.main}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv6 group
    Bl"ocke der statischen Clients innerhalb der jeweiligen host
    Definition. Als Parameter werden zus"atzlich der Devicename des NIC
    sowie der Name des Clients "ubergeben. Die Standardausgabe ist auf
    \texttt{/etc/dhcpd6.conf} umgeleitet.

\item \textbf{\texttt{static4.pxe}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv4
    PXE-Konfiguration des jeweiligen statischen Clients. Als Parameter
    werden zus"atzlich der Devicename des NIC sowie der Name des
    Clients "ubergeben. Die Standardausgabe ist auf die jeweilige
    PXE Koniguration unter \texttt{/srv/tftpboot/pxelinux.cfg} umgeleitet.

\item \textbf{\texttt{static4.post}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv4 group
    Bl"ocke der statischen Clients aber nach den host Definitionen.
    Als Parameter wird zus"atzlich der Devicename des NIC "ubergeben.
    Die Standardausgabe ist auf \texttt{/etc/dhcpd.conf} umgeleitet.

\item \textbf{\texttt{static6.post}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv6 group
    Bl"ocke der statischen Clients aber nach den host Definitionen.
    Als Parameter wird zus"atzlich der Devicename des NIC "ubergeben.
    Die Standardausgabe ist auf \texttt{/etc/dhcpd6.conf} umgeleitet.

\item \textbf{\texttt{write4.post}}\\
    Diese Plugins werden am Ende der Ausgabe der IPv4 DHCP Konfiguration
    \texttt{/etc/dhcpd.conf} aufgerufen. Die Standardausgabe ist auf diese
    Datei umgeleitet. Hier k"onnen mittels echo Ausgaben zus"atzliche
    Konfigurationen am Ende der Konfigurationsdatei angef"ugt werden.

\item \textbf{\texttt{write6.post}}\\
    Diese Plugins werden am Ende der Ausgabe der IPv6 DHCP Konfiguration
    \texttt{/etc/dhcpd6.conf} aufgerufen. Die Standardausgabe ist auf diese
    Datei umgeleitet. Hier k"onnen mittels echo Ausgaben zus"atzliche
    Konfigurationen am Ende der Konfigurationsdatei angef"ugt werden.

\item \textbf{\texttt{pxe4.pre}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv4 Default
    PXE Konfiguration \texttt{/srv/tftpboot/pxelinux.cfg/default} vor der
    Ausgabe der einzelnen Eintr"age des PXE Men"us. Die Standardausgabe
    ist auf die PXE Konfiguration umgeleitet.

\item \textbf{\texttt{pxe4.main}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv4 Default
    PXE Konfiguration \texttt{/srv/tftpboot/pxelinux.cfg/default} w"ahrend der
    Ausgabe der einzelnen Eintr"age des PXE Men"us. Als Parameter wird
    zus"atzlich der Name des jeweiligen Men"ueintrags "ubergeben. Die
    Standardausgabe ist auf die PXE Konfiguration umgeleitet.

 \item \textbf{\texttt{pxe4.post}}\\
    Hier erfolgt der Aufruf bei der Ausgabe innerhalb der IPv4 Default
    PXE Konfiguration \texttt{/srv/tftpboot/pxelinux.cfg/default} nach der
    Ausgabe der einzelnen Eintr"age des PXE Men"us. Die Standardausgabe
    ist auf die PXE Konfiguration umgeleitet.

\item \textbf{\texttt{config.post}}\\
    Der Aufruf erfolgt nach Ausgabe der PXE-Konfigurationen
    \texttt{/srv/tftpboot/pxelinux.cfg/*} und nach Ausgabe der
    dhcpd Konfiguration \texttt{/etc/dhcpd.conf}. Mittels eines hier
    agierenden Plugins k"onnen diese direkt angepa"st werden.
\end{itemize}

    \emph{ACHTUNG:} Die Plugins werden inline ausgef"uhrt, somit stehen
    s"amtliche Funktionen der eislib direkt zur Verf"ugung und auch
    die Variablen der dhcpd Konfiguration k"onnen direkt ver"andert
    werden. Allerdings darf das Plugin keinesfalls mittels \texttt{exit}
    beendet werden. Der R"ucksprung sollte daher mittels \texttt{return}
    erfolgen.

    Neben dem Hinzuf"ugen weiterer Eintr"age in einem \texttt{pre}-Plugin ist
    wohl die Modifikation der Konfiguration w"ahrend der \texttt{main}-Phase
    der h"aufigste Anwendungsfall. Ein wichtiger Punkt hierbei ist, da"s
    die Konfiguration der Vergabe der lokalen dynamischen und statischen
    IP-Adressen (\texttt{DHCPD\_DYNAMIC\_*} und \texttt{DHCPD\_CLIENT\_*})
    unterhalb der Konfiguration der jeweiligen Netzwerkkarte
    (\texttt{DHCPD\_NIC\_x\_RANGE\_x} bzw. \texttt{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"ugung:

\begin{itemize}
\item \texttt {DHCPD\_NIC\_x\_DEVICE}
\item \texttt {DHCPD\_NIC\_x\_DOMAINSEARCH}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_DNS}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_DNSREV}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_GATEWAY}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_WINSSERVER}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_MASTERBROWSER}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_LPRSERVER}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_NTPSERVER}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_TIMESERVER}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_TIMEOFFSET}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_POPSERVER}
\item \texttt {DHCPD\_NIC\_x\_IPV4\_SMTPSERVER}
\item \texttt {DHCPD\_NIC\_x\_LS\_TIME\_DYN}
\item \texttt {DHCPD\_NIC\_x\_LS\_TIME\_DYN\_MAX}
\item \texttt {DHCPD\_NIC\_x\_LS\_TIME\_DYN\_ADAPTIVE}
\item \texttt {DHCPD\_NIC\_x\_LS\_TIME\_FIX}
\item \texttt {DHCPD\_NIC\_x\_LS\_TIME\_FIX\_MAX}
\end{itemize}

    Als interessantes Beispiel k"onnen die in diesem Paket unter
    \texttt{/usr/share/doc/dhcpd/dhcpd.config.*.99trace.sh} beiliegenden
    Plugins dienen. Diese schreiben die zum Abschlu"s der jeweiligen Phase
    vorliegenden Konfigurationsvariablen in eine Datei \texttt{/tmp/dhcpd.*.trace}.

    Plugins k"onnen ihre Benutzeroberfl"achen oder Konfigurationseditoren
    im Untermen"u \glqq{}DHCPD Server Plugins\grqq{} einh"angen indem sie
    das Menu wie folgt benennen
    \texttt{setup.services.dhcpd.plugins.\$\{meinplugin\}.menu}
    damit werden automatisch eigene Eintr"age in das Men"u
    \texttt{setup.services.dhcpd.plugins.menu} hinzugef"ugt.
