CARP et OpenBSD
Par fpl le mardi 27 mars 2007, 07:33 - Général - Lien permanent

Me voilà lancé dans quelques tests d'OpenBSD. Pourquoi donc ?
- D'abord parce je suis tombé sur le numéro hors série de Linux Magazine spécial *BSD
- OpenBSD jouit d'une très bonne réputation sur le plan de la sécurité (récemment, le projet a annoncé une vulnérabilité exploitable à distance, la deuxième trouvée en 10 ans !)
- Enfin pour ses fonctionnalités réseaux natives (OpenOSPFd, OpenBGPd, CARP) qui m'interessent dans le cadre d'un de mes projets professionnels
C'est justement CARP qui m'interesse particulièrement. Common Address Redundancy Protocol a été développé comme une alternative à HSRP de Cisco, et de VRRP, la déclinaison de HSRP standardisée par l'IETF. CISCO ayant fait valoir un brevet, le projet OpenBSD s'est lancé dans la mise au point de CARP, son propre protocole.
Le problème de CARP, c'est qu'à en croire les développeurs, le meilleur des manuels c'est le code. En tout cas la doc n'est pas des plus limpides.
Voilà un résumé de ce que j'en ai compris.
Routeur A (192.168.0.11) et Routeur B (192.168.0.12) sont connectés au même LAN. Ils ont passerelles de sortie du LAN l'un en secours de l'autre. Les machines connectées au LAN doivent utiliser une adresse de passerelle de sortie (et une seule). Celle-ci sera donc une interface virtuelle (VIP) (192.168.0.1) qui se promènera sur les deux passerelles.
CARP crée une interface réseau "virtuelle", avec son adresse MAC virtuelle sur chacun des routeurs
Le protocole CARP s'appuie sur des échanges multicast IP sécurisés entre les machines partageant la VIP, dans mon exemple, routeurs A et B.
CARP peut adopter deux fonctionnements :
- CARP élit un MASTER parmi les noeuds. Les autres sont des BACKUP prêts à devenir MASTER en cas de problème sur le serveur MASTER. Il s'agit du fonctionnement standard.
- CARP répartit la charge entre les noeuds grâce à la fonction
arpbalance(je n'ai pas encore testé).
Concrètement le paramétrage est assez simple. Reprenons mon exemple avec Routeur A et Routeur B et considérons que leur interface connectée au LAN sont fxp0.
routeurA #sysctl net.inet.carp.allow=1
routeurA #sysctl net.inet.ip.forwarding=1
routeurA #ifconfig carp0 create
routeurA #ifconfig carp0 192.168.1.254 255.255.255.128 192.168.1.255 \
advbase 1 advskew 1 carpdev fxp0 vhid 1 pass 'secret-partage'
routeurB #sysctl net.inet.carp.allow=1
routeurB #sysctl net.inet.ip.forwarding=1
routeurB #ifconfig carp0 create
routeurB #ifconfig carp0 192.168.1.254 255.255.255.128 192.168.1.255 \
advbase 1 advskew 1 carpdev fxp0 vhid 1 pass 'secret-partage'
Cette configuration qu'on pourrait qualifier de "Regular/Backup" ne favorise aucun routeur lors des élections (aucune préférence n'est définie pour le MASTER). De plus, après une bascule, et même si l'ancien MASTER redevient opérationnel, la bascule arrière n'aura pas lieue tant que le nouveau MASTER ne sera pas défaillant.
On peut favoriser un noeud lors de l'élection du master (raaaah de la fraude électorale !) simplement en augmentant la valeur du paramètre advskew des backup.
On peut forcer une ré-élection lors de l'arrivée d'un noeud, en particulier pour forcer le retour sur le serveur préféré. Pour cela, il faut lancer la commande sysctl net.inet.carp.preempt=1 sur le(s) noeud(s) dont le retour doit provoquer la réelection. Cette même option semble utilisée pour les routeurs disposant de plusieurs VIP : si l'une des VIP n'est plus master, toutes les autres interfaces carp passent également à l'état backup. Mais je ne l'ai pas vérifié.
Sources :
- OpenBSD FAQ about CARP
- OpenBSD CARP Manual Page
- OpenBSD ifconfig Manual Page
- UCARP is a portable implementation of the CARP protocol
- Firewall Failover with pfsync and CARP
- Failover Firewalls with OpenBSD and CARP
- OpenBSD-France (tutoriaux et mailing-list).
- Un cours français concernant OpenBSD 3.7 publié par Hapsis




Commentaires
Salut salut
j'aurais quelques questions a te poser si tu as le temps d'y repondre
voila, je suis en stage dans une entreprise, et le projet que je dois faire est le suivant : Utiliser le protocol CARP de façon a ce que si un proxy est defaillant, le second proxy passe en maitre. Jusqu'ici tout va bien, mais le probleme c'est que je suis novice, et j'ais du mal ^^'
Si tu veux bien, j'aimerais que tu m'explique comment installer ce protocol ( sous debian )
merci a toi
apt-get update && apt-get install ucarp
?
merci, mais le truc c'est que je n'ais pas accés a internet depuis l'ordi debian. donc je dois tout transferer. enfin, jai reussi, mais pour compiler le dossier, il me faut GCC...
je ne le trouve pas, les liens que j'ai pu voir me mene sur des site où je ne trouve pas ce telechargement ...
^^ j'ais trouvé GCC, mais pour le compiler, il faut GCC haha ... petage de plombs
J'ai jamais installé CARP sur un Linux mais je suis pas certain que l'implémentation soit bien maintenue.
Sous linux tu devrais peut être regarder du cote de ha (heartbeat notamment) qui est usine à gaz à côté de CARP mais mieux maintenu.
Si tu veux vraiment utiliser CARP, utilise OpenBSD
même pas via un proxy ?
Sinon le mieux est que tu récupères le DVD debian et utiliser son repository pour ton install sinon tu vas galérer
Le gros intérêt quand même d'avoir un accès internet depuis une debian (meme restreint au seul répository debian) c est la gestion des packages et des mises à jours de sécurité !
A mon avis c'est même indispensable dans le cadre d'une politique de maitrise des risques SI