<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=OPNsense_KEA_HA</id>
	<title>OPNsense KEA HA - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=OPNsense_KEA_HA"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=OPNsense_KEA_HA&amp;action=history"/>
	<updated>2026-09-09T07:49:27Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=OPNsense_KEA_HA&amp;diff=73251&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „= Kea DHCP im HA-Cluster = * Dieser Artikel setzt einen funktionierenden CARP-Cluster nach OPNsense HA Umsetzung voraus * Ziel: ein DHCP-Dienst, der einen…“</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=OPNsense_KEA_HA&amp;diff=73251&amp;oldid=prev"/>
		<updated>2026-09-03T18:00:32Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „= Kea DHCP im HA-Cluster = * Dieser Artikel setzt einen funktionierenden CARP-Cluster nach &lt;a href=&quot;/index.php/OPNsense_HA_Umsetzung&quot; title=&quot;OPNsense HA Umsetzung&quot;&gt;OPNsense HA Umsetzung&lt;/a&gt; voraus * Ziel: ein DHCP-Dienst, der einen…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Kea DHCP im HA-Cluster =&lt;br /&gt;
* Dieser Artikel setzt einen funktionierenden CARP-Cluster nach [[OPNsense HA Umsetzung]] voraus&lt;br /&gt;
* Ziel: ein DHCP-Dienst, der einen Ausfall des Masters übersteht, ohne dass Clients ihre Adresse verlieren&lt;br /&gt;
&lt;br /&gt;
== Warum nicht über das normale HA? ==&lt;br /&gt;
* Das OPNsense-HA besteht aus drei Mechanismen: CARP für die virtuellen IPs, pfsync für die Firewall-States und XMLRPC für die Konfiguration&lt;br /&gt;
* XMLRPC überträgt ausschließlich '''Konfiguration''', keine Betriebsdaten&lt;br /&gt;
* Vergebene Adressen (Leases) sind Betriebsdaten – für sie gibt es im OPNsense-HA kein Gegenstück zu pfsync&lt;br /&gt;
* CARP meldet einem Knoten auch nicht, dass er die Rolle übernommen hat; das passiert im Kernel auf Interface-Ebene, die Dienste darüber merken davon nichts&lt;br /&gt;
* Deshalb bringt Kea eine eigene HA-Logik mit: eigener Kanal über HTTP, eigene Rollen, eigener Heartbeat&lt;br /&gt;
* '''dnsmasq hat das nicht.''' Dort bleibt nur, den DHCP-Dienst auf einen Knoten zu beschränken oder die Pools aufzuteilen&lt;br /&gt;
&lt;br /&gt;
== Betriebsmodell ==&lt;br /&gt;
* Kea arbeitet im Modus '''Hot-Standby''': der Primary vergibt die Adressen, der Standby wartet und hält die Lease-Daten mit&lt;br /&gt;
* Fällt der Primary aus, übernimmt der Standby und vergibt aus demselben Pool weiter&lt;br /&gt;
* Kommt der Primary zurück, übernimmt er wieder&lt;br /&gt;
&lt;br /&gt;
== Vorbereitung ==&lt;br /&gt;
* '''dnsmasq als DHCP-Server abschalten''' – sonst antworten zwei Server im selben Segment&lt;br /&gt;
** Services =&amp;gt; Dnsmasq DNS &amp;amp; DHCP =&amp;gt; General: DHCP-Ranges entfernen&lt;br /&gt;
* Beide Knoten müssen dieselbe OPNsense-Version haben&lt;br /&gt;
* Die HA-Kommunikation läuft über das SYN-Netz (100.64.64.0/30), dort erlaubt die vorhandene Allow-Regel bereits allen Verkehr&lt;br /&gt;
&lt;br /&gt;
== Ports ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Port !! Verwendung&lt;br /&gt;
|-&lt;br /&gt;
| 8000 || Control Agent (lokale Steuerung des Dienstes)&lt;br /&gt;
|-&lt;br /&gt;
| 8001 || Peer-Kommunikation zwischen den Knoten&lt;br /&gt;
|}&lt;br /&gt;
* '''Die beiden Ports müssen unterschiedlich sein.''' Wird für die Peers derselbe Port wie für den Control Agent eingetragen, startet Kea zwar, findet den Partner aber nicht.&lt;br /&gt;
&lt;br /&gt;
= Control Agent (beide Firewalls) =&lt;br /&gt;
* Services =&amp;gt; Kea DHCP =&amp;gt; Control Agent&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Wert&lt;br /&gt;
|-&lt;br /&gt;
| Enabled || aktiviert&lt;br /&gt;
|-&lt;br /&gt;
| Port || 8000&lt;br /&gt;
|}&lt;br /&gt;
* Anschließend '''Apply'''&lt;br /&gt;
&lt;br /&gt;
= DHCPv4 (Master Firewall) =&lt;br /&gt;
* Services =&amp;gt; Kea DHCP =&amp;gt; KEA DHCPv4&lt;br /&gt;
* Sämtliche Konfiguration erfolgt auf dem Master und wird später zum Backup übertragen&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Wert&lt;br /&gt;
|-&lt;br /&gt;
| Enabled || aktiviert&lt;br /&gt;
|-&lt;br /&gt;
| Interfaces || LAN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Subnetz ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Wert&lt;br /&gt;
|-&lt;br /&gt;
| Subnet || 192.168.1.0/24&lt;br /&gt;
|-&lt;br /&gt;
| Pools || 192.168.1.100 - 192.168.1.150&lt;br /&gt;
|-&lt;br /&gt;
| Option: routers || 192.168.1.3&lt;br /&gt;
|-&lt;br /&gt;
| Option: domain-name-servers || 192.168.1.3&lt;br /&gt;
|}&lt;br /&gt;
;Achtung&lt;br /&gt;
* Als Router und DNS muss die '''LAN-VIP 192.168.1.3''' verteilt werden, nicht die 192.168.1.1&lt;br /&gt;
* Wird die echte Adresse des Masters verteilt, ist der Client beim Ausfall des Masters offline – obwohl der DHCP-Dienst hochverfügbar ist&lt;br /&gt;
&lt;br /&gt;
= High Availability (Master Firewall) =&lt;br /&gt;
* Services =&amp;gt; Kea DHCP =&amp;gt; Settings =&amp;gt; High Availability&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Wert&lt;br /&gt;
|-&lt;br /&gt;
| Enabled || aktiviert&lt;br /&gt;
|-&lt;br /&gt;
| This server name || opns-ha1&lt;br /&gt;
|-&lt;br /&gt;
| Role || primary&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Peers ==&lt;br /&gt;
* Im Reiter '''Peers''' werden '''beide''' Knoten eingetragen, auch der eigene&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Name !! Role !! URL&lt;br /&gt;
|-&lt;br /&gt;
| opns-ha1 || primary || http://100.64.64.1:8001/&lt;br /&gt;
|-&lt;br /&gt;
| opns-ha2 || standby || http://100.64.64.2:8001/&lt;br /&gt;
|}&lt;br /&gt;
* Die Namen müssen exakt dem entsprechen, was auf dem jeweiligen Knoten unter '''This server name''' steht&lt;br /&gt;
&lt;br /&gt;
= Konfiguration übertragen =&lt;br /&gt;
* System =&amp;gt; High Availability =&amp;gt; Settings: den Dienst '''Kea DHCP''' zusätzlich in die Services-Liste aufnehmen und speichern&lt;br /&gt;
* System =&amp;gt; High Availability =&amp;gt; Status =&amp;gt; '''Synchronize and reconfigure all'''&lt;br /&gt;
&lt;br /&gt;
= High Availability (Backup Firewall) =&lt;br /&gt;
* Nach dem Sync liegt die Konfiguration auf dem Backup, die Rolle muss dort aber von Hand gesetzt werden&lt;br /&gt;
* Services =&amp;gt; Kea DHCP =&amp;gt; Settings =&amp;gt; High Availability&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Wert&lt;br /&gt;
|-&lt;br /&gt;
| This server name || opns-ha2&lt;br /&gt;
|-&lt;br /&gt;
| Role || standby&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Funktionstest =&lt;br /&gt;
* Auf dem Client eine Adresse anfordern:&lt;br /&gt;
 ipconfig /release&lt;br /&gt;
 ipconfig /renew&lt;br /&gt;
 ipconfig /all&lt;br /&gt;
* Gateway und DNS müssen '''192.168.1.3''' sein&lt;br /&gt;
* Master in den Wartungsmodus versetzen: Interfaces =&amp;gt; Virtual IPs =&amp;gt; Status =&amp;gt; '''Enter Persistent CARP Maintenance Mode'''&lt;br /&gt;
* Erneut '''release''' und '''renew''' auf dem Client – die Adresse muss weiterhin vergeben werden, jetzt vom Backup&lt;br /&gt;
* Zweiter Test: Master hart ausschalten und dasselbe prüfen&lt;br /&gt;
&lt;br /&gt;
= Debugging =&lt;br /&gt;
== Lauschen die Dienste? ==&lt;br /&gt;
* Auf beiden Knoten:&lt;br /&gt;
 sockstat -4 -l | grep 800&lt;br /&gt;
* Erwartet werden Einträge für 8000 und 8001&lt;br /&gt;
&lt;br /&gt;
== Erreicht der Master den Partner? ==&lt;br /&gt;
 curl http://100.64.64.2:8001/&lt;br /&gt;
&lt;br /&gt;
== Log ==&lt;br /&gt;
 tail -f /var/log/kea/latest.log&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Beobachtung !! Ursache&lt;br /&gt;
|-&lt;br /&gt;
| Kea startet, HA bleibt im Zustand &amp;quot;communication-recovery&amp;quot; || Peer nicht erreichbar – Port, IP oder Regel auf dem SYN-Interface prüfen&lt;br /&gt;
|-&lt;br /&gt;
| Partner wird nicht erkannt, obwohl erreichbar || Name im Peer-Eintrag stimmt nicht mit &amp;quot;This server name&amp;quot; überein&lt;br /&gt;
|-&lt;br /&gt;
| Beide Knoten vergeben Adressen || dnsmasq läuft noch als DHCP-Server&lt;br /&gt;
|-&lt;br /&gt;
| Client bekommt 192.168.1.1 als Gateway || Option &amp;quot;routers&amp;quot; zeigt nicht auf die VIP&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>