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
- 2 serveurs Linux Debian/Ubuntu (routeurs)
- Réseau configuré (même VLAN)
- Droits root
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
- VIP (Virtual IP) : Adresse IP partagée (ex: 192.168.1.1)
- VRID (Virtual Router ID) : Identifiant du groupe VRRP (1-255)
- Priority : Priorité du routeur (1-255, plus élevé = MASTER)
- Multicast : Communication entre routeurs via 224.0.0.18
- Preemption : Reprise automatique du rôle MASTER par le routeur prioritaire
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)
- Depuis un client, lancer un ping continu :
ping -t 192.168.1.1
- Sur ROUTER1 (MASTER), arrêter Keepalived :
sudo systemctl stop keepalived
- 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
- Authentification VRRP : Le mot de passe est transmis en clair (multicast 224.0.0.18). Pour une sécurité renforcée, isoler le VLAN des routeurs.
- Split-brain : En cas de perte de communication entre routeurs (mais les deux actifs), risque d'avoir deux MASTER simultanés.
- Pas de réplication d'état : VRRP ne réplique pas les connexions actives (TCP sessions). Les connexions établies sont perdues lors du basculement.
- Niveau 3 uniquement : VRRP gère l'IP virtuelle, pas le routage dynamique (OSPF/BGP).
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
- VRRP (RFC 5798) : protocole de redondance de passerelles
- VIP : IP virtuelle partagée entre routeurs
- VRID : identifiant du groupe VRRP (1-255)
- Priority : détermine le rôle MASTER/BACKUP
- Multicast 224.0.0.18 : canal de communication VRRP
- Preemption : reprise automatique du rôle MASTER
- Keepalived : implémentation VRRP sous Linux
- Basculement : 1-2 secondes (fonction de advert_int)
- Stateless : pas de synchronisation d'état entre routeurs
- Différence avec HSRP : VRRP = standard ouvert, HSRP = propriétaire Cisco
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.