Wie Du einen DHCP Server für Dein LAN einrichtest

Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>

Diese Anleitung veranschaulicht, wie Du einen DHCP Server (ISC-DHCP) für Dein lokales Netzwerk einrichtest. DHCP ist die Abkürzung für „Dynamic Host Configuration Protocol“, es ist ein Protokoll, das IP Adressen, Subnetzmasken, Default Router und anders IP Parameter Client PCs zuweist, die keine statische IP Adresse haben. Solche Computer versuchen einen DHCP Server in ihrem lokalen Netzwerk zu finden, der ihnen wiederum eine IP Adresse, Gateway, etc. zuweist, damit sie sich mit dem Internet oder anderen Computern vom lokalen Netzwerk aus verbinden können.

In dieser Anleitung werde ich zeigen, wie man einen einfachen DHCP Server (ISC-DHCP) auf einem Debian Sarge (3.1) System einrichtet, dessen einziger Zweck der ist, IP Adressen, ein Gateway, DNS Server, etc. Client Computern aus dem lokalen Netzwerk zuzuweisen, die keine statische IP Adresse haben. Du kannst einen solchen DHCP Server in Deinem Netzwerk zu Hause, Deinem Büro etc. verwenden, wenn Dein Router zum Beispiel keinen eingebauten DHCP Server hat. Wenn Du einen solchen DHCP Server einrichtest, pass bitte auf, dass Du nicht bereits einen anderen in Deinem LAN hast, das dies zu einer Beeinflussung führt.

Natürlich kann man sich noch weitaus schwierigere DHCP Setups vorstellen, diese liegen jedoch außerhalb des Rahmens dieses Dokumentes.

Ich möchte an dieser Stelle darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen – dies ist der Weg, den ich gewählt habe. Ich kann aber nicht garantieren, dass diese Lösung bei jedem funktioniert bzw. für jeden die richtige ist!

1 Vorbemerkung

Dies ist die derzeitige Situation:

  • Ich verwende das Netzwerk 192.168.0.0, die Subnetzmaske 255.255.255.0, die Broadcast Adresse 192.168.0.255.
  • Mein Gateway zum Internet ist 192.168.0.1; auf dem Gateway befindet sich kein DHCP Server.
  • Mein ISP teilte mir mit, dass die DNS Server, die ich benutzen kann, 145.253.2.75 und 193.174.32.18 sind.
  • Ich habe einen Pool von 30 IP Adressen (192.168.0.200 – 192.168.0.229), die dynamisch Client PCs zugewiesen werden können und noch nicht verwendet werden.
  • Ich habe einen unbenutzten Debian Sarge Server mit dem Hostnamen server1.example.com auf der IP Adresse 192.168.0.100 der als mein DHCP Server fungieren wird.

2 Installation des DHCP Servers

Lass uns nun unseren DHCP Server auf unserem Debian Sarge System installieren:

apt-get install dhcp3-server

Dir werden ein paar Fragen gestellt:

On what network interfaces should the DHCP server listen? <– eth0

Please configure the DHCP server as soon as the installation finishes. <– Ok

The version 3 DHCP server is now non-authoritative by default <– Ok

Am Ende der Installation werden Dir Fehler wie diese angezeigt:

Generating /etc/default/dhcp3-server…
Starting DHCP server: dhcpd3 failed to start – check syslog for diagnostics.
invoke-rc.d: initscript dhcp3-server, action „start“ failed.

Das ist in Ordnung, da wir bisher noch keine Gelegenheit hatten, unseren DHCP Server zu konfigurieren.

3 Konfiguration des DHCP Servers

Nun müssen wir unseren DHCP Server konfigurieren. Wir müssen ihm mitteilen, von welchem IP Bereich er IP Adressen den anfragenden Clients zuweisen soll, welches Gateway, welche DNS Server etc. er zuweisen soll.

Die Konfigurationsdatei unseres DHCP Server ist /etc/dhcp3/dhcpd.conf. Momentan enthält sie eine Musterkonfiguration, die wir nach /etc/dhcp3/dhcpd.conf_orig für zukünftige Referenzen kopieren:

cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf_orig
cat /dev/null > /etc/dhcp3/dhcpd.conf

Mit dem letzten Befehl haben wir /etc/dhcp3/dhcpd.conf geleert, damit wir unsere eigene Konfiguration einfügen können, was wir hiermit tun:

vi /etc/dhcp3/dhcpd.conf

Die Datei sollte wie folgt aussehen:

ddns-update-style none;

option domain-name-servers 145.253.2.75, 193.174.32.18;

default-lease-time 86400;
max-lease-time 604800;

authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
        range 192.168.0.200 192.168.0.229;
        option subnet-mask 255.255.255.0;
        option broadcast-address 192.168.0.255;
        option routers 192.168.0.1;
}

Hier erkläre ich die Konfigurationsoptionen:

  • ddns-update-style: Du kannst Deinem DHCP Server sagen, dass er einen DNS Server aktualisieren soll, wenn sich die IP Adresse eines Servers in Deinem LAN geändert hat (da ihm von DHCP eine andere IP zugewiesen wurde). Da wir in unserem LAN keine Server laufen lassen oder ihnen immer statische IP Adressen zuweisen (was für Server keine schlechte Idee ist…), wollen wir DNS Einträge nicht aktualisieren, also setzen wir dies auf „none“.
  • option domain-name-servers: Dies teilt dem DHCP Server mit, welche DNS Server er einem Client zuweisen soll. Hier kannst Du mehr als einen DNS Server festlegen, durch Komma getrennt.
  • default-lease-time, max-lease-time: Ein Client kann den DHCP Server darüber unterrichten, für wie lange er eine IP Adresse haben möchte. Wenn er das nicht tut, weist der Server eine IP Adresse für eine gewisse Standardzeit in Sekunden zu (default-lease-time); wenn er es tut, gewährt der Server die angeforderte Zeit, aber nur zu einer bestimmten Maximalzeit in Sekunden (max-lease-time).
  • authoritative: Wenn das nicht eingestellt ist, bedeutet das, dass wenn ein Client eine Adresse anfordert, von der der Server nichts weiß und die Adresse für dieses Netzwerksegment nicht stimmt, der Server keinen DHCPNAK senden wird (der dem Client mitteilt, dass er diese Adresse nicht weiter verwenden soll.) Das wollen wir nicht, also stellen wir „authoritative“ ein.
  • subnet: Das Subnetzt, das verwendet werden soll.
  • netmask: Die Netzmaske, die verwendet werden soll.
  • range: Sagt dem DHCP Server, von welchem Bereich er den Clients IP Adressen zuweisen kann. In unserem Beispiel ist es von 192.168.0.200 bis 192.168.0.229 (30 IP Adressen).
  • option broadcast-address: Die Broadcast Adresse, die verwendet werden soll.
  • option routers: Teilst dem DHCP Server die Gateway Adresse mit, die er anfragenden Clients zuweisen soll. In unserem Fall ist das Gateway 192.168.0.1.

Wenn Du Dir mit Deinen persönlichen Netzwerkeinstellungen nicht sicher bist (Netzwerk, Netzmaske, Broadcast Adresse, etc.), gehe zu www.subnetmask.info, wo Du Deine Einstellungen planen kannst.

Wie Du siehst ist das eine sehr einfache Basiskonfiguration, aber sie reicht aus um unseren DHCP Server funktionstüchtig zu machen. Lass uns ihn nun starten:

/etc/init.d/dhcp3-server restart

Danach kannst Du die Ausgabe von

ps aux

überprüfen, um herauszufinden, ob DHCP funktioniert. Du solltest ihn ebenfalls in der Ausgabe von

netstat -uap

sehen, was diesem hier ähneln sollte:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp        0      0 *:bootps                *:*                                2185/dhcpd3
udp        0      0 *:868                   *:*                                1964/rpc.statd
udp        0      0 *:871                   *:*                                1964/rpc.statd
udp        0      0 *:sunrpc                *:*                                1553/portmap

Wie Du siehst, wird DHCP auf dem bootps UDP Port ausgeführt, das auf Port 67 UDP übersetzt wird (führe dies aus

grep bootps /etc/services

und Du siehst, dass bootps Port 67 bedeutet).

Schließlich kannst Du  /var/log/syslog überprüfen, ob irgendwelche Fehler während des DHCP Server Starts aufgetreten sind. Um zum Beispiel die letzten 100 Zeilen von  /var/log/syslog anzeigen zu lassen, führe Folgendes aus

tail -n 100 /var/log/syslog

4 Wie finde ich heraus, dass mein DHCP Server richtig funktioniert?

Um herauszufinden, ob Dein DHCP Server wie erwartet funktioniert, starte einen anderen PC (Windows, Linux, MAC, …) in Deinem LAN, der keine statische IP Adresse hat. Warte eine paar Sekunden und Du solltest in /var/log/syslog auf dem DHCP Server sehen, dass der DHCP Server Deinem PC eine IP Adresse zuweist. Zum Beispiel wurde in dem Auszug von  /var/log/syslog einem Client namens Matze die IP Adresse 192.168.0.229 zugewiesen:

Sep 19 16:01:26 server1 dhcpd: DHCPDISCOVER from 00:0c:76:8b:c4:16 via eth0
Sep 19 16:01:26 server1 dhcpd: DHCPOFFER on 192.168.0.229 to 00:0c:76:8b:c4:16 (matze) via eth0
Sep 19 16:01:27 server1 dhcpd: DHCPDISCOVER from 00:0c:76:8b:c4:16 (matze) via eth0
Sep 19 16:01:27 server1 dhcpd: DHCPOFFER on 192.168.0.229 to 00:0c:76:8b:c4:16 (matze) via eth0
Sep 19 16:01:31 server1 dhcpd: DHCPDISCOVER from 00:0c:76:8b:c4:16 (matze) via eth0
Sep 19 16:01:31 server1 dhcpd: DHCPOFFER on 192.168.0.229 to 00:0c:76:8b:c4:16 (matze) via eth0
Sep 19 16:01:31 server1 dhcpd: Wrote 1 leases to leases file.
Sep 19 16:01:31 server1 dhcpd: DHCPREQUEST for 192.168.0.229 (192.168.0.100) from 00:0c:76:8b:c4:16 (matze) via eth0
Sep 19 16:01:31 server1 dhcpd: DHCPACK on 192.168.0.229 to 00:0c:76:8b:c4:16 (matze) via eth0

Der DHCP Server schreibt alle momentanen IP Adressen-„leases“ in die Datei /var/lib/dhcp3/dhcpd.leases, Du solltest die lease also auch dort finden:

vi /var/lib/dhcp3/dhcpd.leases

# All times in this file are in UTC (GMT), not your local timezone.   This is
# not a bug, so please don't ask about it.   There is no portable way to
# store leases in the local timezone, so please don't request this as a
# feature.   If this is inconvenient or confusing to you, we sincerely
# apologize.   Seriously, though - don't ask.
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-V3.0.1

lease 192.168.0.229 {
  starts 2 2006/09/19 14:01:31;
  ends 3 2006/09/20 14:01:31;
  binding state active;
  next binding state free;
  hardware ethernet 00:0c:76:8b:c4:16;
  uid "?01?00?14v213304?26";
  client-hostname "matze";
}

Viel Spaß!

5 Links

Das könnte dich auch interessieren …