wiki/HowtoVRRP.md
2017-05-10 14:33:56 +02:00

107 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
categories: network
title: Howto VRRP
...
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*. Lobjectif principal est de permettre une bascule réseau sur un équipement secondaire en cas dincident. 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_.
## Installation
Le [paquet officiel vrrpd](https://packages.debian.org/jessie/vrrpd) officiel pose différents soucis, nous utilisons à la place un [paquet avec plusieurs patchs](#patchs-sur-paquet-patchés) disponible sur le [repository Evolix](http://pub.evolix.net/jessie/) :
~~~
# apt install vrrpd=1.0-2.evolix
~~~
> *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.
### Patchs sur paquet patchés
Notre paquet **vrrpd** intègre différents patches, notamment un script permettant d'utiliser les *macvlan* :
~~~
- debian/patches/010-vrrpd-1.0_to_1.0-1exp1
- debian/patches/120-orig_prio.patch
- debian/patches/150-fix_vrid_check.patch
- debian/patches/series
- debian/patches/100-external_script_enhanced.patch
- debian/patches/170-log_format.patch
- debian/patches/130-receive_multicast.patch
- debian/patches/140-vrrp_switch_macvlan.patch
- debian/patches/011-fix_compile_warnings.patch
- debian/patches/012-typo_help_auth_pw.patch
- debian/patches/110-slave_init_state.patch
- debian/patches/160-dont_handle_virtual_ip.patch
- [...]
- debian/vrrp_switch_macvlan
- debian/sysctl.vrrpd
- debian/README.macvlan
~~~
L'utilisation des *macvlans* permet d'avoir des adresses MAC spécifiques à VRRP. Pour cela, il faut :
* utiliser le script `/etc/vrrpd/vrrp_switch` (installé par défaut)
* 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/slave
* ne pas utiliser l'option `-n`
## Utilisation
Il faut au préalable ajuster des paramètres _sysctl_ (voir `/usr/share/doc/vrrpd/sysctl.vrrpd`) :
~~~
net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
~~~
Il faut aussi ajuster ce paramètre sysctl pour pouvoir écouter sur une IP vrrp en mode slave (donc non présente localement):
~~~
net.ipv4.ip_nonlocal_bind=1
~~~
Puis, on lance par exemple la commande suivante :
~~~
# vrrpd -i eth0 -x -D -d 10 -v 42 -p 100 -a pw/0xPASSWORD -l foo 192.0.2.42/27
~~~
Détails des options utilisées :
* `-i eth0` : se binder sur l'interface _eth0_
* `-x` : ne pas manipuler d'interface mais déléguer au script `vrrp_switch`
* `-D` : lancer en mode démon
* `-d 10` : intervalle d'avertissement en seconde (défaut : 1)
* `-v 42` : identifiant VRID (il doit être unique sur un même segment réseau)
* `-p 100` : priorité entre 1 et 255 (défaut : 100)
* `-l foo` : nom de l'instance
* `-a pw/OxPASSWORD` : mot de passe en hexa
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}`:
~~~
$ ifconfig vrrp_2_eth0
vrrp_2_eth0 Link encap:Ethernet HWaddr 00:00:5e:00:01:2a
inet adr:192.0.2.42 Bcast:0.0.0.0 Masque:255.255.255.224
adr inet6: fe80::200:5eff:fe00:102/64 Scope:Lien
[...]
~~~
Sur une autre machine, après avoir également ajusté les paramètres _sysctl_, on lance la même commande avec une priorité plus faible :
~~~
# vrrpd -i eth0 -x -D -d 10 -v 42 -p 90 -a pw/0xPASSWORD -l foo 192.0.2.42/27
~~~
Cette machine va rester en état _slave_ tant qu'elle capte des messages d'avertissement de la machine _master_.
## Logs
* Des logs sont envoyés à syslog
* L'historique des changements d'états dans `/var/log/vrrpd/state.$vrid`
* L'état courant se trouve dans /var/run/vrrpd/vrrp-${instance_name}
* Un fichier PID est dans `/var/run/vrrpd_${instance_name}_${vrid}.pid`