125 lines
4.7 KiB
Markdown
125 lines
4.7 KiB
Markdown
|
**Cette page a été importée automatiquement de notre ancien wiki mais n'a pas encore été révisée.**
|
|||
|
|
|||
|
# Howto CARP sous OpenBSD
|
|||
|
|
|||
|
<http://www.openbsd.org/faq/pf/carp.html>
|
|||
|
|
|||
|
Le principe est d'avoir une interface sur 2 machines (ou plus). Cette interface est configurée pour être dans un état MASTER ou SLAVE.
|
|||
|
L'interface MASTER émet régulièrement des paquets à destination du SLAVE pour prouver qu'elle fonctionne bien.
|
|||
|
Le choix SLAVE/MASTER est effectué grâce à des priorités configurables.
|
|||
|
Si le SLAVE ne reçoit pas un paquet dans les temps (ou qu'il reçoit un paquet inférieur à sa priorité), il passera MASTER.
|
|||
|
|
|||
|
## Création manuelle
|
|||
|
|
|||
|
Sur le MASTER :
|
|||
|
|
|||
|
~~~
|
|||
|
# sysctl -w net.inet.carp.allow=1
|
|||
|
# ifconfig carp0 create
|
|||
|
# ifconfig carp0 vhid 1 pass PASSWORD carpdev bnx0 \
|
|||
|
advskew 1 192.0.2.30 netmask 255.255.255.224
|
|||
|
~~~
|
|||
|
|
|||
|
Sur le SLAVE :
|
|||
|
|
|||
|
~~~
|
|||
|
# sysctl -w net.inet.carp.allow=1
|
|||
|
# ifconfig carp0 create
|
|||
|
# ifconfig carp0 vhid 1 pass PASSWORD carpdev bnx0 \
|
|||
|
advskew 128 192.0.2.30 netmask 255.255.255.224
|
|||
|
~~~
|
|||
|
|
|||
|
## Création définitive
|
|||
|
|
|||
|
Sur le MASTER :
|
|||
|
|
|||
|
~~~
|
|||
|
# cat /etc/hostname.carp0
|
|||
|
192.0.2.30/27 carpdev bnx0 pass PASSWORD vhid 1 advskew 1
|
|||
|
~~~
|
|||
|
|
|||
|
Sur le SLAVE :
|
|||
|
|
|||
|
~~~
|
|||
|
# cat /etc/hostname.carp0
|
|||
|
192.0.2.30/27 carpdev bnx0 pass PASSWORD vhid 1 advskew 128
|
|||
|
~~~
|
|||
|
|
|||
|
## Bascule CARP
|
|||
|
|
|||
|
Pour des raisons de maintenance, on peut vouloir forcer une bascule CARP.
|
|||
|
Pour faire cela, sur le master, on peut faire :
|
|||
|
|
|||
|
~~~
|
|||
|
# ifconfig carp0 down
|
|||
|
|
|||
|
ou
|
|||
|
|
|||
|
# ifconfig -g carp carpdemote 50
|
|||
|
~~~
|
|||
|
|
|||
|
|
|||
|
Normalement, le master va générer un paquet CARP avec la priorité 255 ce qui doit avoir comme conséquence
|
|||
|
que le SLAVE va immédiatemment passer MASTER. Ce paquet peut être observer avec `tcpdump proto carp`
|
|||
|
|
|||
|
Note : avec "ifconfig carp0 down" nous avons eu parfois des soucis de bascule non immédiate,
|
|||
|
on recommande donc d'observer ce qui se passer avec `tcpdump proto carp` et éventuellement
|
|||
|
de privilégier la bascule via carpdemote qui semblerait plus sûre (à confirmer).
|
|||
|
|
|||
|
|
|||
|
## Optimisation CARP au (re)boot d'un BACKUP
|
|||
|
|
|||
|
Lorsque que l'on a un firewall en BACKUP, il est "agréable" de pouvoir le redémarrer sans que cela n'impacte le MASTER.
|
|||
|
Pour cela, il faut bien comprendre le comportement de CARP au démarrage (c'est valable aussi quand
|
|||
|
on le configure manuellement... ou même reconfigure... même si il est MASTER !!) :
|
|||
|
pendant un certain temps, il va toujours rester en BACKUP pour voir si il ne reçoit pas d'annonce d'un MASTER.
|
|||
|
Si il n'a rien reçu, il passe en MASTER. Pour ce temps est d'attente, il va utiliser sa valeur _advbase_ (par défaut à 1 seconde !).
|
|||
|
|
|||
|
Conséquences de cela :
|
|||
|
* Si vous reconfigurez une interface CARP MASTER, elle va passer en BACKUP pendant _advbase_ secondes !
|
|||
|
=> Conseil : si vous intervenez en prod sur un CARP MASTER, mettez manuellement une valeur d'advbase faible (1 à 5 secondes)
|
|||
|
|
|||
|
* Si vous redémarrez une machine avec des CARP BACKUP, il est probable que son réseau ne soit pas opérationnel immédiatement
|
|||
|
(synchronisation Spanning Tree qui prend 50 secondes par défaut sur un switch CISCO par exemple) : l'interface va donc se
|
|||
|
déclarer en MASTER après son temps d'attente, et c'est très embêtant si vous faites du firewalling à état !
|
|||
|
Il faut donc bien ajuster _advbase_ pour qu'il soit bien supérieur au temps d'arrivée du réseau.
|
|||
|
On peut même imaginer avec une configuration en dur avec _advbase_ à 60 secondes par exemple, ce qui permet d'avoir des reboots transparents,
|
|||
|
puis on reconfigure manuellement _advbase_ à 10 secondes par exemple quand tout est redémarré.
|
|||
|
|
|||
|
## Création d'une interface CARP dans un VLAN
|
|||
|
|
|||
|
On peut rattacher une interface CARP à une interface VLAN. L'instance carp0 sera alors isolée dans le VLAN auquel il est rattaché.
|
|||
|
|
|||
|
Pour la création d'un VLAN, voir [wiki:HowtoOpenBSD/VLAN]
|
|||
|
|
|||
|
~~~
|
|||
|
# cat /etc/hostname.bnx0
|
|||
|
up
|
|||
|
# cat /etc/hostname.vlan42
|
|||
|
vlandev bnx0 description "VLAN42"
|
|||
|
# cat /etc/hostname.carp0
|
|||
|
192.0.2.30/27 carpdev vlan42 pass PASSWORD vhid 1 advskew 128
|
|||
|
~~~
|
|||
|
|
|||
|
## Stats
|
|||
|
|
|||
|
~~~
|
|||
|
# netstat -sp carp
|
|||
|
carp:
|
|||
|
1816636 packets received (IPv4)
|
|||
|
684123 packets received (IPv6)
|
|||
|
0 packets discarded for bad interface
|
|||
|
0 packets discarded for wrong TTL
|
|||
|
0 packets shorter than header
|
|||
|
0 discarded for bad checksums
|
|||
|
0 discarded packets with a bad version
|
|||
|
1293450 discarded because packet too short
|
|||
|
2 discarded for bad authentication
|
|||
|
482883 discarded for unknown vhid
|
|||
|
0 discarded because of a bad address list
|
|||
|
9667 packets sent (IPv4)
|
|||
|
5792 packets sent (IPv6)
|
|||
|
0 send failed due to mbuf memory error
|
|||
|
35 transitions to master
|
|||
|
~~~
|