Eigenen DHCP-Server unter Linux installieren und betreiben

Vorwort zur Anleitung:
Diese Anleitung hat einen erhöhten Schwierigkeitsgrad.
Installation von Linux und Kenntnisse in der Befehlszeile sind vorausgesetzt.
Ein DHCP-Server (Dynamic Host Configuration Protocol) ist ein Netzwerkdienst, der automatisch IP-Adressen und andere Netzwerkkonfigurationsparameter an Geräte in einem Netzwerk zuweist. Dadurch wird die manuelle IP-Konfiguration jedes einzelnen Geräts überflüssig.
Hier sind einige der Hauptfunktionen eines DHCP-Servers:
1. IP-Adresszuweisung:
Der Server vergibt IP-Adressen aus einem definierten Adresspool an Geräte, die sich mit dem Netzwerk verbinden.
2. Lease-Management:
Die zugewiesenen IP-Adressen werden für einen bestimmten Zeitraum (Lease-Time) vergeben. Nach Ablauf dieser Zeit kann die Adresse entweder verlängert oder neu vergeben werden.
3. Bereitstellung zusätzlicher Netzwerkinformationen:
Neben der IP-Adresse kann der DHCP-Server auch Informationen wie die Subnetzmaske, das Standard-Gateway, DNS-Server-Adressen und PXE-Pfade bereitstellen.
Durch die Automatisierung dieser Prozesse erleichtert ein DHCP-Server die Netzwerkverwaltung und minimiert das Risiko von IP-Adresskonflikten.

Vorbereitungen / Anforderungen:

Anforderungen
Schwierigkeitsgrad-Installation: Schwer
Schwierigkeitsgrad-Anwendung: Einfach
Erforderliche Kenntnisse: Linux-Befehlszeile
Systemvoraussetzungen:
Basis: Debian
Betriebssystem: Ubuntu Server (Headless)
Festplattenspeicher: Mindestens 10 GB
CPU: Mindestens 1 CPU
RAM: Mindestens 512 MB
Internetverbindung: Verfügbar
Die Systemanforderungen wurden in einer virtualisierten Umgebung getestet.
Tipp:
Wenn du mit Virtualisierung, z.B. ProxMox, vertraut bist, kannst du deine eigenen Server effizient und stromsparend betreiben!
Getestet auf:
  • Ubuntu-Server 22.04
  • Ubuntu-Server 24.10
Installationsablauf:
  1. Durchführung von System-Upgrade
  2. Statische IP-Adresse festlegen und anwenden
  3.  (Optional) Hostnamen festlegen
  4.  Installation und Einstellungen
  5.  Festlegen von festen IP-Adressen
  6.  Systembedienung
  7.  Störungsanalyse
Optionale Schritte können weggelassen werden, da sie lediglich unterstützende Funktionen bieten, wie zum Beispiel die Zusammenfassung von Servern in einem Rechenzentrum.
Für den Betrieb in einem Rechenzentrum sollten die optionalen Abläufe jedoch aus Gründen des beruflichen Stolzes in Betracht gezogen werden.

1. Durchführung von System-Upgrade

Vor jeder Installation ist ein System-Update erforderlich:
$> ssh DEINUSER@192.168.1.X
# Stelle eine SSH-Verbindung zu deinem Server her
$> sudo apt update
# Aktualisiere die Paketquellen
$> sudo apt upgrade -y
# Starte das System-Upgrade
$> sudo apt autoclean
# Optional: Entferne überflüssige Pakete
$> sudo apt autoremove
# Optional: Bereinige das System von Abhängigkeiten

2. Statische IP-Adresse festlegen und anwenden

Ein DHCP-Server benötigt zwingend eine statische IP-Adresse. In allen Fällen ist ein DHCP-Server der Dreh- und Angelpunkt eines Netzwerkes, weil dieser Dienst die zugewiesenen Adressen im Netzwerk verteilt.
Es besteht die Möglichkeit, sich selbst vom Server auszuschließen, wenn die IP-Adresse nicht korrekt konfiguriert ist.
$> ip addr
# Liste alle Netzwerkadapter und Informationen auf
$> sudo su
# Wechsel in die Super-User-Shell
$> cd /etc/netplan
# Wechsle ins Netplan-Verzeichnis
$> ls -l
# Zeige alle Dateien im Netplan-Verzeichnis an
$> for i in $( ls ); do mv $i $i.bak; done
# Sichere alle bestehenden Konfigurationen als Backup
$> touch /etc/netplan/01_static_ip.yaml
# Erstelle eine neue Konfigurations-Datei
$> nano /etc/netplan/01_static_ip.yaml
# Öffne die neue Konfigurations-Datei
network:
  version: 2
  renderer: networkd
  ethernets:
    ens18: #Edit this line according to your network interface name.
      dhcp4: no
      addresses:
        - 192.168.1.1/24
      gateway4: 192.168.1.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
# Öffne die Datei mit einem Texteditor (Copy-Paste)
# Ersetze ens18 durch den Namen deines Netzwerk-Adapters (siehe Ausgabe von ip addr).
# Ändere die IP-Adresse und die Netzmaske nach Bedarf.
# Passen die DNS-Adressen an, falls erforderlich.
# Überprüfe und passe ggf. die Routen (Gateway) an.
Speichern und Verlassen
• Speichern der Datei: Ctrl + O
• Editor verlassen: Ctrl + X
$> netplan generate && netplan apply
# Wende die neuen Netzwerkeinstellungen an
🚨 Der Server wechselt nun zu einer neuen IP-Adresse, was dazu führt, dass deine SSH-Sitzung unterbrochen wird.

3. (Optional) Hostnamen festlegen

Durch das Ändern des Hostnamens der Server-Station vergibst du einen eindeutigen Namen für das System.
In unserem Fall könnte der Hostname beispielsweise „S1-DHCP-Server“ lauten.
Die Hosts-Datei wird verwendet, um auf Server-Ebene IP-Adressen Namen zuzuordnen, die intern genutzt werden. Wenn du den Hostnamen änderst, muss auch der entsprechende Eintrag in der Hosts-Datei aktualisiert werden. Bei produktiven Systemen sollte diese Kleinigkeit unbedingt beachtet werden, da sie ein Zeichen von Berufsethos und Professionalität ist. Für Tests und Experimente ist dies jedoch nicht zwingend erforderlich.
Der neue Hostname muss zwingen der gleiche sein wie auch im Hosts-File.
$> ssh DEINUSER@192.168.1.X
# Wiederherstellen der SSH-Verbindung
$> sudo hostnamectl set-hostname DEINHOSTNAME
# Einen neuen Host-Namen setzen
$> sudo nano /etc/hosts 
# Hosts-Datei öffnen und ändere den markierten Bereich

127.0.0.1 localhost
127.0.1.1 DEINHOSTNAME

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ……..

# Speichern und Verlassen
• Speichern der Datei: Ctrl + O
• Editor verlassen: Ctrl + X
$> sudo reboot
# Server neu starten, damit die Änderungen wirksam werden

4. Installation und Einstellungen

$> ssh DEINUSER@192.168.1.X
# Wiederherstellen der SSH-Verbindung
$> sudo apt install isc-dhcp-server -y
# System installieren
$> sudo systemctl enable isc-dhcp-server.service 
# Autostart Eintrag setzen
$> sudo nano /etc/dhcp/dhcpd.conf 
# Konfigurations-Datei öffnen
# Rogue-DHCP-Server nicht erlauben-nur einen DHCP-Server im Netz
authoritative;
# Dynamic DNS - Push new DNS into Zone-File (interim / standard / none)
ddns-update-style none;
# One-Lease - nur ein Lease pro Client
one-lease-per-client false;
# Hostname domain lookup für alle Hosts
get-lease-hostnames false;
# Ping Check um zu verhindern dass eine Adresse doppelt existiert
ping-check false;

subnet 192.168.1.0 netmask 255.255.255.0{
       #Interface über welches die Adressen verteilt werden
       interface ens18;
       #Adressenbereich
       range 192.168.1.110 192.168.1.250;
       #Eigener Domain Name
       option domain-name local-network;
       #DNS-Server
       option domain-name-servers 1.1.1.1, 1.0.0.1;
       #Broadcoast-Adresse
       option broadcast-address 192.168.1.255;
       #Netzwerkmaske option subnet-mask 255.255.255.0
       #Gateway des Netzwerks
       option routers 192.168.1.1;
       # Lease Time-Dauer der Vergabe der Adressen
       default-lease-time 600;
       max-lease-time 7200; }
$> sudo systemctl restart isc-dhcp-server.service
# Dienst Neustart

Kurze Beschreibung zu den Anpassungen:

Authoritative
Es ist möglich, mehrere DHCP-Server im gleichen Netzwerk zu betreiben. Die Option „authoritative“ stellt jedoch sicher, dass der Server als der einzige autorisierte DHCP-Server im Netzwerk fungiert.
One-lease-per-client
Ein Benutzer kann eine oder mehrere IP-Adressen anfordern. Bevor eine IP-Adresse vergeben wird, kann der DHCP-Server den Hostnamen verifizieren (denken Sie an den optionalen Schritt „Hostnames“) und per Ping überprüfen, ob die Adresse bereits vergeben ist, um Doppelbelegungen zu vermeiden.
Get-lease-hostnames und Ping check
Bevor eine IP-Adresse vergeben wird, kann der DHCP-Server den Hostnamen verifizieren (denke an den optionalen Schritt „Hostnames“) und per Ping-Check überprüfen, ob die Adresse bereits vergeben ist, um Doppelbelegungen zu vermeiden.
Subnet und Netmask
Der Server bezieht sich auf das eigene IP (Subnet) und dessen Sichtbarkeit innerhalb des Netzwerks (Netmask), diese werden an die Clients weitergegeben.
Interface
Das Interface ist die Netzwerkschnittstelle, an der der DHCP-Server auf Anfragen lauscht.
Range
Der Range (Adressbereich) gibt an, welche IP-Adressen im Bereich „von-bis“ vergeben werden können.
DNS
Die Domain Name-Server (DNS-Server) fungieren ähnlich wie die Hosts-Datei und übersetzen Domänennamen in IP-Adressen.
Broadcast
Die Broadcast-Adresse ist eine spezielle IP-Adresse, die alle Geräte im Netzwerkbereich ansprechen kann, wenn sie direkt verwendet wird.
Subnetmask
Die Subnetzmaske definiert die Anzahl der Geräte und die Sichtweite innerhalb des Netzwerks sowie deren Kommunikationsmöglichkeiten.
Router
Der Router ist die Adresse, über die Internetanfragen das Netzwerk verlassen. Dieser wird oft auch als Gateway bezeichnet.
Lease-Time
Die Lease-Time legt die minimale oder maximale Zeit fest, während der eine zugewiesene IP-Adresse verwendet werden kann. Läuft die Lease-Time ab, wird die Adresse neu angefordert und vergeben. Bei einer großen Anzahl von Geräten (z. B. im Gäste-WLAN) sollte die Lease-Time kürzer eingestellt werden, um zu verhindern, dass Geräte dauerhaft als „Gäste“ im Netzwerk bleiben.

5. Festlegen von festen IP-Adressen

Das festlegen von IP-Adressen in Verbindung an eine MAC-Adresse ist gängige Praxis. Jedoch prüft der DHCP-Server nicht ob eine MAC-Adresse schon verwendet wurde. Dies gilt es zu berücksichtigen.
host Device-1 {
hardware ethernet AA:BB:CC:DD:11:22;
fixed-address 192.168.1.112;
option host-name "Wlan-Device";
}
Kopiere diesen Abschnitt, passe die markierten Stellen an und füge ihn am Ende der Konfigurationsdatei ein. Danach muss der Dienst neu gestartet werden. Das Gerät mit der angegebenen MAC-Adresse erhält die zugewiesene IP-Adresse, sobald es mit dem Netzwerk verbunden wird.

6. Systembedienung

$> sudo systemctl start isc-dhcp-server.service
# Dienst starten
$> sudo systemctl restart isc-dhcp-server.service
# Dienst neustarten 
$> sudo systemctl stop isc-dhcp-server.service
# Dienst stoppen 
$> sudo nano /etc/dhcp/dhcpd.conf
# Konfigurationsdatei bearbeiten
$> cat /var/lib/dhcp/dhcpd.leases
# IP-Leases anzeigen
$> cat /var/log/syslog | grep dhcpd
# Log-Einträge anzeigen
$> sudo apt install nmap -y && nmap localhost
# Ports des Server auflisten
$> watch -d ip addr
# Client: Beobachten der IP
$> sudo dhcpd -t && sudo dhcpd -T
# Konfiguration testen
$>sudo apt install dhcpcd5 && sudo dhcpcd -T ens18
# Systemtest des Dienst-Portes
$> man dhcpd
# Hilfe-Datei des Dienstes
$> man dhcpd.conf
# Hilfe-Datei der Konfiguration

7. Störungsanalyse

Statische IP-Adresse wird nicht gesetzt:
Beachte, dass die Netzwerk-Konfiguration im YAML-Stil erfolgt. Die „Incidents“ (Einschübe des Textes) sind essenziell. In der downloadbaren Road-Map-Textdatei findest du ein Beispiel mit korrekten Incidents.
Der DHCP-Server startet nach einem Reboot nicht eigenständig:
Aktiviere das Start-Flag für den Dienst mit dem Befehl systemctl enable isc-dhcp-server.service, damit er beim Neustart des Systems automatisch gestartet wird.
Die Konfiguration gibt Fehler aus, und kann nicht gestartet werden
Der Test der Konfiguration bezieht sich sowohl auf die Syntax auch als auf die Netzwerkeingabe. Wähle zu Beginn ein einfaches, dir vertrautes Netzwerk.
Einige CLI-Befehle benötigen ungewöhnlich lange…
Wenn du den optionalen Teil dieser Anleitung befolgt hast, überprüfe, ob der Hostname des Servers mit der Hosts-Datei übereinstimmt!
Ich habe einigen Geräten eine feste IP-Adresse einer MAC-Adresse zugewiesen, aber es gibt Probleme:
Wichtig zu wissen: Die Konfiguration überprüft nicht die Richtigkeit deiner Eingaben (wie z.b. IP und Netzmaske).
Stelle sicher, dass die IP-Adresse nicht bereits vergeben oder doppelt belegt ist und dass die MAC-Adresse korrekt ist. Außerdem dürfen „host“ und „option hostname“ nicht identisch sein. Um die neue Konfiguration zu aktivieren, ist ein Neustart des Dienstes erforderlich! Ohne Neustart funktioniert es nicht.