wiki/HowtoVRRP.md

107 lines
4.2 KiB
Markdown
Raw Normal View History

2017-05-05 12:09:19 +02:00
---
categories: network
title: Howto VRRP
...
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
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_.
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
## Installation
2016-12-29 11:25:39 +01:00
2017-05-05 12:38:12 +02:00
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/) :
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
~~~
# apt install vrrpd=1.0-2.evolix
~~~
2017-05-05 12:38:12 +02:00
> *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.
2017-05-05 12:09:19 +02:00
### Patchs sur paquet patchés
2017-05-05 16:00:58 +02:00
Notre paquet **vrrpd** intègre différents patches, notamment un script permettant d'utiliser les *macvlan* :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
- 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
~~~
2017-05-05 12:09:19 +02:00
L'utilisation des *macvlans* permet d'avoir des adresses MAC spécifiques à VRRP. Pour cela, il faut :
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
* utiliser le script `/etc/vrrpd/vrrp_switch` (installé par défaut)
2017-05-05 16:00:58 +02:00
* 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
2017-05-05 12:09:19 +02:00
* ne pas utiliser l'option `-n`
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
## Utilisation
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
Il faut au préalable ajuster des paramètres _sysctl_ (voir `/usr/share/doc/vrrpd/sysctl.vrrpd`) :
2017-01-03 11:20:35 +01:00
2016-12-29 11:25:39 +01:00
~~~
net.ipv4.conf.default.rp_filter=0
2017-05-05 12:09:19 +02:00
net.ipv4.conf.eth0.rp_filter=0
2016-12-29 11:25:39 +01:00
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
~~~
2017-05-05 14:44:04 +02:00
Puis, on lance par exemple la commande suivante :
2017-05-05 12:09:19 +02:00
~~~
2017-05-05 14:44:04 +02:00
# vrrpd -i eth0 -x -D -d 10 -v 42 -p 100 -a pw/0xPASSWORD -l foo 192.0.2.42/27
2017-05-05 12:09:19 +02:00
~~~
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
Détails des options utilisées :
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
* `-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
2017-05-05 14:44:04 +02:00
* `-d 10` : intervalle d'avertissement en seconde (défaut : 1)
2017-05-05 12:09:19 +02:00
* `-v 42` : identifiant VRID (il doit être unique sur un même segment réseau)
2017-05-05 14:44:04 +02:00
* `-p 100` : priorité entre 1 et 255 (défaut : 100)
* `-l foo` : nom de l'instance
* `-a pw/OxPASSWORD` : mot de passe en hexa
2016-12-29 11:25:39 +01:00
2017-05-05 14:44:04 +02:00
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}`:
2017-05-05 12:09:19 +02:00
~~~
$ 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
[...]
~~~
2017-05-05 14:44:04 +02:00
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_.
2017-05-05 12:09:19 +02:00
## Logs
2016-12-29 11:25:39 +01:00
2017-05-05 12:09:19 +02:00
* Des logs sont envoyés à syslog
2017-05-05 12:38:12 +02:00
* L'historique des changements d'états dans `/var/log/vrrpd/state.$vrid`
2017-05-05 12:09:19 +02:00
* L'état courant se trouve dans /var/run/vrrpd/vrrp-${instance_name}
* Un fichier PID est dans `/var/run/vrrpd_${instance_name}_${vrid}.pid`