Common Address Redundancy Protocol (CARP)

juin 25, 2013  |   Blog   |     |   Commentaires fermés sur Common Address Redundancy Protocol (CARP)

Introduction

CARP (Common Address Redundancy Protocol) est un équivalent libre sous licence BSD de HSRP (Hot Standby Router Protocol), VRRP (Virtual Router Redundancy Protocol) ou FSRP (Foundry Standby Router Protocol).
Ce protocol permet, comme son nom l’indique, d’avoir un redondance matérielle derière la même adresse IP.
Cette fonctionnalité, permet générallement d’exposer plusieurs routeurs derrière la même adresse IP. Cet ensemble de routeurs se nomme alors un “Groupe de redondance” et est composé d’un routeur “Maitre” et de un ou plusieurs routeur(s) “Esclave(s)”. De cette facon, si le routeur maitre vient à défaillir, une élection sera faite afin de définir quel esclave assumera le rôle de maitre.

Fonctionnement

Dans un premier temps, il y a un pré-requis au fonctionnement de ce protocole. Il est impératif, que les différents membres du groupe de redondance soient sur le même segment réseau.
Une fois ce pré-requis rempli, le routeur assumant le rôle de maitre, “détiendra” l’adresse IP partagée.
Afin de détenir cette adresse, le maitre devra :
Répondre aux requêtes ARP pour cette adresse
Envoyer périodiquement des annonces sur le réseau afin de notifier aux esclaves qu’il est toujours actif.

Dans le cas ou le maitre viendrait à défaillir, l’éléction du nouveau maitre se ferait sur 2 critères :
L’esclave ayant la valeur “advbase” (valeur définie dans la suite de cet article) la plus faible
L’esclave ayant la valeur “advskew” (valeur définie dans la suite de cet article) la plus faible

Le nouveau maitre prendra alors à son tour la charge de :
Répondre aux requêtes ARP pour l’adresse partagée
Envoyer périodiquement des annonces sur le réseau afin de notifier à ses pairs qu’il est toujours actif.

Fonctionnalités et configuration

Commencons par lister les principales fonctionnalités :
Dans le cas de l’utilisation d’une interface carpdev, il n’est pas nécessaire d’avoir une IP sur l’interface physique du routeur.
CARP est compatible pour IPv4 et IPv6
Plusieurs groupes de redondances peuvent être mis en place sur le même segment de réseau (grâce au champs Virtual Host ID)
Un même routeur peut appartenir à plusieurs groupes de redondances
Dans une optique sécuritaire, il est possible de protéger un groupe de redondance par l’utilisation d’un mot de passe (pour éviter le spoofing des annonces)

La configuration de CARP peut être effectuée avec ifconfig de la facon suivante :

# ifconfig carpN create

# ifconfig carpN vhid xxx [pass mdp] [carpdev ethX] [advbase xxx] [advskew xxx] [state state] \
[group | -group group] aa.bb.cc.dd netmask ee.ff.gg.hh

Explication des différents paramètre (les paramètres munies de * sont optionnels) :

  • carpN : Nom de l’interface à créer/configurer (ex: carp0)
  • vhid xxx : Numéro correspondant au groupe de redondance compris entre 1 et 255.
  • * pass mdp : Mot de passe à utiliser pour chiffrer les données de contrôle.
  • * carpdev ethX : Interface physique à utiliser pour communiquer. Si non fournie, le système tente de la déterminer grâce aux adresses définies sur les interfaces physiques.
  • * advbase : Temps entre l’emission de 2 notifications de fonctionnement du master en seconde. Par défaut, 1 seconde.
  • * advskew : Priorité lors de l’élection d’un nouveau maitre. Plus la valeur est faible, plus l’esclave a de chance de devenir maitre. Par défaut cette valeur vaut 0.
  • * state : Défini l’état de l’interface. Peut-être init, backup ou master.
  • * group / -group : Permet de faire des groupes d’interfaces virtuelles afin de faire basculer plusieurs interfaces en même temps.
  • aa.bb.cc.dd : IP partagée pour le groupe de redondance
  • mask ee.ff.gg.hh : Masque sous réseau de l’IP partagée.

En dehors de ces paramêtres, il est possible de définir d’autres paramêtres au niveau de sysctl :
net.inet.carp.allow : Permet d’accepter les paquets CARP (par défaut : 1)
net.inet.carp.preempt : Permet de basculer sur un autre membre du groupe dans le cas ou celui-ci ait de meilleures valeurs d’advbase et d’advskew. (par défaut : 0)
De plus, si une interface physique rattachée à l’interface carp tombe, cette option permet de placer la valeur de advskew des interfaces carp à 240
net.inet.carp.log : Active le log des paquets CARP en erreur (par défaut : 0)
net.inet.carp.arpbalance : Active le load balancing du traffic sur plusieurs membre d’un groupe de redondance au niveau ARP. (par défaut : 0)

Systèmes compatibles

Ce protocole (issu du monde BSD) est disponible pour les distributions BSD (OpenBSD, FreeBSD et NetBSD) au niveau noyau (si activé) ainsi que pour les distributions Linux par le biais de uCARP

Enfin, il faut noter les limites de CARP :
CARP ne synchronise pas de données. Il n’y a donc aucune conservation de session lors d’une bascule.
CARP ne synchronisant pas les sessions TCP, il n’évite pas l’interruption de service mais permet de limiter la durée d’interruption de service.

Bibliographie

http://fr.wikipedia.org/wiki/Common_Address_Redundancy_Protocol
http://www.netbsd.org/docs/guide/en/chap-carp.html
http://www.freebsd.org/doc/en/books/handbook/carp.html
http://www.openbsd.org/faq/pf/fr/carp.html
http://www.techopedia.com/definition/25696/common-address-redundancy-protocol-carp

Les commentaires sont fermés.