# CARP Deep Dive: Das Herz der Gateway-Redundanz
TL;DR / Management Summary CARP (Common Address Redundancy Protocol) ist der Open-Source-Ersatz für das proprietäre VRRP oder HSRP. Es ermöglicht mehreren Firewalls, die gleiche IP-Adresse (Virtual IP) zu teilen. Nur ein Gerät antwortet aktiv auf ARP-Anfragen. Ein Senior Admin nutzt CARP, um Fehlertoleranz für das Default-Gateway der Clients bereitzustellen, ohne dass diese ihre Netzwerkeinstellungen bei einem Hardware-Ausfall ändern müssen.
# 1. Einführung & Funktionsweise
Wer hat die Token?
CARP basiert auf Multicast-Ankündigungen (Heartbeats).
- Protokoll: VRRP (IP Protocol 112).
- Multicast-Adresse:
224.0.0.18. - Mechanismus: Der Master sendet in festen Intervallen (
AdvBase). Bleibt die Nachricht aus, übernimmt der Knoten mit dem niedrigstenAdvSkew.
# 2. Die CARP Parameter
Präzision im Millisekunden-Takt.
# 1. VHID (Virtual Host ID)
Eine Nummer zwischen 1 und 255. Sie muss für jedes IP-Paar im gleichen Subnetz eindeutig sein.
- Wichtig: Wenn Sie zwei getrennte OPNsense-Cluster im gleichen LAN betreiben, müssen diese unterschiedliche VHIDs nutzen!
# 2. AdvBase & AdvSkew
- AdvBase: Das Sendeintervall in Sekunden (Standard: 1).
- AdvSkew: Die Verzögerung in 1/256 Sekunden.
- Master:
0. - Backup:
100. - Logic: Höherer Skew = Späteres Antworten = Höhere Wahrscheinlichkeit, im Standby zu bleiben.
- Master:
# 3. Password
Wird zur Authentifizierung der CARP-Pakete genutzt. Verhindert, dass fremde Geräte im LAN die Master-Rolle übernehmen können.
# 3. Deep Dive: CARP in virtuellen Umgebungen
Besonderheiten in Proxmox & VMware.
CARP nutzt eigene virtuelle MAC-Adressen (Schema: 00:00:5e:00:01:XX, wobei XX die VHID ist).
- Proxmox Problem: Die Standard-Bridge blockiert Pakete mit fremden MAC-Adressen (Anti-Spoofing).
- Lösung:
- Proxmox Firewall für die VM deaktivieren.
- Haken bei “MAC-Filter” entfernen.
- Alternativ: Promiscuous Mode am physischen Switch erlauben.
# 4. Day-2 Operations: Troubleshooting via CLI
In den Heartbeat schauen.
Wenn CARP nicht umschaltet oder beide Knoten “Master” sind:
# Zeigt CARP-Status aller Interfaces
ifconfig | grep carp
# Heartbeats live beobachten
tcpdump -i vtnet0 proto vrrp
Achten Sie im tcpdump auf die vhid und den skew. Sie sollten nur Pakete vom Master sehen.
# 5. Troubleshooting & “War Stories”
Wenn die virtuelle IP ‘flattert’.
# Top 3 Fehlerbilder
-
Symptom: CARP Status springt ständig zwischen Master und Backup.
- Ursache: Hoher Jitter im Netzwerk oder CPU-Last auf dem Master verhindert rechtzeitiges Senden der Heartbeats.
- Lösung:
AdvBaseauf 2 erhöhen oder CPU-Reservierung in Proxmox anpassen.
-
Symptom: Ping auf die CARP-IP geht, aber Internetzugriff nicht.
- Ursache: Outbound-NAT (Artikel 559) ist an die physische IP gebunden statt an die CARP-VIP.
- Fix:
Firewall -> NAT -> Outboundauf die CARP-IP umstellen.
-
Symptom: Switch-Port wird wegen “MAC-Flapping” deaktiviert.
- Lösung: Deaktivieren Sie Port-Security-Features am Switch, die nur eine MAC pro Port erlauben.
# “War Story”: Die doppelte VHID
Ein Admin baute ein Test-System mit CARP im gleichen VLAN wie das produktive System auf. Er nutzte die VHID 1 für beide.
Das Ergebnis: Die produktive Firewall und die Test-Firewall kämpften um die Master-Rolle. Das Netzwerk war für 30 Minuten komplett instabil, da ARP-Tabellen im gesamten Unternehmen im Sekundentakt überschrieben wurden.
Lehre: VHIDs sind globale Ressourcen im Layer-2 Netz. Dokumentieren Sie Ihre VHID-Belegung akribisch!
# 6. Monitoring & Alerting
Die VIP-Gesundheit.
# SNMP Überwachung
Überwachen Sie den Status der CARP-Schnittstellen via SNMP.
- Alert: Wenn der Status des Backup-Knotens auf
MASTERwechselt -> Sofortige Benachrichtigung, da dies einen Ausfall der Primär-Hardware impliziert.
# 7. Fazit & Empfehlung
CARP ist ein simples, aber extrem robustes Protokoll.
- Empfehlung: Nutzen Sie CARP für LAN, WAN und alle VLAN Gateways.
- Sicherheit: Nutzen Sie immer ein komplexes CARP Password, um ARP-Spoofing Angriffe zu erschweren.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| CARP Status | ifconfig vhidX |
| Force Backup | sysctl net.inet.carp.allow=0 (Vorsicht!) |
| Debug Mode | sysctl net.inet.carp.log=1 |
| CARP Preemption | sysctl net.inet.carp.preempt=1 |