OPNsense HA Umsetzung

Aus Xinux Wiki
Version vom 20. Februar 2026, 15:23 Uhr von Thomas.will (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „ =Plan= {{#drawio:ha-opnsense-kit}} =Wichtig= *Auf den lan und wan Interfaces muss der Promiscuos-Modus eingestellt sein. *Sowohl als Master als auch auf der…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen


Plan

Wichtig

  • Auf den lan und wan Interfaces muss der Promiscuos-Modus eingestellt sein.
  • Sowohl als Master als auch auf der Backup
Begründung
  • CARP verwendet virtuelle MAC-Adressen für die gemeinsame VIP. In virtualisierten Umgebungen werden Frames mit diesen MAC-Adressen vom Hypervisor standardmäßig verworfen, da sie nicht der echten VM-NIC zugeordnet sind. Ohne aktivierten Promiscuous-Modus erreichen CARP-Advertisements den Partner nicht, was zu Fehldetektion, unerwünschtem Failover und HA-Inkonsistenzen führt.

Vorbereitung

  • Zwei OPNsense-Installationen mit jeweils mind. 3 Netzwerkkarten
  • Die Anzahl der Netzwerkkarten muss auf beiden Maschinen gleich sein
Die Reihenfolge und Anzahl der Netzwerkschnittstellen muss gleich sein!
  • Empfehlung für beide Maschinen:
    • WAN
    • SYN
    • LAN
  • Am Anfang sollten so wenige Dienst wie möglich laufen

IP Adressen der Master Firewall

  • em0 (LAN): 192.168.1.1/24
  • em1 (WAN): 192.168.4.X+40/24
  • em2 (SYN): 100.64.64.1/30

IP Adressen der Backup Firewall

  • em0 (LAN): 192.168.1.2/24
  • em1 (WAN): 192.168.4.X+60/24
  • em2 (SYN): 100.64.64.2/30

Firewall Regeln (beide Firewalls)

  • Auf allen Schnittstellen außer dem SYN-Interface muss das Protokoll CARP akzeptiert werden
  • Dazu muss im Menü Firewall => Rules => {WAN, LAN} Allow-Regeln erstellt werden, die auf das CARP-Protokoll matchen
  • Für das SYN-Interface kann man eine Standard-Allow-Regel erstellen, die alles erlaubt

Virtuelle IPs (Master Firewall)

  • Die virtuellen IPs werden von den Knoten des HA-Clusters geteilt, sobald ein Ausfall erkannt wird
  • Somit wird dafür gesorgt, dass die virtuelle IP immer erreichbar ist
  • Die virtuelle IP wird nur auf der Master Firewall eingestellt und an die Backups mitgeteilt
  • Dazu muss man im Menü Interfaces => Virtual IPs => Settings wieder an allen bis auf das SYN-Interface, die eigentlich gewünschten IPs vergeben
  • Über das [+] auf der rechten Seite muss man folgende Einträge machen:

virtuelle WAN IP

Parameter Wert
Mode CARP
Interface WAN
Address 192.168.4.213/24
Virtual Password radler
VHID Group 213
Advertising Frequency 1
Description Virtual WAN IP

virtuelle LAN IP

Parameter Wert
Mode CARP
Interface LAN
Address 192.168.1.3/24
Virtual Password radler
VHID Group 2
Advertising Frequency 1
Description Virtual LAN IP

Source NAT (Master Firewall)

  • Da die virtuelle IP für ausgehende Verbindungen benutzt werden soll, muss die automatische Regelgeneration ausgeschaltet werden
  • Im Menü Firewall => NAT => Outbound muss die Option "Manual outbound NAT rule genereation" ausgewählt werden
  • Dann die folgenden Regeln erstellen:
    • Interface: WAN
    • Source address: LAN net
    • Translation / target: 192.168.4.213/24 (Virtual WAN IP)

High Availability Konfiguration (Master Firewall)

  • Die eigentliche HA Einstellung erfolgt über das Menü System => High Availability => Settings:
Parameter Wert
Synchronize all states via SYN
Sync compatibility OPNsense 24.7 or above
Synchronize Peer IP 100.64.64.2
Synchronize Config 100.64.64.2
Verify peer deaktiviert
Remote System Username root
Remote System Password 123Start$
Services Aliases, Firewall Rules, NAT, Virtual IPs

High Availability Konfiguration (Backup Firewall)

  • Hier darf im Menü System => High Availability => Settings nur folgendes eingestellt werden:
Parameter Wert
Synchronize all states via SYN
Sync compatibility OPNsense 24.7 or above
Synchronize Peer IP 100.64.64.1
Synchronize Config leer
Verify peer deaktiviert
Remote System Username leer
Remote System Password leer
Services Nothing selected

Endergebnis

Master

  • System
    • High Availability:
      • Status
Service Description
configd System Configuration Daemon
cron Cron
hostwatch Host discovery service
login Users and Groups
ntpd Network Time Daemon
openssh Secure Shell Daemon
pf Packet Filter
routing System routing
sysctl System tunables
syslog-ng Syslog-ng Daemon
unbound Unbound DNS
webgui Web GUI

Slave

  • System
    • High Availability:
      • Status

Die Meldung auf der Backup-Firewall kann ignoriert werden, da diese nur passiv empfängt und die leeren XMLRPC-Felder daher fälschlicherweise als "unvollständig" markiert werden. Solange die Master-Firewall auf Version 24.7 eingestellt ist und die Daten erfolgreich überträgt, arbeitet der Cluster technisch einwandfrei.

Debugging

XLLRPC

  • Um den erfolgreichen Sync auf der Master-Firewall zu prüfen, gehst du so vor:
  • System
    • Log Files
        • General.
  • Gib oben im Filter-Feld den Begriff xmlrpc ein.

Suche nach einem Eintrag wie: [OK] Configuration synchronized to https://100.64.64.2:443.

Netzwerkschnittstellen

em0

Master
em0: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	description: LAN (lan)
	options=48500b8<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
	ether 08:00:27:c4:a2:6f
	inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
	inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 vhid 2
	carp: MASTER vhid 2 advbase 1 advskew 0
	      peer 224.0.0.18 peer6 ff02::12
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
em1: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	description: WAN (wan)
	options=48500b8<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
	ether 08:00:27:61:6f:6d
	inet 192.168.4.53 netmask 0xffffff00 broadcast 192.168.4.255
	inet 192.168.4.213 netmask 0xffffff00 broadcast 192.168.4.255 vhid 213
	carp: MASTER vhid 213 advbase 1 advskew 0
	      peer 224.0.0.18 peer6 ff02::12
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
Backup
em0: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 
	description: LAN (lan)
	options=48500b8<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
	ether 08:00:27:1c:44:8b
	inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
	inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255 vhid 2
	carp: BACKUP vhid 2 advbase 1 advskew 100
	      peer 224.0.0.18 peer6 ff02::12
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
em1: flags=1008943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500
	description: WAN (wan)
	options=48500b8<VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWFILTER,VLAN_HWTSO,HWSTATS,MEXTPG>
	ether 08:00:27:95:9b:4b
	inet 192.168.4.73 netmask 0xffffff00 broadcast 192.168.4.255
	inet 192.168.4.213 netmask 0xffffff00 broadcast 192.168.4.255 vhid 213
	carp: BACKUP vhid 213 advbase 1 advskew 100
	      peer 224.0.0.18 peer6 ff02::12
	media: Ethernet autoselect (1000baseT <full-duplex>)
	status: active
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>

Wird Synchronisiert?

Master
  • System
    • High Availability
      • Status
        • Synchronize and reconfigure all (Push)
Backup
  • tail -f /var/log/configd/latest.log

Hier sollteman die Übertragung sehen.