OPNsense, Cluster, HA, failover und carp

Aktualisiert: Mai 7

Die OPNsense arbeitet wunderbar als fehlertoleranter Firewall-Cluster zusammen.

In der Konfiguration ist es dazu notwendig, drei wichtige generelle Funktionselemente einzurichten:

  • CARP, um IP-Adressen auch im Falle eines Defekts eines OPNsense-Gerätes bereitzustellen

  • pfsync, damit die aktuellen offenen Sessions in der OPNsense-Firewall („FW sessions table)“ auf alle anderen Firewalls synchronisiert werden

  • XMLRPC sync, um die Konfig von der primären OPNsense auf die 2. OPNsense-Firewall zu synchronisieren

Mit diesen drei Konfigurationen wird die OPNsense zu einem robusten Cluster.


Wichtig: Diese drei Möglichkeiten können auf der OPNsense auch jeweils einzeln und unabhängig verwendet werden. 


CARP:

Common Address Redundancy Protocol (CARP) sorgt auf der OPNsense für die Verfügbarkeit von einer oder mehreren IPv4- bzw. IPv6-Adressen und stellt somit permanente „fail-safe“ IP-Adressen als default Gateway im LAN oder als „next hop“ für den Carrier im WAN bereit.


Diese virtuellen IPv4- und IPv6-Adressen lassen sich dann an der OPNsense (genau wie an andere CARP implementieren, wie pfsense oder Genugate/Genuscreen) als Services IP-Adressen für BGP, VPN-Einwahl nutzen.


OPNsense CARP Aktivitäten sind im wireshark dargestellt
OPNsense CARP Wireshark

Die OPNsense benutzt CARP standardkonform wie VRRP die Protokoll ID 112, setzt also direkt auf den IP-Layer (ohne TCP/UDP) auf.

Im Wireshark werden im CARP falsche CARP IP-Adressen angezeigt: dies ist kein OPNsense-Problem, sondern liegt an der Verschlüsslung. OPNsense fordert eine Verschlüsselung bei CARP, damit sind die Daten auch für Wireshark ohne Passwort nicht mehr auswertbar.

Ursprünglich wurde CARP vom OpenBSD-Team entwickelt, um (auch aus Lizenzgründen) unabhängig von VRRP und HSRP zu sein.


Wichtig: Um die Services hinter den virtuellen (Carp) IP-Adressen praktisch nutzen zu können, sind auf der OPNsense-Firewall natürlich die passenden Firewallregeln notwendig.


pfsync („packet filter synchronization“) synchronisiert auf den OPNsense-Firewalls die aktuellen dynamisch angelegten Regeln, als den „statefull“-Anteil der OPNsense-Firewall.

Baut ein Client beispielsweise eine durch die Firewall zugelassene Verbindung auf, so werden die Antwortpakete ebenso zugelassen. Dazu legt die OPNsense-Firewall wie jede andere „statefull firewall“ eine dynamische Firewall-Regel an. Genau diese Regeln gilt es zu synchronisieren, damit im Fehlerfall die andere OPNsense-Firewall die Sessions ohne Unterbrechung für die Clients übernehmen kann.


Die pfsync-Datenpakete mit den Sessioninformationen werden an die Multicast-Adresse 224.0.0.240 gesendet. Jede Änderung auf den beiden (oder mehreren) OPNsense-Firewalls werden als Updates über ein definiertes Interface gesendet, dieser Abgleich kann von jeder OPNsense-Firewall und damit bidirektional erfolgen. Somit haben alle OPNsense-Firwalls die gleichen Session-Table.


OPNsense pfsync Pakte sind im wireshark dargestellt
OPNsense pfsync Wireshark



Als drittes ist es bei der OPNsense möglich, die Konfiguration von einer Firewall auf die andere Firewall zu übertragen. Die Lösung dahinter:


XMLRPC sync

Die primäre OPNsense wird dazu per http/https auf die Backup OPNsense zugreifen und die XML-Datei mit den Konfigdaten dort einspielt.

Genau genommen erfolgt diese Synchronisation für jedes Softwaremodule separat. Welche Konfigelemente auf die Backup OPNsense-Firewall übertragen werden, wird im Webfrontend festgelegt.

Für diesen Sync empfiehlt es sich, einen separaten User-Account anzulegen. Ebenso die passenden Firewallregeln, wir empfehlen die Verwendung eines separaten „Sync-Interfaces“. Über dieses können auch die pfsync-Informationen ausgetauscht werden.


Wichtig: Die Synchronisation der Konfiguration erfolgt bei der OPNsense nicht automatisch, sondern muß jeweils manuell auf der primären OPNsense angestoßen werden.
Alternativ kann man die OPNsense Konfiguration auch über die Kommandozeile mit dem Befehl
configctl filter sync
syncen lassen.

Zu beachten gilt, das die OPNsense-Konfig dabei auf dem Zielgerät mit dem zu syncenden Elementen überschrieben wird!


OPNsense xmlsync ist im Wireshark dargestellt
OPNsense config pf xml sync Wireshark


Fazit: