KEA DHCP - Netzwerk und Serveradministration: Unterschied zwischen den Versionen
| (24 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt) | |||
| Zeile 3: | Zeile 3: | ||
=== Installation === | === Installation === | ||
| − | * sudo apt install kea-dhcp4-server | + | * sudo apt install kea-dhcp4-server kea-dhcp-ddns-server |
| + | |||
| + | |||
| + | === Entfernen aus Apparmor === | ||
| + | ;Verzeichnis für Deaktivierung sicherstellen | ||
| + | *mkdir -p /etc/apparmor.d/disable | ||
| + | ;Symlink erstellen (verhindert das Laden beim Booten) | ||
| + | *ln -sf /etc/apparmor.d/usr.sbin.kea-dhcp4 /etc/apparmor.d/disable/ | ||
| + | *ln -sf /etc/apparmor.d/usr.sbin.kea-dhcp-ddns /etc/apparmor.d/disable/ | ||
| + | ;AppArmor Dienst anweisen, Profile neu zu laden (das entfernt die deaktivierten) | ||
| + | *systemctl reload apparmor | ||
=== Konfiguration der zu vergebenden Netzwerkparameter === | === Konfiguration der zu vergebenden Netzwerkparameter === | ||
| − | + | Die Hauptkonfigurationsdatei von Kea ist im JSON-Format | |
* sudo vim /etc/kea/kea-dhcp4.conf | * sudo vim /etc/kea/kea-dhcp4.conf | ||
| Zeile 19: | Zeile 29: | ||
"type": "memfile", | "type": "memfile", | ||
"persist": true, | "persist": true, | ||
| − | "name": "/var/lib/kea/ | + | "name": "/var/lib/kea/kea-leases4.csv" |
}, | }, | ||
"valid-lifetime": 600, | "valid-lifetime": 600, | ||
"max-valid-lifetime": 7200, | "max-valid-lifetime": 7200, | ||
| + | "option-data": [ | ||
| + | { "name": "domain-name-servers", "data": "10.88.2XX.21" }, | ||
| + | { "name": "domain-name", "data": "it2XX.int" }, | ||
| + | { "name": "domain-search", "data": "it2XX.int, example.com" } | ||
| + | ], | ||
"subnet4": [ | "subnet4": [ | ||
{ | { | ||
| − | "subnet": "172. | + | "id": 1, |
| − | "pools": [ | + | "subnet": "172.26.2XX.0/24", |
| − | + | "pools": [ { "pool": "172.26.2XX.50 - 172.26.2XX.100" } ], | |
| − | + | "option-data": [ { "name": "routers", "data": "172.26.2XX.1" } ], | |
| − | + | "reservations": [ | |
| − | + | { "hw-address": "aa:bb:cc:dd:ee:ff", "ip-address": "172.26.2XX.10", "hostname": "client" } | |
| − | "option-data": [ | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | "reservations": [ | ||
| − | { | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
] | ] | ||
} | } | ||
| Zeile 66: | Zeile 52: | ||
{ | { | ||
"name": "kea-dhcp4", | "name": "kea-dhcp4", | ||
| − | "output_options": [ | + | "output_options": [ { "output": "/var/log/kea/kea-dhcp4.log" } ], |
| − | |||
| − | |||
| − | |||
| − | |||
"severity": "INFO" | "severity": "INFO" | ||
} | } | ||
| Zeile 80: | Zeile 62: | ||
=== Dienst starten und überprüfen === | === Dienst starten und überprüfen === | ||
| − | + | Konfiguration testen | |
* sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf | * sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf | ||
| − | + | Dienst mit der neuen Konfiguration starten und überprüfen | |
* sudo systemctl restart kea-dhcp4-server | * sudo systemctl restart kea-dhcp4-server | ||
* sudo systemctl status kea-dhcp4-server | * sudo systemctl status kea-dhcp4-server | ||
| − | + | Dienst beim Systemstart automatisch aktivieren | |
* sudo systemctl enable kea-dhcp4-server | * sudo systemctl enable kea-dhcp4-server | ||
| Zeile 99: | Zeile 81: | ||
</pre> | </pre> | ||
| + | ==Der Client== | ||
| + | ;Startet nun den grafischen Client im LAN | ||
=== Logs === | === Logs === | ||
==== Ab Debian 12 ==== | ==== Ab Debian 12 ==== | ||
| − | + | Die letzten 100 Zeilen und neue Nachrichten anschauen | |
* journalctl -fn100 -u kea-dhcp4-server | * journalctl -fn100 -u kea-dhcp4-server | ||
| − | + | Alternativ die Kea-spezifische Logdatei verwenden | |
* tail -f /var/log/kea/kea-dhcp4.log | * tail -f /var/log/kea/kea-dhcp4.log | ||
=== Lease-Verwaltung === | === Lease-Verwaltung === | ||
| − | + | Aktive Leases anzeigen | |
* sudo cat /var/lib/kea/dhcp4.leases | * sudo cat /var/lib/kea/dhcp4.leases | ||
| − | + | Oder mit dem Kea Shell Tool (falls installiert) | |
* sudo apt install kea-ctrl-agent | * sudo apt install kea-ctrl-agent | ||
| − | === | + | === Statische IP-Adressen (Reservierungen) === |
| − | + | Statische IP-Adressen werden in Kea als "reservations" innerhalb des Subnets definiert. Diese befinden sich bereits in der Hauptkonfiguration (siehe oben). | |
| − | |||
| − | ==== | + | ==== MAC-Adresse eines Geräts herausfinden ==== |
| − | * | + | * ip link show |
| + | * oder für eine spezifische Schnittstelle: | ||
| + | * ip link show enp0s3 | ||
| − | ==== | + | ==== Hinweise zu Reservierungen ==== |
| − | * sudo | + | Die reservierten IP-Adressen sollten '''außerhalb''' des dynamischen Pools liegen |
| + | Nach Änderungen an den Reservierungen muss der Dienst neu gestartet werden | ||
| + | * sudo systemctl restart kea-dhcp4-server | ||
| + | Alternativ können Reservierungen auch in einer separaten Datei gespeichert werden (siehe erweiterte Konfiguration) | ||
| + | |||
| + | |||
| + | |||
| + | ==== Den Client Eintragen ==== | ||
| + | |||
| + | <syntaxhighlight lang="json"> | ||
| + | "reservations": [ | ||
| + | { | ||
| + | "hw-address": "08:00:27:5d:76:5d", | ||
| + | "ip-address": "172.26.2XX.99", | ||
| + | "hostname": "client" | ||
| + | } | ||
| + | ] | ||
| + | </syntaxhighlight> | ||
=== Wichtige Unterschiede zu ISC DHCP === | === Wichtige Unterschiede zu ISC DHCP === | ||
| − | + | Kea verwendet JSON-Konfiguration statt ISC-Format | |
| − | + | Die Lease-Datenbank kann in verschiedenen Backends gespeichert werden (memfile, MySQL, PostgreSQL) | |
| − | + | Kea bietet eine REST-API zur Verwaltung (über kea-ctrl-agent) | |
| − | + | Modernere Architektur mit besserer Performance bei vielen Clients | |
=== Konfigurationsprüfung === | === Konfigurationsprüfung === | ||
| − | + | Vor jedem Neustart empfiehlt es sich, die Syntax zu prüfen | |
* sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf | * sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf | ||
| + | Neu starten | ||
| + | * sudo systemctl restart kea-dhcp4-server.service | ||
| + | |||
| + | === Globale vs. Subnet-spezifische Optionen === | ||
| + | |||
| + | ==== Hierarchie der Optionen ==== | ||
| + | |||
| + | Kea unterstützt verschiedene Ebenen für DHCP-Optionen: | ||
| + | |||
| + | '''Globale Ebene''' - gelten für alle Subnetze (im Hauptbereich "Dhcp4") | ||
| + | |||
| + | '''Subnet-Ebene''' - gelten nur für ein bestimmtes Subnet | ||
| + | |||
| + | '''Pool-Ebene''' - gelten nur für einen bestimmten Pool | ||
| + | |||
| + | '''Host-Reservierung-Ebene''' - gelten nur für einen bestimmten Host | ||
| + | |||
| + | Spezifischere Optionen überschreiben allgemeinere Optionen. | ||
| + | |||
| + | ==== Beispiel: Globale Optionen ==== | ||
| + | |||
| + | <syntaxhighlight lang="json"> | ||
| + | { | ||
| + | "Dhcp4": { | ||
| + | "option-data": [ | ||
| + | { "name": "domain-name-servers", "data": "10.88.1XX.21, 8.8.8.8" }, | ||
| + | { "name": "domain-name", "data": "it1XX.int" }, | ||
| + | { "name": "domain-search", "data": "it1XX.int, beispiel.de, firma.local" } | ||
| + | ], | ||
| + | "subnet4": [ | ||
| + | { | ||
| + | "subnet": "172.16.1XX.0/24", | ||
| + | "option-data": [ { "name": "routers", "data": "172.16.1XX.1" } ] | ||
| + | } | ||
| + | ] | ||
| + | } | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | ==== Beispiel: Subnet überschreibt globale Option ==== | ||
| + | |||
| + | <syntaxhighlight lang="json"> | ||
| + | { | ||
| + | "Dhcp4": { | ||
| + | "option-data": [ | ||
| + | { "name": "domain-name-servers", "data": "10.88.1XX.21" } | ||
| + | ], | ||
| + | "subnet4": [ | ||
| + | { | ||
| + | "subnet": "172.16.1XX.0/24", | ||
| + | "option-data": [ | ||
| + | { "name": "routers", "data": "172.16.1XX.1" }, | ||
| + | { "name": "domain-name-servers", "data": "172.16.1XX.53" } | ||
| + | ] | ||
| + | } | ||
| + | ] | ||
| + | } | ||
| + | } | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | In diesem Beispiel verwendet das Subnet 172.16.1XX.0/24 den DNS-Server 172.16.1XX.53 statt des globalen 10.88.1XX.21. | ||
Aktuelle Version vom 31. März 2026, 14:17 Uhr
Einrichten eines DHCP-Servers auf Debian mit Kea
Installation
- sudo apt install kea-dhcp4-server kea-dhcp-ddns-server
Entfernen aus Apparmor
- Verzeichnis für Deaktivierung sicherstellen
- mkdir -p /etc/apparmor.d/disable
- Symlink erstellen (verhindert das Laden beim Booten)
- ln -sf /etc/apparmor.d/usr.sbin.kea-dhcp4 /etc/apparmor.d/disable/
- ln -sf /etc/apparmor.d/usr.sbin.kea-dhcp-ddns /etc/apparmor.d/disable/
- AppArmor Dienst anweisen, Profile neu zu laden (das entfernt die deaktivierten)
- systemctl reload apparmor
Konfiguration der zu vergebenden Netzwerkparameter
Die Hauptkonfigurationsdatei von Kea ist im JSON-Format
- sudo vim /etc/kea/kea-dhcp4.conf
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "enp0s3" ]
},
"lease-database": {
"type": "memfile",
"persist": true,
"name": "/var/lib/kea/kea-leases4.csv"
},
"valid-lifetime": 600,
"max-valid-lifetime": 7200,
"option-data": [
{ "name": "domain-name-servers", "data": "10.88.2XX.21" },
{ "name": "domain-name", "data": "it2XX.int" },
{ "name": "domain-search", "data": "it2XX.int, example.com" }
],
"subnet4": [
{
"id": 1,
"subnet": "172.26.2XX.0/24",
"pools": [ { "pool": "172.26.2XX.50 - 172.26.2XX.100" } ],
"option-data": [ { "name": "routers", "data": "172.26.2XX.1" } ],
"reservations": [
{ "hw-address": "aa:bb:cc:dd:ee:ff", "ip-address": "172.26.2XX.10", "hostname": "client" }
]
}
],
"loggers": [
{
"name": "kea-dhcp4",
"output_options": [ { "output": "/var/log/kea/kea-dhcp4.log" } ],
"severity": "INFO"
}
]
}
}
Dienst starten und überprüfen
Konfiguration testen
- sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
Dienst mit der neuen Konfiguration starten und überprüfen
- sudo systemctl restart kea-dhcp4-server
- sudo systemctl status kea-dhcp4-server
Dienst beim Systemstart automatisch aktivieren
- sudo systemctl enable kea-dhcp4-server
Kontrolle ob der Port geöffnet ist
- ss -lnup
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
UNCONN 0 0 0.0.0.0:67 0.0.0.0:* users:(("kea-dhcp4",pid=XXXX,fd=X))
Der Client
- Startet nun den grafischen Client im LAN
Logs
Ab Debian 12
Die letzten 100 Zeilen und neue Nachrichten anschauen
- journalctl -fn100 -u kea-dhcp4-server
Alternativ die Kea-spezifische Logdatei verwenden
- tail -f /var/log/kea/kea-dhcp4.log
Lease-Verwaltung
Aktive Leases anzeigen
- sudo cat /var/lib/kea/dhcp4.leases
Oder mit dem Kea Shell Tool (falls installiert)
- sudo apt install kea-ctrl-agent
Statische IP-Adressen (Reservierungen)
Statische IP-Adressen werden in Kea als "reservations" innerhalb des Subnets definiert. Diese befinden sich bereits in der Hauptkonfiguration (siehe oben).
MAC-Adresse eines Geräts herausfinden
- ip link show
- oder für eine spezifische Schnittstelle:
- ip link show enp0s3
Hinweise zu Reservierungen
Die reservierten IP-Adressen sollten außerhalb des dynamischen Pools liegen Nach Änderungen an den Reservierungen muss der Dienst neu gestartet werden
- sudo systemctl restart kea-dhcp4-server
Alternativ können Reservierungen auch in einer separaten Datei gespeichert werden (siehe erweiterte Konfiguration)
Den Client Eintragen
"reservations": [
{
"hw-address": "08:00:27:5d:76:5d",
"ip-address": "172.26.2XX.99",
"hostname": "client"
}
]
Wichtige Unterschiede zu ISC DHCP
Kea verwendet JSON-Konfiguration statt ISC-Format Die Lease-Datenbank kann in verschiedenen Backends gespeichert werden (memfile, MySQL, PostgreSQL) Kea bietet eine REST-API zur Verwaltung (über kea-ctrl-agent) Modernere Architektur mit besserer Performance bei vielen Clients
Konfigurationsprüfung
Vor jedem Neustart empfiehlt es sich, die Syntax zu prüfen
- sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
Neu starten
- sudo systemctl restart kea-dhcp4-server.service
Globale vs. Subnet-spezifische Optionen
Hierarchie der Optionen
Kea unterstützt verschiedene Ebenen für DHCP-Optionen:
Globale Ebene - gelten für alle Subnetze (im Hauptbereich "Dhcp4")
Subnet-Ebene - gelten nur für ein bestimmtes Subnet
Pool-Ebene - gelten nur für einen bestimmten Pool
Host-Reservierung-Ebene - gelten nur für einen bestimmten Host
Spezifischere Optionen überschreiben allgemeinere Optionen.
Beispiel: Globale Optionen
{
"Dhcp4": {
"option-data": [
{ "name": "domain-name-servers", "data": "10.88.1XX.21, 8.8.8.8" },
{ "name": "domain-name", "data": "it1XX.int" },
{ "name": "domain-search", "data": "it1XX.int, beispiel.de, firma.local" }
],
"subnet4": [
{
"subnet": "172.16.1XX.0/24",
"option-data": [ { "name": "routers", "data": "172.16.1XX.1" } ]
}
]
}
}
Beispiel: Subnet überschreibt globale Option
{
"Dhcp4": {
"option-data": [
{ "name": "domain-name-servers", "data": "10.88.1XX.21" }
],
"subnet4": [
{
"subnet": "172.16.1XX.0/24",
"option-data": [
{ "name": "routers", "data": "172.16.1XX.1" },
{ "name": "domain-name-servers", "data": "172.16.1XX.53" }
]
}
]
}
}
In diesem Beispiel verwendet das Subnet 172.16.1XX.0/24 den DNS-Server 172.16.1XX.53 statt des globalen 10.88.1XX.21.