Bewertung 2


Die Kandidaten sollten in der Lage sein, einen DHCP-Server zu konfigurieren und Default-Optionen zu setzen und ein Subnetz und einen Bereich dynamisch vergebener Adressen einzurichten. Dieses Lernziel beinhaltet das Hinzufügen eines statischen Hosts, das Setzen von Optionen für einen einzelnen Host und das Hinzufügen von bootp Hosts. Ebenfalls enthalten ist die Konfiguration DHCP als Relay-Agent und das Neuladen des DHCP-Servers nach dem Durchführen von Änderungen.

Schlüsseldateien, Begriffe und Hilfsmittel beinhalten:

  • dhcpd.conf
  • dhcpd.leases

Grundsätzliche Funktionsweise

Beim Aufbau (oder Betrieb) eines TCP/IP-Netzes gibt es grundsätzlich zwei denkbare Möglichkeiten, die Vergabe der benötigten IP-Adressen und Einstellungen vorzunehmen. Entweder jeder Rechner bekommt feste Adressen, die direkt auf diesem Rechner eingestellt werden müssen, oder die Adressen werden zentral auf einem Server verwaltet, die angeschlossenen Rechner beziehen dann ihre gesamten Einstellungen von diesem Server. Das dazu verwendete Protokoll heißt Dynamic Host Configuration Protocol oder eben kurz DHCP.

Die Vorteile einer zentralen Verwaltung aller Einstellungen liegen auf der Hand. Ab einer bestimmten Größe eines Netzes ist die Verwaltungsarbeit bei Änderungen der Netzstruktur kaum noch zu übersehen, wenn die Einstellungen auf jedem Rechner einzeln vorgenommen werden müssen. Zumal es sich bei den Einstellungen keineswegs nur um die IP-Adresse handelt. DHCP kann folgende Netzwerkparameter verwalten:

  • IP-Adressen
  • Rechnername
  • Netzmaske
  • Broadcast Adresse
  • Gateway
  • DNS-Nameserver
  • NetBIOS Nameserver
  • Boot-Image für plattenlose Workstations

Zudem kommt die Tatsache, daß mit dem Einsatz von DHCP in einem großen Netz die Installation neuer Rechner im Netz zu einem Kinderspiel wird, und so auch für Nicht-Spezialisten durchführbar ist, ohne daß es dabei zu Konflikten mit anderen Rechnern kommen kann.

Die Kommunikation in einem lokalen Netz (meist Ethernet) erfolgt über die feste Hardware-Adresse (MAC-Adresse) der Netzwerkkarten. Aus der Sicht des OSI-Schichtenmodells kommunizieren die Netzwerkkarten auf der Sicherungsschicht ausschließlich mit dieser MAC-Adresse. Ein Rechner, der von sich selbst nicht weiß, welche IP-Adresse er hat, kann jetzt über einen Rundruf (Broadcast) an die Adresse 255.255.255.255 eine Nachfrage starten, welcher Rechner für ihn die entsprechenden Informationen bereithält. Diese Anfrage läuft über UDP – in der Regel auf Port 67 und 68.

Der zuständige DHCP-Server wird – wie jeder andere Rechner im Netz auch – diese Anfrage erhalten, die ja auch die MAC-Adresse des nachfragenden Rechners enthält. Er bestimmt jetzt die entsprechenden Angaben (IP-Adresse, Netmask usw.) und schickt sie an den Client zurück. Der kann jetzt seine Konfiguration vervollständigen und somit alle weiteren Dienste im Netz nutzen.

Dynamische und statische Konfiguration

Der DHCP-Server kann jedem Rechner entweder eine dynamische (zufällige) IP-Adresse zuweisen, oder er bestimmt grundsätzlich eine statische Adresse anhand der MAC-Adresse des Clients. Welche Form jeweils gewählt wird, hängt mit den Aufgaben und Anforderungen des Clients zusammen: Dynamische Adressen werden zumeist an Rechner vergeben, die ausschließlich als Workstation dienen und keine Dienste für andere Rechner im Netz anbieten. Die jeweils anderen Workstations im Netz müssen ja nicht wissen, welche IP-Adresse eine Workstation hat, aus diesem Grund macht es nichts aus, wenn sich deren Adresse dynamisch ändern sollte.

Dynamische Adressen haben außerdem den Vorteil, daß in einem Netz mit sehr vielen Rechnern, die nicht gleichzeitig aktiv sind, die Möglichkeit besteht, einen knappen IP-Adressenbestand auf die gerade aktiven Rechner zu verteilen. Statische Adressen bekommen die Rechner, die anderen Rechnern im Netz Dienste anbieten. Würden sich deren IP-Adressen dauernd ändern (durch dynamische Vergabe), so müsste jedesmal der Nameserver umkonfiguriert werden, wenn ein entsprechender Server hochfährt.

Statische Adressvergabe erfordert es, daß der DHCP-Server die MAC-Adresse des Rechners kennt, der eine bestimmte statische IP-Adresse zugewiesen bekommen soll. Denn bei der Vergabe der IP-Adressen durch den DHCP-Server sind die MAC-Adressen das einzige Unterscheidungsmerkmal.

Gültigkeitsdauer von dynamisch vergebenen Adressen

Wenn ein DHCP-Server einer Workstation eine dynamische Adresse zuweist, so kann er logischerweise die selbe Adresse nicht gleich einem anderen Rechner übermitteln. Das heißt, der DHCP-Server muss zwei wichtige Informationen permanent auf dem aktuellen Stand halten:

  • Welche Adressen aus dem zur Verfügung stehenden Adresspool sind bereits vergeben?
  • Welcher Rechner hat welche Adresse bekommen?

Die Vergabe einer dynamischen Adresse an eine Workstation durch einen DHCP-Server wird als Vermietung (engl. lease) bezeichnet. Auf den ersten Blick scheint es nur notwendig zu sein, dass ein Server eine solche Adresse einmalig zuweist. Auf den zweiten Blick müssen wir aber erkennen, dass ein Server auch wissen muss, wie lange eine Workstation diese Adresse benutzt. Ansonsten würde ja der Server seinen Adresspool einmal durcharbeiten und käme ziemlich schnell an den Punkt, an dem keine weiteren Adressen mehr zur Verfügung stehen. Aus diesem Grund ist es notwendig, dass eine Workstation, die ihre Adresse dynamisch von einem DHCP-Server zugewiesen bekam, sich regelmäßig beim Server meldet, um zu zeigen, dass sie noch aktiv ist und die Adresse weiter benötigt. Der Server kann festlegen, in welchen Zeitabständen diese Rückmeldungen erfolgen müssen. Dazu gibt es spezielle Parameter in der Konfigurationsdatei.

Die Frage, wie lange solche Abstände sein sollen, ist von mehreren Faktoren abhängig. Dazu zählen

  • Wenn mehr Rechner in einem Netz ihre Adressen vom DHCP-Server beziehen, als Adressen zur Verfügung stehen, dann muss diese Zeit relativ kurz sein, damit der Server einer neu gestarteten Workstation eine schon gebrauchte Adresse wieder zuweisen kann.
  • Wenn ein Netz eine relativ hohe Fluktuation hat, beispielsweise in einem Labor, in dem Rechner zusammengeschraubt werden, um anschließend verschickt zu werden, dann sollte die Zeitspanne auch relativ kurz angelegt werden.
  • In einem Netz, in dem es keine regelmäßigen Veränderungen gibt und genügend Adressen zur Verfügung stehen, kann die Zeitspanne sehr lang gewählt werden, um den Netzwerkverkehr gering zu halten.

Die Konfiguration in dhcpd.conf

Wie die meisten Linux-Dienste, so hat auch der DHCP-Server eine zentrale Konfigurationsdatei, in diesem Fall die Datei /etc/dhcpd.conf. Diese Datei muß selbst angelegt werden, allerdings wird in den meisten Distributionen eine Beispieldatei beigelegt, die sehr gut kommentiert ist und als Einstieg sehr nützlich sein kann.

Eine einfache Konfigurationsdatei könnte folgendermaßen aussehen:

  # Identifikation des DHCP-Servers:
  server-identifier marvin.mydomain.xy;
    
  # Globale Einstellungen, die für alle gelten:
  option domain-name "mydomain.xy";
  option domain-name-servers 192.168.100.5, 192.168.100.200;
  option routers 192.168.100.5;
  option subnet-mask 255.255.255.0;
                
  # Die Rechner, denen dynamische IP-Adressen vergeben werden sollen:
  subnet 192.168.100.0 netmask 255.255.255.0 {
    range 192.168.100.100 192.168.100.200;
    default-lease-time 3600;
    max-lease-time 4000;
    get-lease-hostnames on;
  }
                    
  # Die Rechner mit festen IP-Adressen:
  group {
    use-host-decl-names on;
          
    host golem {
      hardware ethernet 00:A0:24:14:82:4A;
      fixed-address 192.168.100.5;
      option routers 123.45.67.89;
    }
                
    host hal {
      hardware ethernet 00:A0:24:14:12:9C;
      fixed-address 192.168.100.200;
    }
                                    
  }
                                          

Die Syntax der Konfigurationsdatei ist sehr logisch. Einzelne Anweisungszeilen werden durch ein Semikolon (;) abgeschlossen. Alle Angaben, die alleine für sich stehen, gelten für alle Anfragen gleich. Verschiedene logische Blöcke können durch Klammerung mit geschweiften Klammern erzielt werden. Dazu zählen insbesondere die Blöcke:

subnet Adresse netmask Netzmaske {…}

Dieser Block bezeichnet ein Subnetz mit dynamischer Adressvergabe. Alles, was in dem Klammernpaar eingefügt ist, gilt für alle Hosts des entsprechenden Subnetzes. Das heißt, es gilt auch für die Hosts, deren Adresse sich innerhalb des Subnetzes befindet, aber deren Definition etwa als statische Adresse nicht in der entsprechenden subnet-Klammerung steht. Jede DHCP-Konfigurationsdatei muß mindestens eine Subnetz-Definition vorweisen.

group {…}

Mit dieser Blockbildung können beliebige Gruppen erstellt werden, die bestimmte gemeinsame Eigenschaften haben. In unserem Beispiel oben haben die beiden Rechner golem und hal die gemeinsame Einstellung use-host-decl-names on;

host Hostname {…}

Ein einzelner Rechner, für den bestimmte Anweisungen gelten.

Wie aus dem obigen Beispiel zu entnehmen ist, können die verschiedenen Blöcke auch verschachtelt werden, so haben wir dort zwei host-Blöcke in einer group zusammengefasst.

Wenn Anweisungen mehrfach vorkommen, so gelten immer die innersten. So kann z.B. eine Angabe global festlegen, welcher Router verwendet werden soll. Hat jetzt ein einzelner Rechner eine andere Angabe, so überschreibt die innere Angabe (die des einzelnen Rechners) die äußere (die globale). Die einzelnen Angaben (in der Reihenfolge ihres Auftretens) haben folgende Bedeutung:

server-identifier DNS-Name;

Der Name, mit dem sich der DHCP-Server selbst bei einer Client-Anfrage meldet. Diese Angabe ist nur dann notwendig, wenn der DHCP-Server mehrere IP-Adressen auf einer Netzwerkkarte vereint. Ansonsten würde durch eine Nameserverabfrage der entsprechende Name ermittelt.

option domain-name Zeichenkette;

Die Zeichenkette beinhaltet (in Anführungszeichen) den Domain-Namen.

option domain-name-servers Liste von IP-Adressen;

Eine durch Kommas getrennte Liste von IP-Adressen der zu verwendeten DNS-Nameserver. Sollen für Windows-Clients auch noch NetBIOS-Nameserver angegeben werden, so kann das mit option netbios-name-servers geschehen.

option routers Liste von IP-Adressen;

Eine durch Kommas getrennte Liste von Routern (Gateways), die verwendet werden sollen. In der Regel steht hier nur eine Adresse.

option subnet-mask Netzmaske;

Die zu verwendende Netzmaske.

range [dynamic-bootp] Startadresse Endadresse;

Der Adressbereich, der für die dynamische Vergabe verwendet werden darf. Für jede subnet Abteilung muss mindestens eine range-Anweisung definiert werden. Um auch bootp-Clients zu versorgen, kann die range-Anweisung vor der Startadresse noch den Flag dynamic-bootp aufweisen.

default-lease-time Sekunden;

Die Zeitangabe gibt die Anzahl von Sekunden an, nachdem sich ein Client wieder melden soll, um zu zeigen, daß er die zugewiesene Adresse noch benötigt. Nur für dynamische Adressen gültig.

max-lease-time Sekunden;

Nach Ablauf dieser angegebenen Zeit, ohne daß sich der Client erneut gemeldet hat, geht der DHCP-Server davon aus, daß der Client ausgeschaltet ist, die Adresse also nicht mehr benötigt wird. Ab diesem Zeitraum darf der Server die Adresse einem anderen Client bei entsprechender Nachfrage zuordnen. Nur für dynamische Adressen gültig.

get-lease-hostnames on oder off;

Ist dieser Wert auf on gesetzt, so wird der Rechnername, der dem Client zurückgeschickt wird, durch einen DNS-Aufruf ermittelt. Ansonsten besteht die Möglichkeit durch die Angabe von

option hostname Zeichenkette;

einen festen Namen zuzuweisen (wenn z.B. kein Nameserver zur Verfügung steht. Nur für dynamische Adressen gültig.

use-host-decl-names on oder off;

Wenn dieser Wert auf on steht, so wird keine DNS-Abfrage gemacht, sondern der unter

host {…}

angegebene Name an den Client zurückgegeben. Nur innerhalb der host-Klammerung gültig.

hardware Hardwaretyp MAC-Adresse;

Mit diesem Wert kann bei statischer Adressvergabe angeordnet werden, daß eine bestimmte Host-Klammerung nur für Rechner mit der angegebenen – weltweit einmaligen – Mac-Adresse gilt. Der Wert des Hardwaretyps ist entweder ethernet oder token-ring. Nur innerhalb der host-Klammerung gültig.

fixed-address IP-Adresse;

Die statische Adresse, die einem bestimmten Host zugeordnet werden soll. Nur innerhalb der host-Klammerung gültig.

Der DHCP-Daemon kennt noch einige weitere Fähigkeiten, die sich insbesondere um die Vergabe von Bootinformation für plattenlose Workstations drehen. Die Handbuchseite (man dhcpd.conf) ist alleine um die 2000 Zeilen lang. Für den Aufbau eines stabilen DHCP-Servers reichen aber die genannten Parameter völlig aus.

Die Datei dhcpd.leases

Der DHCP-Server verwaltet die Leases (die dynamisch vergebenen Adressen), die er vergeben hat in einer persistenten Datenbank. Diese Datenbank ist in einer ASCII-Datei mit Namen /var/lib/dhcp/dhcpd.leases organisiert. Jedesmal, wenn der Server eine Adresse zuweist, wenn eine Meldung des Clients kommt, dass er noch existiert oder wenn eine Adresse wieder freigegeben wird, wird der entsprechende Wert in dieser Datei eingetragen bzw. hinten angehängt. Wenn also mehr als ein Eintrag pro Lease in dieser Datei existiert, gilt immer der letzte.

Diese Datei existiert nicht, wenn der DHCP-Server das erste Mal gestartet wird. Er benötigt diese Datei aber zwingend zum Betrieb. Aus diesem Grund ist es nötig, diese Datei als leere Datei anzulegen, bevor der Server das erste Mal gestartet wird.

Damit diese Datenbank nicht unendlich wächst, wird sie vom Server in regelmäßigen Abschnitten neu geschrieben und nur die aktuell gültigen Einträge werden in die neue Datei übernommen.

Das Format der Datei ähnelt stark dem der Datei dhcpd.conf, tatsächlich wird es vom gleichen Parser bearbeitet. Zu beachten ist, dass die Zeitangaben in dieser Datei grundsätzlich in UTC (Greenwich Time) abgespeichert sind, nicht in der aktuellen Zeitzone.

Neuladen des Servers nach Veränderung

Im Gegensatz zu vielen anderen Serverdiensten versteht der dhcpd nicht das HUP-Signal. Das bedeutet, dass nach einer Änderung an der Konfigurationsdatei der Server manuell heruntergefahren werden muß und anschließend neu gestartet. Das Herunterfahren kann entweder durch ein TERM-Signal geschehen, was an die PID geschickt wird, die in /var/run/dhcpd.pid steht, oder durch die Verwendung des Init-Scripts, in der Art

  /etc/init.d/dhcpd stop

Das Starten sollte am besten immer mit dem Startscript vorgenommen werden:

  /etc/init.d/dhcpd start

DHCP Relay-Agent

DHCP und vor allem die DHCP-Clients arbeiten sehr viel mit Broadcast-Paketen. Ein Broadcast-Paket wird an alle an ein physikalisches Netz angeschlossenen Geräte verschickt. Auf diese Weise kann ein Client ohne über das Netz irgend etwas zu wissen, herausbekommen, wer sein zuständiger DHCP-Server ist. Diese Technik hat aber den Nachteil, dass Broadcasts nicht über die Grenzen eines physikalischen Netzes hinausgehen. Sollte also zwischen dem Client und dem Server ein Router liegen, so wird der Server niemals die Broadcast-Nachfrage des Clients empfangen und kann demzufolge auch nicht antworten.

Die Lösung dieses Problems liegt in einem sogenannten DHCP Relay Agent, also einem Programm, das solche Pakete gezielt über einen Router leitet.

Der DHCP Relay Agent wartet auf allen angeschlossenen Netzwerkschnittstellen (oder nur die mit der -i Option gesetzten) auf Broadcast-Pakete die DHCP-Anfragen enthalten. Wenn er solche Anfragen erhält, sendet er sie an alle DHCP-Server weiter, die ihm auf der Kommandozeile mitgegeben wurden. Empfängt er anschließend ein Paket mit der Antwort, so sendet er es an den ursprünglichen Sender der Anfrage zurück.

Die Aufrufform ist sehr einfach:

  dhcrelay [-i Interface1 [ -i InterfaceN] ] Server1 [...]

Es muss mindestens ein DHCP-Server angegeben werden. Ist keine Netzwerkschnittstelle mit -i angegeben, so lauscht dhcrelay auf alle angeschlossenen Schnittstellen.

Links zum Thema DHCP