ubuntuusers.de

ISC-DHCPD

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/service.png DHCP erleichtert die Vergabe von IP-Adressen im lokalen Netzwerk. Ist ein DHCP-Server im Netzwerk vorhanden, kann dieser neben der Vergabe der IP-Adressen für die Clients diesen auch die IP-Adresse des Routers, eines Namensservers usw. bekanntgeben. In diesem Artikel wird eine Konfiguration des ISC-DHCP-Servers 🇬🇧 beschrieben.

Für die Konfiguration eines DHCP-Servers sind grundlegende Netzwerkkenntnisse und das Verständnis des DHCP-Protokolls notwendig.

Installation

Zur Installation des DHCP-Servers ist das folgende Paket zu installieren [1]:

  • isc-dhcp-server

Paketliste zum Kopieren:

sudo apt-get install isc-dhcp-server 

Oder mit apturl installieren, Link: apt://isc-dhcp-server

In älteren Ubuntu-Versionen hieß das Paket noch dhcp3-server.

Während der Installation fragt debconf, an welches Netzwerkgerät der DHCP-Server gebunden werden soll. Die richtige Auswahl ist bei Vorhandensein mehrerer Schnittstellen sinnvoll. Ist nur eine einzige Netzwerkkarte im Rechner vorhanden, lautet der Name üblicherweise eth0. Nachträglich kann man dieses auch in der Datei /etc/default/isc-dhcp-server mit einem Editor [2] mit Root-Rechten [3] ändern:

INTERFACES="eth0"

Konfiguration

Die dhcpd.conf-Datei

Die Konfiguration des DHCP-Servers geschieht in der Datei /etc/dhcp/dhcpd.conf. Die Syntax ist hier recht selbsterklärend. Die Datei beinhaltet grundlegende Statements, die jeweils aus einem Schlüsselwort und bei Bedarf einem oder mehreren Argumenten bestehen. Argumente werden durch Leerzeichen getrennt und mit einem Semikolon am Zeilenende abgeschlossen.

Parameter Deklaration
# Beispiel
range 192.168.2.10 192.168.2.40;

Zur Gruppierung der Parameter werden diese mit geschweiften Klammern in Blöcke gefasst. Parameter, die außerhalb eines Blocks stehen, gelten global. Kommentare werden durch das Zeichen # eingeleitet.

Authoritative-Statement

DHCP-Server sollten das folgende Statement im globalen Bereich ihrer Konfiguration aufweisen, wenn der Administrator keine falsch konfigurierten "Rogue"-DHCP-Server im eigenen Netzwerk dulden will (also eigentlich immer):

authoritative;

Lease-Time

Die Lease-Time beschreibt den Zeitraum, für den der DHCP-Server einem Client eine IP-Adresse zur Verfügung stellt (least, vermietet). Vor dem Ende des Zeitraums fragt der Client beim Server an, ob der Client die IP-Adresse weiternutzen darf oder eine neue IP-Adresse bekommt. Die Voreinstellungen, die man bei der Installation des Servers vorfindet, sind in den meisten Fällen bereits sinnvoll. In einem Heimnetz, wo nur selten neue Rechner hinzukommen, kann man die Werte default-lease-time und max-lease-time aber durchaus auf mehrere Stunden oder Tage erhöhen, wenn man möchte. In Netzen mit häufig wechselnden Clients und ggf. knappem Vorrat an IP-Adressen kann man die Lease-Time herabsetzen, damit die Adressen schneller an neue Clients vergeben werden können. Die Angabe erfolgt in Sekunden.

Subnet-Blöcke

Der DHCP-Server kann mehrere Subnetze bedienen. Diese werden durch Blöcke wie folgt definiert:

# Erstes Subnetz
subnet 192.168.2.0 netmask 255.255.255.0 {
        range 192.168.2.10 192.168.2.40;
}
# Zweites Subnetz
subnet 192.168.3.0 netmask 255.255.255.0 {
        range 192.168.3.10 192.168.3.40;
}

Auch wenn das Netz nicht in Subnetze unterteilt werden soll (Subnetting), muss ein Subnet-Block definiert werden. Dieser Block umfasst dann das gesamte Netzwerk.

Range-Statements

Mit dem Parameter range wird der Bereich der IP-Adressen definiert, die vom Server an die Clients verteilt werden sollen. range-Statements müssen in Subnetz-Blöcken stehen.

#     Anfang       Ende
range 192.168.2.10 192.168.2.40;

Interface

Mit dem Parameter 'interface' wird das Netzwerkinterface gewählt, das heißt über welchen Anschluss die IP- Adressen an andere Rechner verteilt werden. Hinter den Parameter wird nach einem Leerzeichen sofort das Interface angegeben (z.B. eth0).

# Beispiel
interface eth0;

Option-Statements

Auf das Schlüsselwort option folgen jeweils zusätzliche Angaben über das Netzwerk, die der DHCP-Server neben der IP-Adresse an die Clients vermittelt. option-Statements können sowohl im globalen Bereich definiert werden, als auch in subnet-Blöcken.

# Beispiele
option routers 192.168.1.1;
option domain-name-servers 192.168.1.10, 145.253.2.11;

Die vorstehend genannten Optionen routers und domain-name-servers sollten auf jeden Fall definiert werden, um die Funktion des Netzwerks und Zugriff auf das Internet zu ermöglichen. Es gibt aber noch eine Vielzahl weiterer Optionen, wie z. B. die Angabe des DNS-Domainnamens mit option domain-name, die in der Manpage zu dhcpd.conf beschrieben werden.

Host-Blöcke

Mit host-Blöcken kann man festlegen, dass bestimmte Rechner vom DHCP-Server immer eine bestimmte IP bekommen sollen, anstatt eine zufällig ausgewählte. host-Blöcke befinden sich innerhalb von subnet-Blöcken.

host wiki {
                hardware ethernet 00:00:0e:d2:da:be;
                fixed-address 192.168.2.5;
                option host-name "wiki";
}

Insbesondere benötigt man in einem host-Block die Statements hardware ethernet (ohne Bindestrich!) und fixed-address. Die Vergabe eines Namens über option host-name ist optional.

Experten-Info:

Die Manpage zur dhcpd.conf geht sehr ausführlich auf weitere Konfigurationsmöglichkeiten ein.

Beispielkonfiguration

In dem unten angegebene Beispiel ist ein DHCP-Server für ein Netzwerk mit diesen Kenndaten konfiguriert:

  • der Server bedient das Netzwerk 192.168.2.0

  • die Clients bekommen IP-Adressen zwischen 192.168.2.10 und 192.168.2.40 zugewiesen

  • der Übergang (Gateway bzw. Router) in ein anderes Netzwerk hat die IP-Adresse 192.168.2.1

  • der Nameserver hat die IP-Adresse 192.168.2.1

  • die Domain heißt "ubuntuusers.home"

  • einem bestimmten Client wird anhand seiner Hardware-(MAC-)Adresse immer dieselbe IP-Adresse zugewiesen

#Generelle Einstellungen

# Rogue-DHCP-Server nicht erlauben (siehe oben)
authoritative;

# Definition des ersten (einzigen) Subnetzes
subnet 192.168.2.0 netmask 255.255.255.0 {
        range 192.168.2.10 192.168.2.40;
        # Lease-Time (in Sekunden)
        default-lease-time 600;
        max-lease-time 7200;
        option domain-name "ubuntuusers.home";
        option domain-name-servers 192.168.2.1;
        option broadcast-address 192.168.2.255;
        option subnet-mask 255.255.255.0;
        option routers 192.168.2.1;
}

#Wenn man jetzt auch noch das Interface angeben möchte, kann man das so machen.

subnet 192.168.2.0 netmask 255.255.255.0 {
        range 192.168.2.10 192.168.2.40;
        #wenn das Interface eth0 ist
        interface eth0;
        #hier kommen dann die anderen Optionen
}

# IP eines Hosts an seine MAC festnageln
host wiki {
        hardware ethernet 00:00:0e:d2:da:be;
        fixed-address 192.168.2.5;
        option host-name "wiki";
}

Starten und Stoppen

Der DHCP-Server kann als Dienst mit [4]:

/etc/init.d/isc-dhcp-server start 

gestartet werden. Das Stoppen erfolgt dementsprechend über:

/etc/init.d/isc-dhcp-server stop 

Problembehebung

Wenn der DHCP-Server nicht startet und in der Datei /var/log/syslog folgender Eintrag steht:

Can't open lease database /var/lib/dhcpd/dhcpd.leases: No such file or directory --
check for failed database rewrite attempt!

hilft es, das Verzeichnis /var/lib/dhcpd zu erzeugen:

sudo mkdir /var/lib/dhcpd 

Dann kann die Datei dhcpd.leases erzeugt und beschrieben werden.

Wenn folgende Fehlermeldung auftaucht:

Nov 20 22:19:07 localhost dhcpd: Not configured to listen on any interfaces!
Nov 20 22:19:07 localhost kernel: [ 1457.609470] init: isc-dhcp-server main process (3765) terminated with status 1
Nov 20 22:19:07 localhost kernel: [ 1457.609585] init: isc-dhcp-server main process ended, respawning
Nov 20 22:19:07 localhost dhcpd: Wrote 0 leases to leases file.
Nov 20 22:19:07 localhost dhcpd: 
Nov 20 22:19:07 localhost dhcpd: No subnet declaration for eth0 (no IPv4 addresses).
Nov 20 22:19:07 localhost dhcpd: ** Ignoring requests on eth0.  If this is not what
Nov 20 22:19:07 localhost dhcpd:    you want, please write a subnet declaration
Nov 20 22:19:07 localhost dhcpd:    in your dhcpd.conf file for the network segment
Nov 20 22:19:07 localhost dhcpd:    to which interface eth0 is attached. **

kann mit dem Befehl ifconfig eth0 192.168.2.11 dem Interface eine IP-Adresse zugewiesen werden, welche es aber nach jedem Neustart wieder verliert.

Diese Revision wurde am 29. September 2018 23:34 von Beforge erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Server, Edubuntu, ip, dhcp, Netzwerk