OPNsense - Dnsmasq DHCP-Server
Auf einen Blick
| Gilt für | OPNsense 26.1 und 26.7 (Services → Dnsmasq DNS & DHCP, im Kern enthalten), Dnsmasq 2.93 |
|---|---|
| Bereich | IT-Security |
| Dauer | ca. 30 Minuten (DHCPv4 mit DNS-Registrierung für mehrere Netze) |
| Rechte | Administrator (OPNsense-WebUI) |
| Stand | Oktober 2026 (OPNsense 26.7.5) |
Dnsmasq in OPNsense ist seit Version 26.1 der Standard-DHCP-Server der Firewall: Er vergibt IPv4- und IPv6-Adressen, sendet Router Advertisements und registriert die Namen der Clients automatisch im DNS. Zusammen mit Unbound als Resolver entsteht so die von OPNsense empfohlene Kombination, in der jedes Gerät unter einem sprechenden Namen wie nas01.lan.internal erreichbar ist.
Dieser Artikel konzentriert sich auf DHCP mit Dnsmasq (Stand Oktober 2026): Abgrenzung zu Kea und ISC, Grundeinstellungen, DHCP-Bereiche pro VLAN, Reservierungen, DHCP-Optionen und Tags, PXE-Boot, DHCPv6 und Router Advertisements, Hochverfügbarkeit mit zwei Firewalls, DHCP-Relay sowie die Migration vom alten ISC-DHCP.
Dnsmasq, Kea oder ISC-DHCP?
Mit OPNsense 26.1 hat sich die DHCP-Landschaft geändert: ISC-DHCP ist in das Plugin os-isc-dhcp gewandert (bei Upgrades automatisch installiert, bei Neuinstallationen nicht mehr), und Dnsmasq ist nun Standard für DHCPv4, DHCPv6 und Router Advertisements.
| Kriterium | Dnsmasq | Kea DHCP | ISC-DHCP (Plugin) |
|---|---|---|---|
| Status | Standard seit 26.1, im Kern | im Kern | Legacy, upstream nicht mehr weiterentwickelt |
| Einsatzgröße | klein und mittel (laut OPNsense unter ca. 1.000 Clients) | groß, viele VLANs und Leases | bestehende Installationen |
| DNS-Registrierung der Clients | integriert (ohne Zusatzdienst) | per DDNS (RFC 2136, seit 26.1) an einen updatefähigen DNS-Server | über Unbound (nur IPv4) |
| Hochverfügbarkeit | getrennte Pools + Antwortverzögerung | Lease-Synchronisation zwischen zwei Servern | Failover-Peer |
| Prefix Delegation (DHCPv6-PD) | nein | ja | ja |
| Konfiguration | einfach, Tags für flexible Optionen | umfangreicher | klassisch |
Die OPNsense-Dokumentation empfiehlt im Zweifel Dnsmasq. Wer IPv6-Präfixe an nachgelagerte Router delegieren muss oder sehr große Umgebungen mit synchronisierten Leases betreibt, greift zu Kea DHCP.

Menü und Aufbau
Unter Services → Dnsmasq DNS & DHCP:
| Menüpunkt | Zweck |
|---|---|
| General | Dienst, Schnittstellen, Port, DHCP-Grundeinstellungen, Router Advertisements |
| Domains / Hosts | Weiterleitung von Domains bzw. Host-Einträge und DHCP-Reservierungen (inklusive CSV-Import/-Export) |
| DHCP ranges | Adressbereiche pro Schnittstelle (IPv4, IPv6, RA) |
| DHCP options | zusätzliche Optionen (z. B. NTP, TFTP, Option 121) – gesetzt oder als Merkmal ausgewertet |
| DHCP boot | PXE-Boot-Dateien und -Server |
| DHCP tags | Kennzeichnungen, mit denen Optionen gezielt bestimmten Clients zugeordnet werden |
| Leases | aktuelle Adressvergaben (auch als Dashboard-Widget) |
| Log File | Meldungen von DHCP, RA und DNS |
Schritt 1: Grundeinstellungen und Zusammenspiel mit Unbound
Unbound bleibt der DNS-Server für die Clients; Dnsmasq liefert nur die Namen der DHCP-Clients zu. Dafür läuft Dnsmasq auf einem anderen Port. Services → Dnsmasq DNS & DHCP → General:
| Einstellung | Wert / Empfehlung |
|---|---|
| Enable | aktiv |
| Interface | die Schnittstellen, die DHCP erhalten sollen, z. B. LAN, GUEST (registriert auch die Firewall-Regeln) |
| Listen port | 53053 – Port 53 bleibt für Unbound frei
|
| Do not forward to system defined DNS servers | aktiv – Dnsmasq soll keine allgemeinen DNS-Anfragen weiterleiten |
| DHCP FQDN | aktiv – Clients werden mit Domain registriert (smartphone.lan.internal), und Dnsmasq antwortet für diese Domains autoritativ
|
| DHCP default domain | z. B. internal oder leer (Systemdomain)
|
| DHCP register firewall rules | aktiv – erlaubt DHCP-Verkehr auf den gewählten Schnittstellen automatisch |
| DHCP authoritative | aktiv, wenn Dnsmasq der einzige DHCP-Server im Netz ist (beschleunigt die Adressvergabe nach Neustarts der Clients) |
In Unbound unter Services → Unbound DNS → Query Forwarding anschließend für jede Domain und jede Reverse-Zone einen Eintrag auf 127.0.0.1, Port 53053 anlegen – Details im Artikel OPNsense - Unbound DNS Resolver.
Als interne Domain eignet sich .internal (von IANA/ICANN für private Netze reserviert) oder eine nicht öffentlich genutzte Subdomain der eigenen Domain, z. B. lan.internal.example.com.
Schritt 2: DHCP-Bereiche pro Netz
Services → Dnsmasq DNS & DHCP → DHCP ranges – ein Eintrag pro Schnittstelle bzw. VLAN:
| Interface | Start address | End address | Domain |
|---|---|---|---|
| LAN | 192.168.1.100 |
192.168.1.199 |
lan.internal
|
| GUEST | 192.168.10.100 |
192.168.10.199 |
guest.internal
|
| VOICE | 192.168.20.100 |
192.168.20.199 |
voice.internal
|
Ohne weitere Konfiguration erhalten die Clients automatisch die wichtigsten Optionen: Router (Option 3) und DNS-Server (Option 6) sind jeweils die Adresse der Firewall auf der empfangenden Schnittstelle, dazu der Domain-Name (Option 15) des Bereichs. Weitere Felder:
- Lease time – Standard-Gültigkeit in Sekunden (für Gäste-WLAN eher kurz, z. B. 3600).
- Subnet mask – leer lassen (wird aus der Schnittstelle berechnet); nur bei DHCP-Relay angeben, da Dnsmasq das entfernte Netz sonst nicht kennt.
- Mode: static (erweitert) – der Bereich vergibt nur Reservierungen, keine Adressen an unbekannte Clients.
- Disable HA sync – Bereich nicht auf die zweite Firewall übertragen (siehe Hochverfügbarkeit).
Schritt 3: Reservierungen (feste Adressen)
Reservierungen werden unter Hosts gepflegt:
- Host:
drucker-eg - IP addresses:
192.168.1.150(für Dual Stack zusätzlich z. B.::1234) - Hardware addresses: MAC-Adresse des Geräts (mehrere möglich, z. B. LAN und WLAN)
- Client identifier: für IPv6-Reservierungen die DUID des Clients – eine MAC-Adresse genügt bei DHCPv6 nicht.
Die reservierte Adresse darf innerhalb des dynamischen Bereichs liegen – Dnsmasq vergibt sie dann nicht mehr an andere Clients. Für eine korrekte DNS-Registrierung sollte sie im Netz eines vorhandenen DHCP-Bereichs liegen. Mit Ignore werden DHCP-Anfragen eines Geräts bewusst nicht beantwortet, Tag [set] ordnet ihm eigene Optionen zu.
Massenimport: Über die Schaltflächen Import csv / Export as csv der Hosts-Liste lassen sich viele Reservierungen auf einmal pflegen; das Format ist mit den CSV-Exporten von ISC-DHCP und Kea abgestimmt.
Schritt 4: DHCP-Optionen und Tags
Jeder Client erhält automatisch ein Tag mit dem Namen der Schnittstelle. Optionen können daher pro Schnittstelle (Feld Interface), pro selbst definiertem Tag oder global gesetzt werden. Unter DHCP options gibt es zwei Typen:
- Set – Option an passende Clients senden, z. B. ntp-server[42] mit der Adresse eines Zeitservers oder classless-static-route[121] für zusätzliche Routen. Mit Force wird die Option auch gesendet, wenn der Client sie nicht anfordert.
- Match – erkennt Clients an einer Option, die sie selbst senden, und setzt ein Tag.
Beispiel VoIP-Telefone:
- DHCP tags: Tag
voipanlegen. - DHCP options, Typ Match: Option vendor-class[60], Wert = Hersteller-Kennung der Telefone, Tag [set] =
voip. - DHCP options, Typ Set: Option tftp-server-address[150] (bzw. Option 66), Wert = Provisionierungsserver, Tag =
voip.
So erhalten nur die Telefone die Provisionierungsadresse – alle anderen Clients im selben Netz nicht.
PXE-Boot
Für Netzwerk-Installationen (z. B. Windows Deployment, iPXE) unterscheidet Dnsmasq anhand der Option client-arch[93] zwischen BIOS- und UEFI-Clients:
- Tags
IsBIOSundIsEFIanlegen. - Zwei Match-Optionen auf client-arch[93]: Wert
0→ IsBIOS, Wert7→ IsEFI. - Unter DHCP boot je einen Eintrag mit Tag, Filename (z. B.
undionly.kpxebzw.snponly.efi), Servername und Server address des TFTP-Servers.
Schritt 5: DHCPv6 und Router Advertisements
DHCPv6 kennt keine Router-Option – das Standard-Gateway erfahren IPv6-Clients ausschließlich über Router Advertisements (RA). Ein weiterer DHCP-Bereich auf derselben Schnittstelle genügt:
- Start/End address:
::1000bis::2000, Constructor: LAN – die Adressen werden aus dem (auch dynamischen) Präfix der Schnittstelle gebildet. - RA mode: slaac (SLAAC-Adresse plus DHCPv6-Adresse – nötig für IPv6-Reservierungen) oder ra-stateless (nur SLAAC, DNS-Server per DHCPv6/RDNSS).
- Bei eigener Domain im erweiterten Modus Domain type = Interface setzen, sonst landen die Namen in der Systemdomain.
- Unter General Router advertisements aktivieren.
Der DNS-Server wird automatisch per RDNSS und DHCPv6 verteilt. Prefix Delegation an nachgelagerte Router beherrscht Dnsmasq nicht – dafür Kea verwenden.
Hochverfügbarkeit mit zwei Firewalls (CARP)
Dnsmasq synchronisiert keine Leases. Für kleinere HA-Cluster empfiehlt die OPNsense-Dokumentation getrennte Pools mit verzögerter Antwort des Backups:
| Einstellung | Master | Backup |
|---|---|---|
| General → DHCP reply delay | leer (antwortet sofort) | 10 Sekunden
|
| General → Disable HA sync | aktiv | aktiv |
| DHCP range LAN | 192.168.1.100–.199, Disable HA sync |
192.168.1.200–.220, Disable HA sync
|
| Optionen router[3] / dns-server[6] | CARP-Adresse des LAN | CARP-Adresse des LAN |
Der Master beantwortet alle Anfragen; fällt er aus, übernimmt nach zehn Sekunden das Backup aus seinem eigenen, nicht überlappenden Pool. Reservierungen können weiter synchronisiert werden – beide Server vergeben dann dieselbe feste Adresse. Gateway und DNS müssen per Option auf die CARP-Adresse zeigen, sonst erhalten die Clients die physische Adresse der jeweiligen Firewall. Für IPv6 sind keine getrennten Pools nötig (Duplicate Address Detection), die Router Advertisements werden über RA priority und RA router lifetime gesteuert. Wer Leases zwischen beiden Firewalls synchronisieren möchte, nutzt stattdessen Kea DHCP im hot-standby-Modus.
DHCP-Relay
Steht der DHCP-Server zentral und die Clients liegen hinter einem anderen Router oder einer anderen Firewall, leitet ein DHCP-Relay (z. B. Services → DHCRelay auf einer Filial-OPNsense oder ein Layer-3-Switch) die Anfragen weiter. Im DHCP-Bereich für das entfernte Netz muss dann die Subnet mask gesetzt werden, und die Firewall-Regeln müssen DHCP (UDP 67) vom Relay zulassen, da es sich nicht um eine lokal angebundene Schnittstelle handelt.
Migration von ISC-DHCP
- Auf der bisherigen Konfiguration die statischen Zuordnungen als CSV exportieren (ISC-DHCP-Plugin bzw. Kea).
- In Dnsmasq die DHCP ranges pro Schnittstelle neu anlegen und in der Hosts-Liste das CSV importieren.
- Eigene Optionen (NTP, TFTP, Option 121 usw.) unter DHCP options nachbauen.
- In einem Wartungsfenster ISC-DHCP auf den Schnittstellen deaktivieren, Dnsmasq aktivieren und anwenden; Clients erhalten bei der nächsten Erneuerung ihre Adresse von Dnsmasq (mit DHCP authoritative auch schneller).
- Unbound: die Optionen Register ISC DHCP4 Leases und Register DHCP Static Mappings deaktivieren und stattdessen das Query Forwarding auf Dnsmasq einrichten.
- Nach erfolgreichem Umstieg das Plugin os-isc-dhcp entfernen.
Sicherheitsempfehlungen
- DHCP nur auf den gewünschten Schnittstellen anbieten; Schnittstellen, die nur DNS brauchen, unter Interface [no DHCP] ausnehmen.
- DHCP max leases (erweitert) als Schutz gegen Clients, die massenhaft Adressen anfordern.
- In Gäste- und IoT-Netzen kurze Lease-Zeiten und eigene Domains verwenden, damit Namen nicht mit dem Firmennetz kollidieren.
- Fremde DHCP-Server im Netz (Rogue DHCP) per DHCP Snooping auf den Switches unterbinden – die Firewall allein kann das nicht.
- Seit 26.1.8 registriert Dnsmasq keine Clients mit dem Namen wpad mehr (Schutz gegen die Schwachstelle CERT VU#598349). Für WPAD-Einträge feste Host Overrides in Unbound verwenden.
- DHCP-Logs bei Bedarf an ein SIEM übertragen, z. B. mit dem Wazuh-Agent; Log DHCP options and tags nur zur Fehlersuche aktivieren.
Typische Probleme und Lösungen
| Symptom | Ursache und Lösung |
|---|---|
| Dnsmasq startet nicht | Port 53 doppelt belegt (Listen port nicht auf 53053 gesetzt) oder ISC/Kea auf denselben Schnittstellen aktiv – Log File prüfen. |
| Clients erhalten keine Adresse | Schnittstelle nicht unter Interface gewählt, DHCP register firewall rules aus und keine eigene Regel, Bereich auf static gesetzt oder Pool erschöpft. |
Namen wie nas01.lan.internal werden nicht aufgelöst |
Client sendet keinen Hostnamen, DHCP FQDN aus, Domain im Bereich fehlt oder Query Forwarding in Unbound (inklusive Reverse-Zone) fehlt. |
| Reservierung greift nicht | falsche MAC-Adresse (z. B. zufällige WLAN-MAC des Smartphones deaktivieren) bzw. bei IPv6 DUID statt MAC verwenden. |
| Clients hinter einem Relay erhalten nichts | Subnet mask im Bereich fehlt, Firewall-Regel für UDP 67 vom Relay fehlt. |
| IPv6-Clients ohne Gateway | Router Advertisements nicht aktiviert oder zweiter RA-Dienst aktiv. |
| HA: Clients erhalten nach Failover falsches Gateway | Optionen router[3] und dns-server[6] mit der CARP-Adresse fehlen. |
Fazit
Dnsmasq macht DHCP auf der OPNsense einfach und robust: Bereiche pro VLAN, automatische DNS-Registrierung, Reservierungen per CSV, flexible Optionen über Tags und sogar PXE-Boot – ohne zusätzliche Dienste. Zusammen mit Unbound entsteht eine saubere Namensauflösung für alle Geräte. Für sehr große Umgebungen, Prefix Delegation oder HA mit synchronisierten Leases bleibt Kea die passende Alternative.
Unterstützung von m.a.x. it
Sie möchten DHCP und DNS auf Ihrer OPNsense neu strukturieren oder vom alten ISC-DHCP auf Dnsmasq oder Kea umsteigen? m.a.x. it unterstützt Sie als OPNsense-Gold-Partner mit OPNsense-Firewall-Services von m.a.x. it und einer Managed Firewall von m.a.x. it.
Siehe auch
- OPNsense - Hochverfügbarkeit mit CARP und pfsync
- OPNsense - Kea DHCP mit Hochverfügbarkeit
- DHCP
- DNS
- OPNsense - Unbound DNS Resolver
- OPNsense - Eine kurze Einführung
- OPNsense - Plugin-Liste
- OPNsense - Wazuh-Agent
Links und Quellen
- OPNsense-Doku – Dnsmasq DNS & DHCP
- OPNsense-Doku – Kea DHCP
- Dnsmasq – Projektseite
- m.a.x. it – OPNsense-Firewall-Services
Über m.a.x. it Die m.a.x. Informationstechnologie AG ist seit über 30 Jahren IT-Partner mittelständischer und großer Unternehmen in München und bietet maßgeschneiderte Lösungen und Services in den Bereichen Cloud, Cybersecurity, Netzwerk, Windows, Linux und Softwareentwicklung. Sie haben eine Frage zu diesem Artikel oder brauchen Unterstützung?
