Die kostenlose Open Source Firewall OPNsense kann als redundante Firewall mit automatischem Fail-over konfiguriert werden. Dieser Artikel zeigt, wie ein derartiger Firewall HA-Cluster mit zwei Firewall-Rechnern (in diesem Fall zwei OPNsense Desktop Appliance S) eingerichtet wird. Diese Anleitung wurde mit der im Juli 2026 erschienenen Version OPNsense 26.7 umfassend aktualisiert.

Für eine redundante OPNsense Firewall sind erforderlich:
Falls die beiden OPNsense Cluster Nodes in virtuellen Maschinen betrieben werden, muss den virtuellen Maschinen das Verändern der MAC Adressen erlaubt werden. Dies ist für die Verwendung des Common Address Redundancy Protocol (CARP) erforderlich. Die entsprechenden Einstellungen sind:
Bei einer redundanten OPNsense Firewall kommen die folgenden Technologien zum Einsatz:

Empfehlung: Konfigurieren Sie beim Einrichten einer neuen Firewall zuerst den Clusterverbund. Beginnen Sie nach dem Einrichten des HA-Clusters damit, weitere Firewall-Konfigurationen (Firewall-Regeln, Dienste, ...) zu konfigurieren. Dieses Vorgehen reduziert mögliche Fehlerquellen.
Zur Einrichtung einer redundanten OPNsense Firewall sind folgende Schritte auszuführen:[6]

cat /dev/random | hexdump -n 30| cut -d \ -f 2-| head -n 1 | tr -d " "





Hinweis: Wenn weitere Dienste (z.B. OpenVPN) konfiguriert werden, muss zuvor die Synchronisation der Konfiguration unter System ‣ High Availability ‣ Settings aktiviert werden. Bei der Konfiguration des Dienstes muss jeweils die Virtual WAN IP als Interface für den Dienst gewählt werden.
Ein im Test-LAN angeschlosser Linux-Client zeigt bei Abfrage des ARP-Caches via "ip n" die virtuelle MAC-Adresse 00:00:5e:00:01:03 für das Default Gateway 192.168.1.1:
tniedermeier@tpt:~$ ip n 192.168.1.251 dev enp0s25 lladdr c4:00:ad:b8:58:f0 REACHABLE 192.168.1.252 dev enp0s25 lladdr c4:00:ad:b8:69:a1 STALE 192.168.1.1 dev enp0s25 lladdr 00:00:5e:00:01:01 STALE
Nun wird zum Testen auf Firewall 1 (bisheriger Master) das Netzwerkkabel am WAN Port (igb1) abgesteckt. Verbindungen vom Linux-Client ins Internet (z.B. eine SSH-Verbindung oder eine virtuelle Desktop-Verbindung) bleiben erhalten.
Die folgende Ausgabe zeigt die Log-Einträge in /var/log/system.log sowie die sysctl Werte von net.inet.carp auf Firewall 1. Das Interface igb1 wechselt in den Status "interface down", daraufhin wird der "Demotion Counter" auf 240 gesetzt:
root@fw1:~ # opnsense-log [...] <13>1 2026-09-30T13:23:54+00:00 fw1.test.thomas-krenn.com kernel - - [meta sequenceId="1"] <6>[24405] carp: 3@igb1: MASTER -> INIT (hardware interface down) <13>1 2026-09-30T13:23:54+00:00 fw1.test.thomas-krenn.com kernel - - [meta sequenceId="2"] <6>[24405] carp: demoted by 240 to 240 (interface down) <13>1 2026-09-30T13:23:54+00:00 fw1.test.thomas-krenn.com kernel - - [meta sequenceId="3"] <6>[24405] igb1: link state changed to DOWN <13>1 2026-09-30T13:23:54+00:00 fw1.test.thomas-krenn.com kernel - - [meta sequenceId="4"] <6>[24405] carp: 1@igb0: MASTER -> BACKUP (more frequent advertisement received) <13>1 2026-09-30T13:23:55+00:00 fw1.test.thomas-krenn.com opnsense 62477 - [meta sequenceId="5"] /usr/local/sbin/pluginctl: plugins_configure crl (1) <13>1 2026-09-30T13:23:55+00:00 fw1.test.thomas-krenn.com opnsense 62477 - [meta sequenceId="6"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : core_trust_crl(1)) <13>1 2026-09-30T13:23:55+00:00 fw1.test.thomas-krenn.com opnsense 63735 - [meta sequenceId="7"] /usr/local/etc/rc.linkup: DEVD: Ethernet detached event for wan(igb1) <27>1 2026-09-30T13:23:55+00:00 fw1.test.thomas-krenn.com dhclient 14807 - [meta sequenceId="8"] connection closed <26>1 2026-09-30T13:23:55+00:00 fw1.test.thomas-krenn.com dhclient 14807 - [meta sequenceId="9"] exiting. <13>1 2026-09-30T13:23:55+00:00 fw1.test.thomas-krenn.com opnsense 62477 - [meta sequenceId="10"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : openvpn_refresh_crls(1)) <13>1 2026-09-30T13:23:56+00:00 fw1.test.thomas-krenn.com opnsense 68761 - [meta sequenceId="11"] /usr/local/sbin/pluginctl: plugins_configure crl (1) <13>1 2026-09-30T13:23:56+00:00 fw1.test.thomas-krenn.com opnsense 68761 - [meta sequenceId="12"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : core_trust_crl(1)) <13>1 2026-09-30T13:23:56+00:00 fw1.test.thomas-krenn.com opnsense 68761 - [meta sequenceId="13"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : openvpn_refresh_crls(1))
root@fw1:~ # sysctl net.inet.carp net.inet.carp.ifdown_demotion_factor: 240 net.inet.carp.senderr_demotion_factor: 0 net.inet.carp.demotion: 240 net.inet.carp.log: 1 net.inet.carp.preempt: 1 net.inet.carp.dscp: 56 net.inet.carp.allow: 1
Die folgende Ausgabe zeigt die Log-Einträge in /var/log/system.log sowie die sysctl Werte von net.inet.carp auf Firewall 2:
root@fw2:~ # opnsense-log [...] <13>1 2026-09-30T13:23:54+00:00 fw2.test.thomas-krenn.com kernel - - [meta sequenceId="1"] <6>[24414] carp: 1@igb0: BACKUP -> MASTER (preempting a slower master) <13>1 2026-09-30T13:23:55+00:00 fw2.test.thomas-krenn.com opnsense 11624 - [meta sequenceId="2"] /usr/local/sbin/pluginctl: plugins_configure crl (1) <13>1 2026-09-30T13:23:55+00:00 fw2.test.thomas-krenn.com opnsense 11624 - [meta sequenceId="3"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : core_trust_crl(1)) <13>1 2026-09-30T13:23:55+00:00 fw2.test.thomas-krenn.com opnsense 11624 - [meta sequenceId="4"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : openvpn_refresh_crls(1)) <13>1 2026-09-30T13:23:57+00:00 fw2.test.thomas-krenn.com kernel - - [meta sequenceId="5"] <6>[24417] carp: 3@igb1: BACKUP -> MASTER (master timed out) <13>1 2026-09-30T13:23:57+00:00 fw2.test.thomas-krenn.com opnsense 17427 - [meta sequenceId="6"] /usr/local/sbin/pluginctl: plugins_configure crl (1) <13>1 2026-09-30T13:23:57+00:00 fw2.test.thomas-krenn.com opnsense 17427 - [meta sequenceId="7"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : core_trust_crl(1)) <13>1 2026-09-30T13:23:58+00:00 fw2.test.thomas-krenn.com opnsense 17427 - [meta sequenceId="8"] /usr/local/sbin/pluginctl: plugins_configure crl (execute task : openvpn_refresh_crls(1)) <13>1 2026-09-30T13:26:44+00:00 fw2.test.thomas-krenn.com configctl 82983 - [meta sequenceId="1"] event @ 1790774804.03 msg: Sep 30 13:26:44 fw2.test.thomas-krenn.com config[87642]: config-event: new_config /conf/backup/config-1790774804.0178.xml <13>1 2026-09-30T13:26:46+00:00 fw2.test.thomas-krenn.com opnsense 16298 - [meta sequenceId="2"] /usr/local/sbin/pluginctl: plugins_configure dns_reload (1) <13>1 2026-09-30T13:26:46+00:00 fw2.test.thomas-krenn.com opnsense 16298 - [meta sequenceId="3"] /usr/local/sbin/pluginctl: plugins_configure dns_reload (execute task : system_resolver_configure(1)) <13>1 2026-09-30T13:26:47+00:00 fw2.test.thomas-krenn.com opnsense 29157 - [meta sequenceId="4"] /usr/local/sbin/pluginctl: plugins_configure dns (1) <13>1 2026-09-30T13:26:47+00:00 fw2.test.thomas-krenn.com opnsense 29157 - [meta sequenceId="5"] /usr/local/sbin/pluginctl: plugins_configure dns (execute task : dnsmasq_configure_do(1)) <13>1 2026-09-30T13:26:47+00:00 fw2.test.thomas-krenn.com opnsense 29157 - [meta sequenceId="6"] /usr/local/sbin/pluginctl: plugins_configure dns (execute task : unbound_configure_do(1)) <13>1 2026-09-30T13:26:49+00:00 fw2.test.thomas-krenn.com opnsense 54525 - [meta sequenceId="7"] /usr/local/sbin/pluginctl: plugins_configure dhcp (1) <13>1 2026-09-30T13:26:49+00:00 fw2.test.thomas-krenn.com opnsense 54525 - [meta sequenceId="8"] /usr/local/sbin/pluginctl: plugins_configure dhcp (execute task : radvd_configure_dhcp(1))
root@fw2:~ # sysctl net.inet.carp net.inet.carp.ifdown_demotion_factor: 240 net.inet.carp.senderr_demotion_factor: 0 net.inet.carp.demotion: 0 net.inet.carp.log: 1 net.inet.carp.preempt: 1 net.inet.carp.dscp: 56 net.inet.carp.allow: 1
Weitere Informationen zeigt das CARP-Widget oder die Statusanzeige unter Interfaces ‣ Virtual IPs ‣ Status:
Mit einem redundanten Aktiv/Passiv Firewall HA-Cluster kann die Downtime der Firewall bei einem Firewall-Update drastisch minimiert werden:
|
Autor: Werner Fischer Werner Fischer arbeitet im Product Management Team von Thomas-Krenn. Er evaluiert dabei neueste Technologien und teilt sein Wissen in Fachartikeln, bei Konferenzen und im Thomas-Krenn Wiki. Bereits 2005 - ein Jahr nach seinem Abschluss des Studiums zu Computer- und Mediensicherheit an der FH Hagenberg - heuerte er beim bayerischen Server-Hersteller an. Als Öffi-Fan nutzt er gerne Bus & Bahn und genießt seinen morgendlichen Spaziergang ins Büro. |
|
Autor: Thomas Niedermeier Thomas Niedermeier arbeitet im Product Management Team von Thomas-Krenn. Er absolvierte an der Hochschule Deggendorf sein Studium zum Bachelor Wirtschaftsinformatik. Seit 2013 ist Thomas bei Thomas-Krenn beschäftigt und kümmert sich unter anderem um OPNsense Firewalls, das Thomas-Krenn-Wiki und Firmware Sicherheitsupdates.
|