VRRP avec Keepalived

Haute disponibilité des passerelles - BTS SIO SISR

Objectif

Mettre en place une redondance de passerelles réseau avec le protocole VRRP (Virtual Router Redundancy Protocol) via Keepalived pour assurer la continuité de service.

Prérequis

Principe de VRRP

VRRP est un protocole normalisé (RFC 5798) permettant à plusieurs routeurs de partager une IP virtuelle (VIP). Un seul routeur est actif (MASTER), les autres sont en veille (BACKUP). En cas de panne du MASTER, un BACKUP prend automatiquement le relais.

Concepts clés

Architecture exemple

 Clients (192.168.1.0/24)
 ↓
 Gateway: 192.168.1.1 (VIP)
 ↓
 
 
ROUTER1 ROUTER2
192.168.1.10 192.168.1.20
Priority: 120 Priority: 100
[MASTER] [BACKUP]

Procédure Complète

Étape 1 : Installation de Keepalived

Sur ROUTER1 et ROUTER2 :

sudo apt update
sudo apt install keepalived -y

Étape 2 : Activation du routage IP

Sur les deux routeurs :

# Activation immédiate
sudo sysctl -w net.ipv4.ip_forward=1

# Persistant après redémarrage
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Étape 3 : Configuration de ROUTER1 (MASTER)

Créer le fichier /etc/keepalived/keepalived.conf :

sudo nano /etc/keepalived/keepalived.conf

Contenu :

! Configuration VRRP pour ROUTER1 (MASTER)
vrrp_instance VRRP_GATEWAY {
 state MASTER # Rôle initial
 interface eth0 # Interface réseau
 virtual_router_id 10 # VRID (identique sur ROUTER2)
 priority 120 # Priorité haute = MASTER
 advert_int 1 # Intervalle annonces (1 sec)
 
 authentication {
 auth_type PASS
 auth_pass MotDePasseSecurise123 # Max 8 caractères
 }
 
 virtual_ipaddress {
 192.168.1.1/24 # VIP partagée
 }
 
 # Script de vérification (optionnel)
 track_script {
 chk_gateway
 }
}

# Script de healthcheck
vrrp_script chk_gateway {
 script "/usr/bin/killall -0 keepalived"
 interval 2 # Vérification toutes les 2 sec
 weight -20 # Réduction priorité si échec
}

Étape 4 : Configuration de ROUTER2 (BACKUP)

Créer le fichier /etc/keepalived/keepalived.conf :

sudo nano /etc/keepalived/keepalived.conf

Contenu :

! Configuration VRRP pour ROUTER2 (BACKUP)
vrrp_instance VRRP_GATEWAY {
 state BACKUP # Rôle initial
 interface eth0 # Interface réseau
 virtual_router_id 10 # Même VRID que ROUTER1
 priority 100 # Priorité basse = BACKUP
 advert_int 1 # Intervalle annonces (1 sec)
 
 authentication {
 auth_type PASS
 auth_pass MotDePasseSecurise123 # Identique à ROUTER1
 }
 
 virtual_ipaddress {
 192.168.1.1/24 # Même VIP
 }
 
 track_script {
 chk_gateway
 }
}

vrrp_script chk_gateway {
 script "/usr/bin/killall -0 keepalived"
 interval 2
 weight -20
}

Étape 5 : Démarrage des services

Sur ROUTER1 et ROUTER2 :

# Activer le service au boot
sudo systemctl enable keepalived

# Démarrer
sudo systemctl start keepalived

# Vérifier l'état
sudo systemctl status keepalived

Vérifications

1. Vérifier l'attribution de la VIP

Sur ROUTER1 (MASTER) :

ip addr show eth0

Doit afficher l'IP 192.168.1.1 en plus de 192.168.1.10

Sur ROUTER2 (BACKUP) :

ip addr show eth0

Ne doit afficher que 192.168.1.20 (pas la VIP)

2. Vérifier les logs Keepalived

sudo journalctl -u keepalived -f

Sur ROUTER1, doit afficher : "Entering MASTER STATE"

3. Test de connectivité depuis un client

ping 192.168.1.1

4. Vérifier la table ARP

arp -a | grep 192.168.1.1

L'adresse MAC doit être celle de l'interface virtuelle VRRP (00:00:5e:00:01:0a)

5. Test de basculement (failover)

  1. Depuis un client, lancer un ping continu :
    ping -t 192.168.1.1
  2. Sur ROUTER1 (MASTER), arrêter Keepalived :
    sudo systemctl stop keepalived
  3. Observer :
    • 1-2 paquets ping perdus
    • ROUTER2 devient MASTER
    • Ping reprend automatiquement

6. Vérifier les logs sur ROUTER2

sudo journalctl -u keepalived -n 20

Doit afficher : "Entering MASTER STATE"

Options Avancées

Désactiver la préemption

Par défaut, si ROUTER1 redevient disponible avec sa priorité 120, il reprend le rôle MASTER. Pour désactiver ce comportement :

vrrp_instance VRRP_GATEWAY {
 nopreempt
 ...
}

Monitoring avancé avec script personnalisé

Créer un script de healthcheck plus robuste :

sudo nano /etc/keepalived/check_gateway.sh
#!/bin/bash
# Vérifier la connectivité Internet via ping
ping -c 1 -W 1 8.8.8.8 > /dev/null 2>&1
if [ $? -eq 0 ]; then
 exit 0 # OK
else
 exit 1 # Échec
fi
sudo chmod +x /etc/keepalived/check_gateway.sh

Modifier keepalived.conf :

vrrp_script chk_gateway {
 script "/etc/keepalived/check_gateway.sh"
 interval 5
 weight -30
}

Sécurité et Limites

Points de vigilance

Configuration firewall

Autoriser le trafic VRRP (protocole 112) :

sudo iptables -A INPUT -p vrrp -j ACCEPT
sudo iptables -A OUTPUT -p vrrp -j ACCEPT

# Sauvegarder
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

Points Clés pour l'Oral BTS

Distinction importante :
VRRP ≠ routage dynamique. VRRP gère uniquement la VIP. Pour une redondance complète, combiner avec OSPF ou BGP pour le routage inter-réseaux.