Modification du logiciel
original ajoutant diverses fonctionnalités, dont la gestion et la supervision d'état intégrale (Slave/Master) d'un serveur ayant plusieurs interfaces réseaux.
Dans le domaine de la redondance de pare-feu (par ex) la version VRRPD originale est imparfaite, lorsqu'une machine subit une défaillance sur une interface le démon VRRPD bascule la machine BACKUP en state MASTER mais laisse en état les autres interfaces ce qui provoque des flux asymétriques. De plus Vrrpd n'ayant aucun système de contrôle de l'état physique d'une interface il peut rester maître alors que le câble réseau est, par exemple, débranché.
Il y a un deuxième problème dans la version originale, le changement d`état ne provoque aucune action sur la machine, il n'est pas possible d'exécuter un script ou un binaire lors d'une bascule.
Téléchargement VRRPD avec les modifications:
ICI
Plus d'infos
ICI
#########################################
Ma problématique: Redondance applicative ou de firewalls netfilter grâce au protocole VRRP
Le protocole VRRP (Virtual Router Redundancy Protocol - protocole de redondance des routeurs virtuels)
définit un protocole d'élection qui affecte dynamiquement la responsabilité du routage à l'un des
routeurs VRRP du réseau local (routeur maître). Le processus d'élection permet un basculement
dynamique de la responsabilité de routage en cas d'indisponibilité du routeur maître.
J'ai testé deux logiciels qui utilisent ce principe.
UCARP: (Une implémentation de CARP indépendante d'OpenBSD) Le changement d'état est scriptable,
mais UCARP ne fonctionne pas avec une Mac virtuelle, ce qui pose problème avec les équipements faisant du cache ARP ou ayant une protection contre l'ARP spoofing.
En cas de bascule, le temps de rétablissement doit aussi tenir compte de la purge ARP des hôtes du réseau, mise à jour dont le temps est variable et difficilement maitrisable.
Sur un réseau simple cela fonctionne bien, tous les postes reçoivent le gratuitous ARP et mettent à jour leur cache, mais sur un réseau complexe avec plusieurs routeurs et switchs cela ne fonctionne pas correctement, une partie du parc conservant l’ancienne adresse mac.
En ayant une MAC virtuelle, il n'y aurait pas ce problème.
VRRPD: Avec une Mac virtuelle, mais fonctionne sans scripts de changement d'état, les interfaces perdent aussi leurs routes lors du changement d'adresse Mac.
De plus les processus sont indépendants (voir plus bas) ce qui provoque des problèmes de flux asymétriques entre les interfaces.
Il existe aussi heartbeat ou keepalived (basé sur VRRP pour ce dernier), il est possible de lancer des scripts selon l'état comme dans UCARP, mais malheureusement ils fonctionnent sans MAC virtuelle.
Dans UCARP et VRRPD il n'est pas possible par défaut de surveiller toutes les interfaces ainsi que les processus
donc ça se complique en cas de panne d'une interface
Par exemple pour Vrrpd ou bien Ucarp lorsqu'une machine subit une défaillance sur une interface, le démon bascule la carte défaillante mais laisse en état les autres,les flux deviennent donc asymétriques
Voici un exemple de cette problématique avec Vrrpd, pour l’instant la machine vrrp1 est maître et elle traite tous les flux
Cliquez sur une image pour l'agrandir

Maintenant si on coupe la liaison eth1 du serveur Maître, le serveur slave ne reçoit pas d’annonce vrrp et décide de devenir maître sur son interface eth1, par conséquence plus rien ne fonctionne.
De plus les flux deviennent asymétriques lors du retour à la normale, ce qui n’est pas problématique pour un routeur, mais pose des difficultés à un pare-feu (s‘il est de type statefull) car les tables d'états de sessions ne sont plus cohérentes.
Cliquez sur une image pour l'agrandir

La nouvelle version:
Ce problème est maintenant solutionné par l'option -M qui bascule automatiquement tous les processus
VRRPD sur le MASTER en STATE BACKUP en cas de dysfonctionnement (processus VRRPD manquant sur les autres
interfaces, Link down, etc …) le système de monitoring supervise l'état des interfaces et communique le changement de statut sur les autres interfaces.
Pour résumer l'option -M synchronise le statut des processus VRRPD sur la même machine et ajoute la supervision des dysfonctionnements
J’ai aussi ajouté trois commandes au programme vrrpd (-U –D équivalentes aux commandes UCARP)
Usage: vrrpd -i ifname -v vrid [-f piddir] [-s] [-a auth] [-p prio] [-nh] ipaddr
-U : (-U ): run "file" to become a master)
-D : (-D ): run "file" to become a backup)
-M : (-M x) Monitoring process and Network (Max 9)
Avec U et D il est maintenant possible de passer une commande lors d'un changement d'état VRRP, elle peut tout
simplement lancer un script (contenant des routes ou ce que l'on veut, par exemple relancer un service)
Sur la machine 1:
./vrrpd -i eth0 -v 51 ipadrr 10.16.1.200 -M 2 -U /etc/scripts/MASTER.sh -D /etc/scripts/DOWN.sh
./vrrpd -i eth1 -v 52 ipadrr 10.17.1.200 -M 2 -U /etc/scripts/MASTER.sh -D /etc/scripts/DOWN.sh
Sur la machine 2:
./vrrpd -i eth0 -v 51 ipadrr 10.16.1.200 -M 2 -U /etc/scripts/MASTER.sh -D /etc/scripts/DOWN.sh
./vrrpd -i eth1 -v 52 ipadrr 10.17.1.200 -M 2 -U /etc/scripts/MASTER.sh -D /etc/scripts/DOWN.sh
Signifie que l'IP virtuelle 10.16.1.200 dans le vird 51 passera de la machine maitre à Backup en cas de problème, le M 2 (2 étant le nombre de processus Vrrpd sur la même machine) indique qu'en cas de
difficultés sur eth0 ou bien eth1 la machine basculera les deux interfaces, la lecture de la configuration est identique pour eth1 (10.17.1.200 Vrid 52).
Client atropos : J’ai aussi ajouté un client (atropos) permettant de visualiser et de modifier l'état d'une machine. Utilisable, par exemple, dans un script de supervision qui lorsqu'il détecte une anomalie bascule intégralement la machine en state backup.
La commande "atropos --backup" passe tous les processus vrrpd de la machine en backup et "atropos --state" affiche le status du serveur.
Compilation:
Vrrpd nécessite: libc6-dev
Installation:
1. Décompresser le fichier source
2. cd dans le répertoire
4. make clean
5. make
6. copier vrrpd et atropos dans votre path (e.g /usr/sbin)
Il existe aussi un script basic de compilation et d'installation (install.sh)
Troubleshooting:
Quand l'état de Vrrpd n'est pas stable:
Il est parfois nécessaire de désactiver le spanning tree (aussi appelé STP) sur les ports de certains swich accueillant les machines en VRRP.
Idem pour l'auto négociation de vitesse des ports sur l'équipement, je vous conseil plutôt de la fixer.
------------------------------------------
Frederic Bourgeois stealth @ altern.org
http://www.traceroot.fr