Files
Simple-DHCP-Server/README.md
2025-09-11 11:33:29 +02:00

127 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🖧 Simple DHCP Server (Lab Edition)
Ein minimalistischer, aber funktionsfähiger **IPv4-DHCP-Server** mit GUI ideal zum Basteln, Testen und für kleine Lab-Setups mit Raspberry Pi oder PC.
⚠️ **Warnung:** Ein DHCP-Server im falschen Netz kann *massives Chaos* auslösen (IP-Konflikte, Netzwerkausfall).
Benutze dieses Tool nur in isolierten Testumgebungen oder auf einem dedizierten Interface!
---
## ✨ Features
- **GUI-basiert**: Start/Stop per Button, aktive Clients & Leases live sehen
- **Interface-selektiert**: bindet *exklusiv* auf das gewählte Interface (`SO_BINDTODEVICE`)
- **Preflight-Checks**:
- prüft Root-Rechte vor dem Start
- prüft, ob Port 67 bindbar ist
- **Leichte Konfiguration**:
- liest IP & Subnetz des gewählten Interface automatisch aus
- vergibt Adressen aus einem dynamischen Pool (ab Start-IP)
- **Log-Panel & Statusleiste**: zeigt DHCP-Events in Echtzeit
- **Echte DHCP-Pakete**: DISCOVER → OFFER, REQUEST → ACK, RELEASE → Lease-Freigabe
---
## 🛠 Installation
```bash
git clone https://github.com/<dein-repo>/simple-dhcp-server.git
cd simple-dhcp-server
pip install -r requirements.txt
````
### Dependencies
* Python 3.9+
* `psutil` (Interface-Infos)
* optional: `sv-ttk` für schickes Dark-Theme
```bash
pip install psutil sv-ttk
```
---
## 🚀 Starten
### 1) GUI starten
> **Root-Rechte sind erforderlich**, da Port 67 (<1024) privilegiert ist.
```bash
sudo -E python3 main.py
```
### 2) Interface auswählen
* Wähle das Interface (z. B. `eth0`) aus der Dropdown-Liste.
* IP & Subnetz werden automatisch eingetragen (kann angepasst werden).
* ⚠️ **Warnmeldung** bestätigen.
### 3) Server starten
* **Start** klicken → Log zeigt „Listening on UDP/67“.
* DHCP-Clients können jetzt Adressen beziehen.
---
## 🧪 Testen
### Mit `dhclient`
```bash
sudo dhclient -v -i -4 -d -sf /bin/true eth0
```
* `-sf /bin/true` verhindert Änderungen an `/etc/resolv.conf`
* Du solltest in der GUI sehen, wie der Client einen Lease bekommt.
### Mit `nmap`
```bash
sudo nmap --script broadcast-dhcp-discover -e eth0
```
Zeigt DHCP-Server im Netz. Dein Server sollte mit OFFER antworten.
### Mit `tcpdump` sniffen
```bash
sudo tcpdump -ni eth0 port 67 or port 68
```
Zeigt DISCOVER/OFFER/REQUEST/ACK Pakete live.
---
## 🔒 Sicherheit & Best Practices
* **Nur in isolierten Netzen verwenden** (Lab, VLAN, Test-Switch).
* Auf Produktivsystemen immer **statische IP** für den Server selbst setzen, sonst könnte er seine eigene IP verlieren.
* Bei Mehr-Interface-Hosts genau überlegen, auf welchem Interface der Server laufen soll.
---
## 🛑 Stoppen
Einfach **Stop** in der GUI klicken oder Fenster schließen.
Leases werden nur im Speicher gehalten (kein persistentes Lease-File).
---
## 🧭 Roadmap
* [ ] Lease-Persistenz (JSON oder SQLite)
* [ ] Statische MAC-Reservierungen
* [ ] Konfigurierbarer Pool (Start/End-Adresse)
* [ ] Unterstützung für Option 3 (Router) & Option 6 (DNS) konfigurierbar
---
## ⚠️ Haftungsausschluss
Dies ist ein **Entwicklungs- und Lern-Tool**. Es ist *nicht* als Ersatz für produktive DHCP-Server gedacht.
Benutzung auf eigene Gefahr prüfe deine Netzumgebung sorgfältig, bevor du den Server startest!
```