Da ich jetzt bei Hetzner einen zweiten ESX Rootserver in einem anderen Datacenter gemietet habe, schreit das natürlich danach auch das Gateway für die VMs hochverfügbar zu machen. 😉
Dafür kommt auf jedem ESX Server je eine pfSense VM zum Zug die mit CARP je eine IP im privaten, wie auch im öffentlichen Netz teilen.
Ich hatte jetzt gerade über viele Wochen an dem Problem herumgegrübelt, weil die zweite pfSense die Public VIP partout immer als MASTER übernehmen wollte. Und es lag tatsächlich an der hetzner firewall (bzw. deren Konfiguration), aber dazu im Anschluss mehr.
Setup
- Zwei ESX Server über zwei Datacenter (FSN und HEL) verteilt
- Drei hetzner v-switche: 1x Public Network, 1x Private Network, 1x HA Network (CARP) traffic
- Auf jedem ESX Server eine pfSense VM (pfsense1 und pfsense2)
- MTU auf allen NICs auf 1400
- Alle drei vNICS:
Promiscuous mode: Accept
MAC address changes: Accept
Forged transmits: Accept - Hetzner Firewall: ON, aber mit gewissen ANY Regeln:
any to public ip subnet | 0.0.0.0/0 | <PublicIP-Subnet>/28 | 0-65535 | 0-65535 | * | any | accept |
local network to any | 172.16.0.0/12 | 0.0.0.0/0 | 0-65535 | 0-65535 | * | any | accept |
(Die einzelnen VMs haben noch host firewalls; Ich benutze die hetzner firewall im Prinzip nur um den Zugriff auf die Primäre IP an der die ESX Konsole hängt einzuschränken)
Das Problem
Jetzt ergab sich das seltsame Problem, dass egal was ich machte, auf pfsense2 immer kurz nach der Initialisierung die Public-IP von BACKUP zu MASTER wechselte und man diese somit auf beiden Servern hatte (weil pfsense1 auch MASTER war)
Die Meldung im log von pfsense2 war:
Carp backup event
carp: 110@vmx0: BACKUP -> MASTER (master timed out)
- Die die HA IPs konnten sich beide Gegenseitig erreichen (ICMP)
- Die beiden Public IPs konnten sich beide Gegenseitig erreichen (ICMP)
- Die beiden Private IPs konnten sich beide Gegenseitig erreichen (ICMP)
Kurioserweise kam noch hinzu, dass das jeweils NUR bei der Public VIP passierte. Die Private VIP funktionierte einwandfrei!
Wenn ich beide pfSense VMs auf denselben ESX Host verschoben hatte, trat das Problem nicht auf und CARP funktionierte mit beiden VIPs.
Wahrscheinlich hatte ich gerade deshalb die Firewall bis jetzt nicht verdächtigt, weil ja sowohl für private, wie auch publlic Nezte „any rules“ galten.
Die Lösung
Als „letzter Versucht“ hatte ich dann die hetzner Firewall doch Testweise mal auf dem zweiten ESX ausgeschaltet – Und siehe da, prompt wechselte der Status auf pfsense2 für die Punic IP VIP wieder von MASTER auf BACKUP!
Als ich dann die beide any-rules verglich, stellte ich fest, dass die Richtung jeweils anders war.
Der Rest war dann einfach: Ich hatte einfach noch die Regel:
public ip subnet to any | <PublicIP-Subnet>/28 | 0.0.0.0/0 | 0-65535 | 0-65535 | * | any | accept |
hinzugefügt und das Problem hat sich in Luft aufgelöst!
Manchmal dauert es echt lange bis man da einen Knopf löst.