Plan
Platzhalter in diesem Artikel
| Platzhalter |
Bedeutung |
Beispiel
|
| HS |
Drittes Oktett des Schulungsnetzes (WAN), wird vom Trainer vorgegeben |
4
|
| X |
Deine Teilnehmernummer, wird vom Trainer vorgegeben |
13
|
- Beispiel für X=13 und HS=4: WAN Master 192.168.4.53, WAN Backup 192.168.4.73, WAN-VIP 192.168.4.33, VHID 13
- Alle Passwörter in diesem Artikel sind Laborwerte und dürfen so niemals in eine produktive Umgebung übernommen werden.
Wichtig
- Die Netzwerkkarten für LAN und WAN müssen im Hypervisor in den Promiscuous-Modus geschaltet werden – nicht in OPNsense.
- VirtualBox: Maschine => Ändern => Netzwerk => Adapter => Erweitert => Promiscuous-Modus: Alle erlauben
- Proxmox: Bridge ohne MAC-Filter bzw. entsprechende Bridge-Einstellung
- Das gilt sowohl für den Master als auch für das 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
- Auf beiden Maschinen muss die gleiche OPNsense-Version laufen
- Die Anzahl der Netzwerkkarten muss auf beiden Maschinen gleich sein
- Die Reihenfolge und Anzahl der Netzwerkschnittstellen muss auf beiden Maschinen identisch sein!
- Empfehlung für beide Maschinen:
- em0: LAN
- em1: WAN
- em2: SYN
- Am Anfang sollten so wenige Dienste wie möglich laufen
IP-Adressen der Master Firewall
- em0 (LAN): 192.168.1.1/24
- em1 (WAN): 192.168.HS.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.HS.X+60/24
- em2 (SYN): 100.64.64.2/30
Übersicht
|
Master (opns-ha1) |
Backup (opns-ha2) |
VIP |
VHID
|
| LAN (em0) |
192.168.1.1 |
192.168.1.2 |
192.168.1.3 |
2
|
| WAN (em1) |
192.168.HS.X+40 |
192.168.HS.X+60 |
192.168.HS.X+20 |
X
|
| SYN (em2) |
100.64.64.1 |
100.64.64.2 |
– |
–
|
- Die VHID muss nur innerhalb einer Broadcast-Domäne eindeutig sein. Da sich alle Teilnehmer das WAN-Segment teilen, wird dort die Teilnehmernummer X verwendet. Das LAN ist pro Teilnehmer isoliert, deshalb kann dort fest die 2 stehen bleiben.
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} je eine Allow-Regel erstellt werden, die auf das CARP-Protokoll matcht
- 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 an allen Schnittstellen bis auf das SYN-Interface die 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.HS.X+20/24
|
| Virtual Password |
radler
|
| VHID Group |
X
|
| 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 Regelgenerierung ausgeschaltet werden
- Im Menü Firewall => NAT => Outbound muss die Option "Manual outbound NAT rule generation" ausgewählt werden
- Dann die folgende Regel erstellen:
- Interface: WAN
- Source address: LAN net
- Translation / target: Virtual WAN IP (192.168.HS.X+20) aus der Auswahlliste
- Achtung
- Als Ziel muss der VIP-Eintrag aus der Auswahlliste gewählt werden, nicht das Netz 192.168.HS.0/24. Trägt man ein ganzes Netz ein, baut OPNsense daraus einen NAT-Pool.
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
|
- "Verify peer" bleibt deaktiviert, weil die Web-GUI der Gegenstelle ein selbstsigniertes Zertifikat verwendet.
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
|
- Synchronize Config muss auf dem Backup leer bleiben. Trägt man hier den Master ein, schieben sich beide Knoten gegenseitig ihre Konfiguration zu.
Client im LAN
- Der Windows-Client (192.168.1.50) muss als Gateway und als DNS-Server die LAN-VIP 192.168.1.3 erhalten – nicht die 192.168.1.1
- Wird die echte IP des Masters eingetragen, ist der Client beim Ausfall des Masters trotz funktionierendem Cluster offline
- Bei Verwendung eines DHCP-Servers muss dieser die VIP als Gateway und DNS verteilen
Endergebnis
Master
- System
- Hier müssen beide Spalten gefüllt sein und auf beiden Knoten die gleichen Dienste erscheinen:
| 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
- Auf der Backup-Firewall erscheint hier die Warnung, dass die XMLRPC-Konfiguration unvollständig sei.
- Diese Meldung kann ignoriert werden: Das Backup empfängt nur passiv, deshalb sind die XMLRPC-Felder dort absichtlich leer und werden fälschlicherweise als "unvollständig" markiert. Solange die Master-Firewall auf Version 24.7 eingestellt ist und die Daten erfolgreich überträgt, arbeitet der Cluster technisch einwandfrei.
Failover testen
- Auf dem Client einen Dauerping nach draußen starten:
ping -t 192.168.HS.254
- Auf dem Master: System => High Availability => Status => Enter persistent CARP maintenance mode
- Erwartetes Verhalten:
- Das Backup wechselt für beide VHIDs von BACKUP auf MASTER
- Der Ping läuft weiter oder verliert maximal ein bis zwei Pakete
- Kontrolle auf beiden Knoten:
ifconfig em0 ; ifconfig em1
- Zurückschalten über Leave persistent CARP maintenance mode auf dem Master
- Zweiter Test: Master hart ausschalten (VM stoppen) und das gleiche Verhalten prüfen
Debugging
XMLRPC
- Um den erfolgreichen Sync auf der Master-Firewall zu prüfen, geht man so vor:
- System
- Oben im Filter-Feld den Begriff xmlrpc eingeben
- Gesucht wird ein Eintrag wie: [OK] Configuration synchronized to https://100.64.64.2:443
CARP-Advertisements mitlesen
- Falls kein Failover stattfindet, auf dem WAN-Interface prüfen, ob die Advertisements des Partners ankommen:
tcpdump -n -i em1 proto 112
- Hier sieht man auch, welche VHIDs im Segment sonst noch unterwegs sind
Netzwerkschnittstellen
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.HS.X+40 netmask 0xffffff00 broadcast 192.168.HS.255
inet 192.168.HS.X+20 netmask 0xffffff00 broadcast 192.168.HS.255 vhid X
carp: MASTER vhid X 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.HS.X+60 netmask 0xffffff00 broadcast 192.168.HS.255
inet 192.168.HS.X+20 netmask 0xffffff00 broadcast 192.168.HS.255 vhid X
carp: BACKUP vhid X 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>
- Der Master hat advskew 0, das Backup advskew 100. Diesen Wert setzt OPNsense beim Sync automatisch – er wird nicht von Hand vergeben.
Wird Synchronisiert?
- Master
- System
- High Availability
- Status
- Synchronize and reconfigure all (Push)
- Backup
tail -f /var/log/configd/latest.log
- Hier sollte man die Übertragung sehen.