Files
Simple-DHCP-Server/README.md

146 lines
3.9 KiB
Markdown
Raw Permalink 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)
- **Neu:** Eingabefelder für Primary/Secondary DNS (DHCP Option 6)
- **DHCP-Optionen:**
- Option 1: Subnetzmaske
- Option 3: Router/Gateway (setzt automatisch auf Server-IP)
- Option 6: DNS-Server (aus GUI)
- Option 51: Lease-Time
- **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).
* Primary DNS wird standardmäßig auf die Interface-IP gesetzt (typisch fürs Lab).
* Optional Secondary DNS eintragen (z. B. `8.8.8.8`).
### 3) Server starten
* **Start** klicken → Warnmeldung bestätigen → Log zeigt „Listening on UDP/67“.
* DHCP-Clients können jetzt Adressen und DNS-Settings beziehen.
---
## 🧪 Testen
### Mit `dhclient`
```bash
sudo dhclient -v -i -4 -d -sf /bin/true eth0
```
* `-sf /bin/true` verhindert Änderungen an `/etc/resolv.conf`
* GUI sollte zeigen, dass ein Lease vergeben wurde.
### 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.
---
## 🌐 Internet-Sharing (optional)
Wenn der PC per WLAN im Internet ist, kann man den Traffic ins Labnetz weiterleiten:
```bash
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o wlp61s0 -j MASQUERADE
sudo iptables -A FORWARD -i wlp61s0 -o enp0s31f6 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i enp0s31f6 -o wlp61s0 -j ACCEPT
```
Dann können Clients im Labnetz Internetzugang nutzen.
---
## 🔒 Sicherheit & Best Practices
* **Nur in isolierten Netzen verwenden** (Lab, VLAN, Test-Switch).
* Server-IP statisch setzen, damit sie stabil bleibt.
* Aufpassen bei Mehr-Interface-Systemen: Immer bewusst auswählen, welches Interface beschallt wird.
---
## 🛑 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)
* [ ] Mehr Optionen (NTP, PXE, benutzerdefiniert)
---
## ⚠️ 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!