Le protocole [VRRP](https://www.ietf.org/rfc/rfc3768.txt) permet à plusieurs équipements, sur un même segment réseau, de partager une même adresse IP en gérant des états *master*/*slave*. L’objectif principal est de permettre une bascule réseau sur un équipement secondaire en cas d’incident. Sous OpenBSD, on utilise un dérivé de ce protocole : [CARP](HowtoOpenBSD/CARP). Sous Linux, il existe plusieurs implémentations d'un démon _vrrpd_.
Le [paquet officiel vrrpd](https://packages.debian.org/jessie/vrrpd) pose différents soucis, nous utilisons à la place un [paquet avec plusieurs patchs](#patchs-sur-paquet-patchés) disponible sur le [dépôt Evolix](http://pub.evolix.net/jessie/) :
> *Note* : Nous avons entrepris la ré-écriture d'un démon _vrrpd_ : [uvrrpd](https://forge.evolix.org/projects/uvrrpd) mais nous ne l'utilisons pas encore en production.
* utiliser l'option `-x` pour interdire à vrrpd de manipuler les interfaces en déléguant cette opération au script. Dans ce mode, vrrpd reçoit et émet des paquets VRRP et appelle /etc/vrrpd/vrrp_switch lors des changements d'états _master_/_backup_
Si l'on utilise [minifirewall](https://gitea.evolix.org/evolix/minifirewall) comme pare-feu, il y a des actions à réaliser en fonction de la version de minifirewall.
Vérifier votre version de inifirewall avec la commande suivante : `/etc/init.d/minifirewall version`.
#### Version 22.03 ou ultérieure
Il faut simplement avoir `SYSCTL_RP_FILTER='0'` dans `/etc/default/minifirewall`.
Ajouter une autorisation dans `/etc/minifirewall.d/vrrpd` :
* Il faut ajouter la commande suivante dans sa configuration `/etc/default/minifirewall`, pour s'assurer que les paramètres soient gardés après redémarrage de minifirewall :
~~~
sysctl -p /etc/sysctl.d/vrrpd.conf --quiet
~~~
* Et il faut également commenter l'activation du rp_filter dans `/etc/init.d/minifirewall`, et ajouter sa désactivation totale :
**Attention** : ne pas simplement commenter le bloc ou modifier le "echo 1" de l'activation en "echo 0", mais bien commenter le premier bloc et ajouter le second bloc pour bien expliciter le changement de configuration.
Au bout de quelques dizaines de secondes, vrrpd va passer dans l'état _master_ et créer l'interface `vrrp_${vrid}_${interface}` avec l'adresse IP et l'adresse MAC `00:00:5e:00:01:${vrid}`:
Pour changer la priorité du processus il suffit de tuer l'actuel et de relancer la commande avec la nouvelle priorité. Si ça doit être persistent, il faut modifier
#### systemd
On pourra utiliser une unité systemd pour gérer VRRP. On conseille d'avoir une unité pour chaque IP gérée, en utilisant le **VRID** comme élément différenciant.
Vous pouvez gérer avec les commandes habituelles `start` et `stop`.
Vous pouvez consulter les logs via journald : `journalctl -u vrrp-42`
Pour avoir une vue instantanée d'une IP :
~~~
# cat /var/run/vrrpd/vrrp-lan-2-10
VRRP - lan-2-10
Group 42
State is slave
Virtual IP address is 192.0.2.10/27
~~~
Pour changer la priorité du processus il faut modifier l'unité systemd (généralement dans `/etc/systemd/system/vrrp-42.service`), puis `systemctl daemon-reload`, puis `systemctl restart vrrp-42.service`.
Pour faire en sorte que l'adresse IP bascule sur le serveur slave, il suffit de couper vrrpd sur la machine _master_. La machine _slave_ détectera alors qu'il est tout seul et prendra l'adresse IP.