KEA DHCP-Relay-Server - Netzwerk und Serveradministration

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen


Was ist ein DHCP-Relay?

  • DHCP-Relay ist eine Funktion, um DHCP über Netzgrenzen (Broadcastdomäne) hinaus nutzen zu können.
  • Damit wird die Notwendigkeit der Bereitstellung eines DHCP-Servers in jedem Subnetz, in dem sich DHCP-Clients befinden, vermieden.
  • Die DHCP-Relay-Funktion wird meist durch den Router selbst erbracht.
  • Dabei werden Client-seitig mittels Broadcast verschickte DHCP-Anfragen durch den DHCP-Relay empfangen und mittels Unicast einem oder mehreren DHCP-Servern zugestellt.
  • Der DHCP-Relay-Agent wird funktional auf der Schnittstelle des Routers platziert.

Wichtiger Hinweis zu ISC DHCP

  • ISC DHCP ist End-of-Life (EOL) seit Ende 2022
  • Kea DHCP bietet selbst keinen Relay-Agent
  • Empfohlene moderne Alternative: dnsmasq als DHCP-Relay
  • dnsmasq unterstützt sowohl DHCPv4 als auch DHCPv6 Relay

Vorarbeiten

  • Der Kea DHCP Server muss die Netze hinter dem Router bedienen

Netze einfügen auf dem Kea DHCP Server

  • sudo vim /etc/kea/kea-dhcp4.conf
  • Mehrere Subnetze werden im subnet4-Array definiert:
{
  "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": "10.88.1XX.0/24",
        "pools": [
          {
            "pool": "10.88.1XX.50 - 10.88.1XX.100"
          }
        ],
        "option-data": [
          {
            "name": "routers",
            "data": "10.88.1XX.1"
          }
        ]
      },
      {
        "subnet": "10.1XX.1.0/24",
        "pools": [
          {
            "pool": "10.1XX.1.50 - 10.1XX.1.100"
          }
        ],
        "option-data": [
          {
            "name": "routers",
            "data": "10.1XX.1.1"
          }
        ]
      }
    ],
    "loggers": [
      {
        "name": "kea-dhcp4",
        "output_options": [
          {
            "output": "/var/log/kea/kea-dhcp4.log"
          }
        ],
        "severity": "INFO"
      }
    ]
  }
}

Konfiguration testen und Dienst neu starten:

  • sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
  • sudo systemctl restart kea-dhcp4-server

Installation auf dem Router (Firewall)

  • apt install dnsmasq

Hinweis: dnsmasq ist ein leichtgewichtiger DNS- und DHCP-Server, der auch DHCP-Relay-Funktionalität bietet und als moderne Alternative zum EOL ISC DHCP Relay dient.

Konfiguration von dnsmasq als DHCP-Relay

DHCP-Relay konfigurieren
  • sudo vim /etc/dnsmasq.conf
# DHCP Server deaktivieren (nur Relay nutzen)
no-dhcp-interface=

# DHCP-Relay konfigurieren
# Syntax: dhcp-relay=<lokale Adresse>,<Server Adresse>[,<Interface>]

# Relay für enp0s8
dhcp-relay=10.88.1XX.1,172.16.1XX.2,enp0s8

# Relay für enp0s9
dhcp-relay=10.1XX.1.1,172.16.1XX.2,enp0s9

# Optional: weitere Interfaces
# dhcp-relay=<lokale IP>,172.16.1XX.2,enp0s10

# Logging aktivieren (optional)
log-dhcp
log-queries

Erklärung der Parameter

  • Lokale Adresse: IP-Adresse des Interfaces auf dem Router, auf dem DHCP-Anfragen empfangen werden
  • Server Adresse: IP-Adresse des Kea DHCP Servers (muss eine IP-Adresse sein, kein Hostname)
  • Interface: (Optional) Interface-Name zur zusätzlichen Sicherheit - akzeptiert nur Antworten auf diesem Interface

Alternative: Minimale Konfiguration

Falls dnsmasq bereits läuft und nur Relay-Funktionalität hinzugefügt werden soll:

  • sudo vim /etc/dnsmasq.d/dhcp-relay.conf
# DNS-Funktionalität deaktivieren falls nicht benötigt
port=0

# DHCP-Relay
dhcp-relay=10.88.1XX.1,172.16.1XX.2,enp0s8
dhcp-relay=10.1XX.1.1,172.16.1XX.2,enp0s9

log-dhcp

Start

Konfiguration testen

  • sudo dnsmasq --test

Dienst starten

  • sudo systemctl restart dnsmasq
  • sudo systemctl enable dnsmasq

Check

  • sudo systemctl status dnsmasq
● dnsmasq.service - dnsmasq - A lightweight DHCP and caching DNS server
     Loaded: loaded (/lib/systemd/system/dnsmasq.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-10-20 14:30:15 CET; 2min ago
   Main PID: 1234 (dnsmasq)
      Tasks: 1 (limit: 2337)
     Memory: 2.5M
        CPU: 15ms
     CGroup: /system.slice/dnsmasq.service
             └─1234 /usr/sbin/dnsmasq -x /run/dnsmasq/dnsmasq.pid -u dnsmasq -7 /etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new --local-service

Oct 20 14:30:15 firewall systemd[1]: Starting dnsmasq - A lightweight DHCP and caching DNS server...
Oct 20 14:30:15 firewall dnsmasq[1234]: started, version 2.89 cachesize 150
Oct 20 14:30:15 firewall dnsmasq[1234]: DHCP relay from 10.88.1XX.1 to 172.16.1XX.2
Oct 20 14:30:15 firewall dnsmasq[1234]: DHCP relay from 10.1XX.1.1 to 172.16.1XX.2
Oct 20 14:30:15 firewall systemd[1]: Started dnsmasq - A lightweight DHCP and caching DNS server.
  • Port-Check
  • ss -lnup | grep 67
UNCONN 0      0           0.0.0.0:67        0.0.0.0:*    users:(("dnsmasq",pid=1234,fd=5))

Logs

Live-Logs anzeigen

  • journalctl -fn100 -u dnsmasq

Oder direkt im syslog

  • tail -f /var/log/syslog | grep dnsmasq

Wichtige Hinweise

  • dnsmasq kann nicht gleichzeitig als DHCP-Server und DHCP-Relay auf demselben Interface arbeiten - die Relay-Funktion hat Vorrang
  • Für produktive Umgebungen sollte die Konfiguration in /etc/dnsmasq.d/ erfolgen
  • dnsmasq unterstützt sowohl DHCPv4 als auch DHCPv6 Relay
  • Die Server-Adresse muss eine IP sein, keine Domain
  • Mehrere Relay-Ziele können durch mehrfache dhcp-relay-Direktiven definiert werden

Troubleshooting

DHCP-Relay funktioniert nicht

Routing prüfen:

  • ip route

Firewall-Regeln prüfen:

  • sudo iptables -L -v -n | grep 67
  • sudo iptables -L -v -n | grep 68

DHCP-Traffic auf dem Router mitschneiden:

  • sudo tcpdump -i enp0s8 -n port 67 or port 68

dnsmasq startet nicht

Konfiguration auf Syntaxfehler prüfen:

  • sudo dnsmasq --test

Prüfen ob Port 53 oder 67 bereits belegt:

  • sudo ss -lnup | grep -E ':(53|67)'

Empfehlung

Für eine moderne, zukunftssichere Infrastruktur:

  • Kea DHCP Server zentral auf einem dedizierten Server
  • dnsmasq als DHCP-Relay auf den Routern/Firewalls
  • Vorteil: dnsmasq wird aktiv gepflegt und ist in allen modernen Linux-Distributionen verfügbar
  • ISC DHCP Relay sollte nicht mehr verwendet werden (EOL)