|
|
| (24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) |
| Zeile 1: |
Zeile 1: |
| == Einrichten eines DHCP-Servers auf Debian mit Kea ==
| | *[[Einrichten eines DHCP-Servers auf Debian mit Kea]] |
| | | *[[Einrichten eines DHCP-Servers auf Rocky mit Kea]] |
| === Installation ===
| |
| | |
| * sudo apt install kea-dhcp4-server
| |
| | |
| === Konfiguration der zu vergebenden Netzwerkparameter ===
| |
| | |
| Die Hauptkonfigurationsdatei von Kea ist im JSON-Format
| |
| * sudo vim /etc/kea/kea-dhcp4.conf
| |
| | |
| <syntaxhighlight lang="json">
| |
| {
| |
| "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.1XX.21"
| |
| },
| |
| {
| |
| "name": "domain-name",
| |
| "data": "it1XX.int"
| |
| },
| |
| {
| |
| "name": "domain-search",
| |
| "data": "it1XX.int, example.com"
| |
| }
| |
| ],
| |
|
| |
| "subnet4": [
| |
| {
| |
| "subnet": "172.16.1XX.0/24",
| |
| "pools": [
| |
| {
| |
| "pool": "172.16.1XX.50 - 172.16.1XX.100"
| |
| }
| |
| ],
| |
| "option-data": [
| |
| {
| |
| "name": "routers",
| |
| "data": "172.16.1XX.1"
| |
| }
| |
| ],
| |
| "reservations": [
| |
| {
| |
| "hw-address": "aa:bb:cc:dd:ee:ff",
| |
| "ip-address": "172.16.1XX.10",
| |
| "hostname": "server1"
| |
| },
| |
| {
| |
| "hw-address": "11:22:33:44:55:66",
| |
| "ip-address": "172.16.1XX.11",
| |
| "hostname": "server2"
| |
| }
| |
| ]
| |
| }
| |
| ],
| |
| "loggers": [
| |
| {
| |
| "name": "kea-dhcp4",
| |
| "output_options": [
| |
| {
| |
| "output": "/var/log/kea/kea-dhcp4.log"
| |
| }
| |
| ],
| |
| "severity": "INFO"
| |
| }
| |
| ]
| |
| }
| |
| }
| |
| </syntaxhighlight>
| |
| | |
| === 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
| |
| | |
| <pre>
| |
| 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))
| |
| </pre>
| |
| | |
| === 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).
| |
| | |
| ==== Beispiel für Reservierungen ====
| |
| | |
| <syntaxhighlight lang="json">
| |
| "reservations": [
| |
| {
| |
| "hw-address": "aa:bb:cc:dd:ee:ff",
| |
| "ip-address": "172.16.1XX.10",
| |
| "hostname": "server1"
| |
| },
| |
| {
| |
| "hw-address": "11:22:33:44:55:66",
| |
| "ip-address": "172.16.1XX.11",
| |
| "hostname": "server2"
| |
| }
| |
| ]
| |
| </syntaxhighlight>
| |
| | |
| ==== 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)
| |
| | |
| === DHCP Anfragen über die Kommandozeile ===
| |
| | |
| * apt install isc-dhcp-client
| |
| Bei den folgenden Befehlen kann man auch eine spezifische Netzwerkkarte angeben
| |
| | |
| ==== Neue IP-Adresse anfragen ====
| |
| | |
| * sudo dhclient enp0s3
| |
| | |
| ==== Lease der IP-Adresse freigeben ====
| |
| | |
| * sudo dhclient -r enp0s3
| |
| | |
| === 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
| |
| | |
| === 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.
| |