Vous êtes ici : Linux VRRP IP failover HA Virtual Router Redundancy Protocol
Frédéric Bourgeois Rennes

Advanced VRRPD : Download Download News News

VRRP daemon (vrrpd) is an RFC 2338 compliant implementation of the Virtual Router Redundancy Protocol (VRRP). The Virtual Router Redundancy Protocol is designed to eliminate the single point of failure associated with statically routed networks by automatically providing failover using multiple LAN paths through alternate routers.

As specified in RFC 2338, VRRP uses an election protocol that dynamically assigns responsibility for a virtual router to one of the VRRP routers on a LAN. When a VRRP router controls the IP address(es) associated with a virtual router, it is called the Master. The Master continues to forward packets sent to these IP addresses until it has a problem that causes the VRRP routers to hold an election. The election process provides dynamic failover by electing a new Master should the existing Master become unavailable.

The virtual router associated with each alternate path under VRRP uses the same IP address and MAC address as the routers for other paths. As a result, the host's gateway information does not change, no matter what path is used. Because of this design, VRRP-based redundancy significantly reduces administrative overhead when compared to redundancy schemes that require hosts to be configured with multiple default gateways.

The primary function of the Virtual Router Redundancy Protocol is to provide routing redundancy for specific IP addresses. In addition to this primary function, RFC 2338 also states that the protocol should:

* Minimize the duration of black holes.
* Minimize the steady state bandwidth overhead and processing complexity.
* Function over a variety of multiaccess LAN technologies that support IP traffic.
* Provide for election of multiple virtual routers on a network for load balancing.
* Support multiple logical IP subnets on a single LAN segment.

This version includes many improvements like monitoring other vrrpd processes (sync all vrrpd states master/backup), eth link down/up, and executing a command when changing back and forth from master to backup.
This is very usefull since you can make scripts to be executed at the change time to configure or shutdown the addresses, you can also use atropos program for view or change global state.

22/01/2012

Vrrpd include now:
    * VRRPD - when an interface change his state to backup, or master, them can have associated up/down scripts
    * VRRPD - Ethtool supervision (link up/down)
    * VRRPD - multi-interfaces - The Master communicate his state to all another process. If for some reason one process be backup, link down for example, all the system change for backup state.
    * VRRPD - Magic packet - If you can't use virtual mac adress, Vrrpd send gratuitous ARP and it can also send magic packet from virtual to gateway
    * VRRPD - Is now Compatible with vlan interfaces - with one vmac by vlan -
    * VRRPD - Optional subnet mask for the VIP address
    * Atropos client - You can use atropos for change or/and know the master's state (for example in supervision script)
Virtual Router Redundancy Protocol (protocole de redondance de routeur virtuel, VRRP) est un protocole non propriétaire redondant décrit dans la RFC 3768 dont le but est d'augmenter la disponibilité de la passerelle par défaut servant les hôtes d'un même sous-réseau.

Modification du logiciel original ajoutant diverses fonctionnalités, notamment:

- Gestion et la supervision d'état intégrale (Slave/Master) d'un serveur ayant plusieurs interfaces réseaux.
- Gestion de scripts lors des bascules.
- Gestion de l'état des interfaces réseaux (link up/down).
- Client permettant de visualiser et de modifier l'état d'une machine.

-------------
Vous utilisez déjà cette version de VRRPD pour faire de la haute disponibilité ?
Je recherche une doc avec un cas concret de réalisation, j'ai beaucoup de demandes et pas le temps de la réaliser, si vous avez quelque chose merci de me le signaler.
--------------

Dans le domaine de la redondance de pare-feu (par exemple) 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.
Plus d'infos ICI

#########################################

Ma problématique: A l'origine je souhaitais faire de la 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 maîtrisable.
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

Vrrp UP
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

Vrrp Down

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

Un autre avantage est de pouvoir installer cette solution sans paquet sur des machines déjà en production, les binaires inclus dans le tar fonctionnent par défaut avec Debian etch, lenny, ubuntu, et CentOS (testés sur la release 5.2) ainsi que sur d'autres distributions signalées par des utilisateurs.

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 10.16.1.200 -v 51 -M 2 -U /etc/scripts/MASTER.sh -D /etc/scripts/DOWN.sh
./vrrpd -i eth1 10.17.1.200 -v 52 -M 2 -U /etc/scripts/MASTER.sh -D /etc/scripts/DOWN.sh

Sur la machine 2:
./vrrpd -i eth0 10.16.1.200 -v 51 -M 2 -U /etc/scripts/MASTER.sh -D /etc/scripts/DOWN.sh
./vrrpd -i eth1 10.17.1.200 -v 52 -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 maître à 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.
-U lance le script MASTER de votre choix
-D lance le script BACKUP de votre choix
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.
Dans le cas d'un pare-feu il est nécessaire d'autoriser le protocole 112 et le protocole 2 en émission de vos machines
Il est aussi préférable d'avoir une bonne gestion du temps sur vos machines, en utilisant NTP par exemple.

Je souhaite avoir des IPs supplémentaires ou des vlans bénéficiant de Vrrp:
Il suffit d'ajouter dans votre script Master les configurations nécessaires:
Ex:
Dans le script Master:
echo "Montage int rso 200-201-210 MASTER VLAN.."
ifconfig eth0.200 192.168.200.254 netmask 255.255.255.0 up
ifconfig eth0.201 192.168.201.254 netmask 255.255.255.0 up
ifconfig eth0.210 192.168.210.254 netmask 255.255.255.0 up

N'oubliez surtout pas de les démonter dans le script Backup c'est nécessaire en cas de bascule:

Dans le script Backup:
vconfig rem eth0.200
vconfig rem eth0.201
vconfig rem eth0.210

Idem avec les IP alias:

Master:
ifconfig eth2:1 192.168.200.13 netmask 255.255.255.0 up
Backup:
ifconfig eth2:1 down

La mac virtuelle s'ajoute sur toutes les IPs crées, il est ainsi possible de travailler avec des dizaines d'interfaces secourues, vous pouvez même mettre une IP inutile dans vrrpd (ipadrr), qui est une interface invisible, et n'utiliser que vos IP alias ou vlan afin de pouvoir les manipuler facilement, par exemple avec l'outil tcpdump. Cependant n'oubliez pas de les démonter dans le script Backup sous peine de vous retrouver avec des interfaces avec la même IP et la même Mac de chaque côté avec un résultat catastrophique garanti ...

Utiliser VRRPD dans une VM:
Les VM n'autorisent pas l'accès aux informations hardware des cartes réseaux. Dans ce cas Vrrpd fonctionne mais ne peut plus détecter la perte de link d'une interface. Pour la même raison l'option -n (pas de mac virtuelle) est obligatoire sur ce type de plate-forme
------------------------------------------


Mes projets :


Mon Github


e2guardian

Tous les articles

Copinage:


Me payer un café ?

Offer me a coffee ?


Si vous utilisez régulièrement mes logiciels:
- Vrrpd
- Ftp-proxy
- Livemamecab
- DansGuardian
- etc
Vous pouvez participer à l'achat de café et à l'hébergement du site Vous n'avez pas besoin d'un compte Paypal pour faire un don.
Like my work ? Donate !
Easy with or without a PayPal account.


Proverbe aléatoire à méditer, ou pas :
On peut obtenir beaucoup plus avec un mot gentil et un revolver, qu'avec un mot gentil tout seul. Al Capone
- [ Powered by du bricolage en PHP et du café | Thème : Light Blue par Vanquish ] -
© Frédéric Bourgeois Rennes, tous droits réservés - Reproduction interdite.

Administrer
Attention les informations ne sont données qu'à titre indicatif (surtout le proverbe).