Chapitre 1311 minIntermédiaire
Haute disponibilité pfSense : CARP et pfsync
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- expliquer le rôle de CARP, de pfsync et de la synchronisation XMLRPC ;
- établir le plan d'adressage d'une grappe de deux pare-feu ;
- configurer la grappe, son NAT sortant et ses VPN sur l'adresse virtuelle ;
- tester une bascule et diagnostiquer deux maîtres.
3 exercices corrigés1 schéma
La haute disponibilité de pfSense repose sur deux pare-feu identiques qui fonctionnent en grappe : CARP leur fait partager des adresses IP virtuelles, portées par le pare-feu maître et reprises en quelques secondes par le secours s'il tombe ; pfsync recopie en continu la table d'états, pour que les connexions en cours survivent à la bascule ; la synchronisation XMLRPC recopie la configuration du maître vers le secours. Ce chapitre double le pare-feu de Sorbier : plan d'adressage, machines virtuelles sur deux hôtes Proxmox, configuration, tests et pièges.
Pourquoi doubler le pare-feu
Chez Sorbier, pf1 route tous les VLAN, publie le site de suivi, termine les VPN et résout les noms d'Internet pour l'annuaire. S'il s'arrête (panne de l'hôte Proxmox, mise à jour qui tourne mal), plus aucun VLAN ne joint les serveurs, plus personne ne navigue, l'entrepôt de Mâcon est coupé. C'est un point unique de défaillance. Les notions de disponibilité, de redondance et de bascule, et la comparaison de CARP avec HSRP et VRRP, sont dans le cours Haute disponibilité ; ce chapitre configure.
| Brique | Rôle | Protocole |
|---|---|---|
| CARP (Common Address Redundancy Protocol) | Partage d'adresses IP virtuelles : le maître les porte et envoie des annonces ; si elles cessent, le secours devient maître | Protocole IP 112, annonces en multidiffusion sur chaque interface |
| pfsync | Recopie de la table d'états du maître vers le secours, en continu | Sur une interface dédiée |
| XMLRPC | Recopie de la configuration (règles, alias, NAT, VPN, utilisateurs…) du maître vers le secours, à chaque modification | HTTPS vers l'interface web du secours |
Chaque adresse virtuelle CARP a un identifiant, le VHID (de 1 à 255), et un mot de passe. Le pare-feu qui annonce le plus souvent (la plus petite valeur de décalage, skew) est maître.
Le plan d'adressage
Chaque réseau a désormais besoin de trois adresses : une pour pf1, une pour pf2, et l'adresse virtuelle partagée. On garde comme adresses virtuelles les passerelles actuelles : les postes, les serveurs et le DHCP n'ont rien à changer. Les adresses propres des pare-feu sont les deux qui précèdent la passerelle.
| Interface | pf1 (maître) | pf2 (secours) | Adresse virtuelle CARP | VHID |
|---|---|---|---|---|
| WAN | 203.0.113.18 | 203.0.113.19 | 203.0.113.17 | 1 |
| POSTES | 192.168.10.124 | 192.168.10.125 | 192.168.10.126 | 10 |
| SERVEURS | 192.168.10.188 | 192.168.10.189 | 192.168.10.190 | 20 |
| ENTREPOT | 192.168.10.156 | 192.168.10.157 | 192.168.10.158 | 30 |
| VISITEURS | 192.168.10.60 | 192.168.10.61 | 192.168.10.62 | 40 |
| TELEPHONIE | 192.168.10.172 | 192.168.10.173 | 192.168.10.174 | 50 |
| DMZ | 192.168.10.236 | 192.168.10.237 | 192.168.10.238 | 60 |
| ADMIN | 192.168.10.220 | 192.168.10.221 | 192.168.10.222 | 99 |
| SYNC | 192.168.255.1/30 | 192.168.255.2/30 | Aucune | — |
Les adresses .124/.125 (POSTES) et .156/.157 (ENTREPOT) sont prises dans les plages d'adresses fixes exclues des étendues DHCP du cours Windows Server : vérifie qu'aucune imprimante ni borne ne les occupe, et note-les dans la documentation des adresses fixes.
Le VHID reprend le numéro du VLAN : facile à retenir, et unique sur chaque segment. L'adresse publique 203.0.113.17, celle que connaissent Internet, les nomades et le pare-feu de Mâcon, devient l'adresse virtuelle. C'est pour cela que l'opérateur a fourni un bloc de six adresses (chapitre 1).
Les deux machines virtuelles
pf2est une copie depf1en matériel virtuel : mêmes cartes, dans le même ordre (net0WAN survmbr1,net1trunk survmbr0,net2DMZ survmbr2), plus une quatrième cartenet3pour SYNC. Netgate est formel : les interfaces doivent être attribuées dans le même ordre sur les deux nœuds, sinon la synchronisation de configuration casse tout.pf2tourne sur un autre hôte,pve2: deux pare-feu sur le même hôte tomberaient ensemble. Dans Proxmox VE 9, une règle de haute disponibilité de type affinité entre ressources, en mode « séparer », empêche qu'ils se retrouvent sur le même nœud (cours Virtualisation).- L'interface SYNC est un câble direct entre un port de
pve1et un port depve2, chacun dans un pont dédié (vmbr3) : le trafic pfsync contient la table d'états de toute l'entreprise, il n'a rien à faire sur un réseau partagé. - Même version de pfSense, mêmes paquets.
Configurer pas à pas
L'ordre compte : on prépare les deux pare-feu, on active la synchronisation, puis on crée les adresses virtuelles sur le maître seulement. Prévois une fenêtre de maintenance : les adresses de pf1 changent.
1. Les adresses des interfaces. Sur pf1, chaque interface passe de la passerelle à son adresse propre (POSTES : 192.168.10.124/26, WAN : 203.0.113.18/29…). Sur pf2, installé comme au chapitre 2, les adresses de la colonne pf2. Les deux reçoivent leur interface SYNC.
2. Les règles de l'interface SYNC, sur les deux : Pass, any, source SYNC subnets, destination any, description « Synchronisation HA ». L'interface est un câble direct entre les deux pare-feu : on y autorise tout, pfsync comme XMLRPC.
3. La synchronisation, System > High Availability :
| Section | Champ | pf1 (maître) | pf2 (secours) |
|---|---|---|---|
| State Synchronization Settings (pfsync) | Synchronize States | Coché | Coché |
| Synchronize Interface | SYNC | SYNC | |
| pfsync Synchronize Peer IP | 192.168.255.2 | 192.168.255.1 | |
| Configuration Synchronization Settings (XMLRPC Sync) | Synchronize Config to IP | 192.168.255.2 | Vide : la configuration ne va que du maître vers le secours |
| Remote System Username, Password | Le compte administrateur de pf2 | — | |
| Select options to sync | Utilisateurs, certificats, règles, alias, NAT, IPsec, OpenVPN, adresses virtuelles, relais DHCP, résolveur DNS, portail captif… | — |
4. Les adresses virtuelles, sur pf1 uniquement : Firewall > Virtual IPs > Add, Type CARP, Interface POSTES, Address 192.168.10.126/26 (le masque du réseau), Virtual IP Password (un secret long), VHID Group 10, Advertising frequency : Base 1, Skew 0, description « Passerelle POSTES ». Une adresse virtuelle par interface du tableau. La synchronisation les recopie sur pf2 avec un décalage plus grand, qui en fait le secours.
5. Le NAT sortant. Les postes doivent sortir avec l'adresse virtuelle, sinon leurs connexions sur Internet portent l'adresse propre de pf1 et meurent à la bascule. Firewall > NAT > Outbound, mode Hybrid Outbound NAT rule generation, une règle : Interface WAN, Source 192.168.10.0/24 (et une autre pour 10.8.0.0/23), Translation : l'adresse virtuelle 203.0.113.17.
6. Tout ce qui utilisait l'adresse du WAN doit viser l'adresse virtuelle :
| Élément | À changer |
|---|---|
| Redirections de port | Destination : 203.0.113.17 (adresse virtuelle) au lieu de WAN address, qui désigne maintenant 203.0.113.18 |
| Serveur OpenVPN | Interface : l'adresse virtuelle CARP du WAN |
| Phase 1 IPsec | Interface : l'adresse virtuelle du WAN (le pare-feu de Mâcon vise 203.0.113.17) |
| Relais DHCP | CARP Status VIP : l'adresse virtuelle de POSTES ; le relais ne tourne que sur le maître |
| Tunnel WireGuard | Rien à lier : WireGuard écoute sur toutes les adresses du pare-feu et répond depuis celle que le pair a visée, ici l'adresse virtuelle (vpn.sorbier.example). Limite documentée par Netgate : en mode maintenance CARP, le nœud peut répondre depuis son adresse propre, et un NAT sortant ne corrige pas ce cas ; pour une bascule planifiée, éteins ou redémarre pf1 plutôt que de le passer en maintenance |
| Règles « WAN address » | Destination : l'adresse virtuelle |
Vérifier et tester
- Status > CARP (failover) : sur
pf1, toutes les adresses virtuelles en MASTER ; surpf2, en BACKUP. Une adresse MASTER des deux côtés signale que les annonces ne passent pas sur ce réseau (interface, VLAN ou règle). - Diagnostics > States sur
pf2: la table d'états se remplit des connexions depf1. - Les règles et alias créés sur
pf1apparaissent surpf2quelques secondes plus tard.
Le test qui compte : depuis un poste, un ping -t 192.168.10.179 et un gros téléchargement depuis Internet. Arrête pf1 (ou, plus proprement, Status > CARP (failover) > Enter Persistent CARP Maintenance Mode : le maître cède ses adresses volontairement). Le ping perd une à trois réponses, le téléchargement marque une pause et continue, parce que pf2 connaît déjà la connexion grâce à pfsync. Sors du mode maintenance : pf1 redevient maître.
Exercices
Exercice 1 sur 3 Adresser une nouvelle interface en grappe Réussi À revoir
Le VLAN 70 CAMERAS (192.168.10.200/29, passerelle 192.168.10.206) du chapitre 3 doit être pris en charge par la grappe.
- Combien d'adresses reste-t-il pour les caméras ? Est-ce suffisant pour quatre caméras ?
- Donne les adresses de
pf1, depf2, l'adresse virtuelle et le VHID, selon la convention de Sorbier. - Sur quel pare-feu crées-tu le VLAN, l'interface et l'adresse virtuelle ?
Voir la réponseMasquer la réponse de l'exercice 1
- Un /29 offre 6 adresses utilisables (
.201à.206). Trois sont prises par la grappe : il en reste 3 (.201à.203), ce qui ne suffit pas pour quatre caméras. Il faut un /28 (14 adresses) ; il n'en reste aucun de libre dans192.168.10.0/24(le dernier,.240/28, porte le réseau de stockage), donc on sort du plan : par exemple192.168.12.0/28, de.0à.15. - Avec
192.168.12.0/28: passerelle (adresse virtuelle)192.168.12.14,pf1en.12,pf2en.13, VHID 70. (Avec le /29 d'origine : virtuelle.206,pf1.204,pf2.205.) - Le VLAN et l'interface se créent sur les deux pare-feu, dans le même ordre (les interfaces ne sont pas recopiées par la synchronisation), chacun avec son adresse propre. L'adresse virtuelle se crée sur
pf1seulement : XMLRPC la recopie surpf2. Les règles de la nouvelle interface s'écrivent surpf1.
Tu avais trouvé ?
Exercice 2 sur 3 Les connexions qui meurent à la bascule Réussi À revoir
Lors du test, les postes gardent leur passerelle (le ping reprend), mais toutes les connexions vers Internet sont coupées et doivent être relancées. Sur pf2, la table d'états contient bien les connexions de pf1.
- Quelle est la cause la plus probable ?
- Où corriges-tu ?
Voir la réponseMasquer la réponse de l'exercice 2
- Le NAT sortant traduit encore les connexions avec l'adresse propre de
pf1(203.0.113.18, WAN address), et non avec l'adresse virtuelle. Après la bascule,pf2ne possède pas203.0.113.18: les réponses d'Internet, adressées à cette adresse, n'arrivent plus. Les états sont recopiés, mais ils décrivent une traduction quepf2ne peut pas honorer. - Firewall > NAT > Outbound sur
pf1: mode Hybrid, règle(s) qui traduisent192.168.10.0/24(et les réseaux VPN) vers l'adresse virtuelle203.0.113.17. La synchronisation recopie la règle surpf2.
Tu avais trouvé ?
Exercice 3 sur 3 Deux maîtres Réussi À revoir
Après la mise en place, Status > CARP (failover) montre l'adresse virtuelle de VISITEURS en MASTER sur pf1 et sur pf2. Les autres adresses sont correctes.
- Quel est le danger ?
- Que vérifies-tu ?
Voir la réponseMasquer la réponse de l'exercice 3
- Deux équipements répondent pour
192.168.10.62: conflit d'adresses, les tables ARP des invités changent sans cesse, connexions coupées au hasard. On parle de split brain sur ce réseau. - Les annonces CARP de
pf1n'arrivent pas àpf2sur le VLAN 40 : vérifier que l'interface VISITEURS depf2est bien survtnet1.40et active, que le VLAN 40 passe sur le trunk verspve2, que les deux pare-feu utilisent le même VHID et le même mot de passe pour cette adresse (recopiés par XMLRPC si la synchronisation des adresses virtuelles est cochée), et qu'aucune isolation des clients ou filtrage de multidiffusion du switch ou des bornes ne bloque le protocole IP 112 entre les deux pare-feu.
Tu avais trouvé ?