Haute disponibilité avec OPNsense et CARP : paire actif/passif sans interruption
Configurez une paire OPNsense actif/passif avec CARP, pfsync et XMLRPC Config Sync sur Proxmox. Basculement automatique en moins de 3 secondes, mises à jour sans downtime, monitoring Grafana intégré — haute disponibilité enterprise à coût zéro.

Qu'est-ce que CARP ?
CARP (Common Address Redundancy Protocol) est un protocole réseau qui permet à plusieurs machines de partager une adresse IP virtuelle (VIP). Développé initialement pour OpenBSD et intégré nativement dans OPNsense, CARP garantit la haute disponibilité de votre firewall : si le nœud maître tombe, le nœud de secours prend le relais en quelques secondes, de manière totalement transparente pour les connexions en cours.
Dans mon infra BOTUM, CARP résout trois problèmes concrets :
- Mises à jour sans downtime : basculer sur le backup, mettre à jour le master, rebasculer — zéro interruption pour les clients.
- Résilience aux pannes : panne VM Proxmox, crash OPNsense, coupure réseau — basculement automatique en moins de 3 secondes.
- Maintenance planifiée : arrêt propre du master, le backup prend le relais, fenêtre de maintenance sans impact SLA.
Prérequis : 2 VMs OPNsense sur Proxmox
Pour mettre en place la haute disponibilité CARP, il vous faut :
- 2 VMs OPNsense identiques sur Proxmox (même version, même configuration de base)
- 3 interfaces réseau par VM : WAN, LAN, et SYNC (pfsync)
- Un switch ou VLAN dédié pour le lien de synchronisation
- Accès SSH aux deux nœuds
- Même version OPNsense sur les deux nœuds (impératif pour la config sync)
Architecture réseau recommandée
# OPNsense-1 (MASTER)
# - vtnet0 : WAN → IP: 203.0.113.2/28 (réelle)
# - vtnet1 : LAN → IP: 192.168.1.1/24 (réelle)
# - vtnet2 : SYNC → IP: 192.168.254.1/30
# OPNsense-2 (BACKUP)
# - vtnet0 : WAN → IP: 203.0.113.3/28 (réelle)
# - vtnet1 : LAN → IP: 192.168.1.2/24 (réelle)
# - vtnet2 : SYNC → IP: 192.168.254.2/30
# VIPs CARP partagées (les clients utilisent ces IPs)
# - WAN VIP : 203.0.113.4/28 (VHID 1)
# - LAN VIP : 192.168.1.254/24 (VHID 2)

Configurer les VIPs CARP
Créer la VIP WAN sur le MASTER
Dans OPNsense MASTER : Interfaces > Virtual IPs > Settings > Add
Type : CARP
Interface : WAN
IP Address : 203.0.113.4 / 28
Virtual VHID : 1
VHID Password: MonMotDePasseCarp2026
Advertising frequency - Base : 1
Advertising frequency - Skew : 0 ← 0 = MASTER (priorité haute)
Description : WAN-VIP-CARP
Créer la VIP LAN sur le MASTER
Type : CARP
Interface : LAN
IP Address : 192.168.1.254 / 24
Virtual VHID : 2
VHID Password: MonMotDePasseCarp2026
Advertising frequency - Base : 1
Advertising frequency - Skew : 0
Description : LAN-VIP-CARP
Configurer le BACKUP (Skew 100)
Sur OPNsense-2 (BACKUP), créer les mêmes VIPs avec Skew = 100 :
# Sur OPNsense-2 (BACKUP) — même config, seul le skew change :
# WAN VIP : VHID 1, Skew 100 ← 100 = BACKUP (priorité basse)
# LAN VIP : VHID 2, Skew 100
# Règles CARP :
# - Skew 0 = priorité haute → MASTER actif
# - Skew 100 = priorité basse → BACKUP en attente
# - Plus le skew est bas, plus le nœud est prioritaire

pfsync : Synchronisation des états de connexion
pfsync synchronise les tables d'états du firewall entre les deux nœuds en temps réel. Lors d'un basculement, les connexions TCP actives (SSH, HTTPS, tunnels VPN WireGuard) ne sont pas interrompues — le backup connaît déjà tous les états grâce à pfsync.
Activer pfsync sur le MASTER
System > High Availability > Settings
# System > High Availability > Settings
[High Availability Sync]
✓ Synchronize States (pfsync)
Synchronize Interface : SYNC (vtnet2)
pfsync Synchronize Peer IP : 192.168.254.2 ← IP SYNC du BACKUP
[Firewall]
✓ Synchronize firewall rules
✓ Synchronize NAT
✓ Synchronize static routes
Activer pfsync sur le BACKUP
# System > High Availability > Settings (sur BACKUP)
[High Availability Sync]
✓ Synchronize States (pfsync)
Synchronize Interface : SYNC (vtnet2)
pfsync Synchronize Peer IP : 192.168.254.1 ← IP SYNC du MASTER
⚠️ Le lien SYNC doit être isolé sur un VLAN ou réseau dédié. Ne jamais faire transiter du trafic utilisateur sur cette interface.
XMLRPC Config Sync
XMLRPC Config Sync propage automatiquement la configuration OPNsense du MASTER vers le BACKUP. Chaque modification sur le MASTER (nouvelle règle firewall, NAT, alias) est synchronisée sans intervention manuelle.
# System > High Availability > Settings
[Configuration Synchronization]
Synchronize Config to IP : 192.168.254.2 ← IP SYNC du BACKUP
Remote System Username : root
Remote System Password : MotDePasseBackup2026
# Sections à synchroniser (toutes cochées) :
✓ Aliases ✓ Auth Servers ✓ Certificates
✓ DHCP Server ✓ DNS Resolver ✓ Firewall Rules
✓ Gateways ✓ Interfaces ✓ NAT
✓ OpenVPN/WireGuard ✓ Routes ✓ Users and Groups
💡 Après chaque modification sur le MASTER, cliquez Save & Sync pour propager immédiatement vers le BACKUP.
Tester le basculement (Failover)
Le test de basculement est obligatoire avant la mise en production. Il valide que le backup prend bien le relais et que les connexions survivent.
Test 1 : Basculement manuel (arrêt propre)
# Vérifier l'état initial :
# MASTER : CARP State = MASTER (VIPs actives)
# BACKUP : CARP State = BACKUP (VIPs en attente)
# Sur le MASTER : forcer le passage en mode BACKUP
# System > High Availability > Forcefully become BACKUP
# Observer le BACKUP prendre le relais en ~2-3 secondes
Test 2 : Simulation de panne (arrêt brutal)
# Dans Proxmox, éteindre la VM OPNsense-1 (MASTER)
# qm stop 100
# Depuis un client réseau :
ping 203.0.113.4
# → 1-2 pertes max pendant le basculement
# → Reprise en 1-3 secondes
# Vérifier sur le BACKUP :
# VIP WAN : MASTER | VIP LAN : MASTER ✓
Test 3 : Connexions actives survivent au failover
# Ouvrir une session SSH via la VIP LAN :
ssh admin@192.168.1.254
# Forcer le basculement pendant que la session est active
# La session SSH doit SURVIVRE grâce à pfsync
# Si SSH survit → pfsync fonctionne correctement ✓

Cas d'usage : Production sans interruption
La principale valeur ajoutée de CARP dans mon infra BOTUM est la possibilité de faire des maintenances sans fenêtre d'indisponibilité.
Procédure de mise à jour OPNsense sans downtime
# Étape 1 : Vérifier que le BACKUP est sain
# System > High Availability > Status
# BACKUP : CARP BACKUP, pfsync OK, config synced
# Étape 2 : Basculer le trafic vers le BACKUP
# Sur MASTER : System > HA > Forcefully become BACKUP
# → BACKUP devient MASTER, prend toutes les VIPs
# Étape 3 : Mettre à jour l'ancien MASTER (maintenant BACKUP)
# System > Firmware > Updates > Upgrade
# → Redémarrage normal, aucun impact sur le trafic
# Étape 4 : Vérifier le retour de l'ancien MASTER
# → Il revient en mode BACKUP automatiquement
# → Vérifier : sync states OK + config sync OK
# Étape 5 : Répéter pour l'autre nœud
# Résultat : 2 nœuds mis à jour, 0 seconde de downtime

Intégration Grafana pour monitorer CARP
En complément du Billet 9 (Monitoring Grafana + InfluxDB), voici comment ajouter le suivi CARP à vos dashboards existants.
Collecter les métriques CARP via Telegraf
# Dans telegraf.conf — ajout input CARP :
[[inputs.http]]
urls = ["http://192.168.1.254/api/diagnostics/interface/getVipStatus"]
method = "GET"
username = "telegraf_user"
password = "VOTRE-TOKEN-API-OPNSENSE"
data_format = "json"
name_suffix = "_carp"
# Requête Flux Grafana — état CARP :
from(bucket: "opnsense")
|> range(start: -1h)
|> filter(fn: (r) => r._measurement == "http_carp")
|> filter(fn: (r) => r._field == "status" or r._field == "vhid")
Panneaux recommandés pour le dashboard CARP
- État CARP actuel (MASTER/BACKUP) pour chaque VIP — Gauge avec alerte si INACTIF
- Historique des basculements — Timeline/Log panel (chaque event CARP)
- Compteur pfsync : états synchronisés/seconde — Time series
- Latence lien SYNC — Gauge (alerte si > 10ms)
- Nombre d'états firewall synchronisés — Stat panel
Conclusion et prochaines étapes
Vous avez maintenant une infrastructure OPNsense en haute disponibilité active/passive, avec :
- ✅ CARP VIPs partagées entre MASTER et BACKUP
- ✅ pfsync pour la continuité des connexions TCP/UDP
- ✅ XMLRPC Config Sync pour la propagation automatique de la config
- ✅ Tests de basculement validés (graceful + hard failure)
- ✅ Monitoring Grafana intégré pour la visibilité en temps réel
Cette stack vous donne un firewall enterprise-grade avec un RTO < 3 secondes et un RPO de 0 — aucune connexion perdue, aucune configuration désynchronisée.
🔗 Prochain billet : SIEM Wazuh avec OPNsense — Centralisation des logs et détection d'intrusions en temps réel.
🔗 Hub de la série : OPNsense Stack Sécurité Enterprise sur Proxmox
Téléchargez ce guide en PDF pour le consulter hors ligne.
⬇ Télécharger le guide (PDF)🚀 Aller plus loin avec BOTUM
Ce guide couvre les bases. En production, chaque environnement a ses spécificités. Les équipes BOTUM accompagnent les organisations dans le déploiement, la configuration avancée et la sécurisation de leur infrastructure. Si vous avez un projet, parlons-en.
Discuter de votre projet →