Routeur redondant avec Linux et Keepalived

Un routeur est typiquement un point unique de défaillance.

Si tous vos clients se connectent à Internet au travers d’un seul routeur, toute défaillance de ce système entraînera la perte de la connectivité Internet.

Il y a plusieurs solutions à ce problème, mais une des plus simples à mettre en place est KeepAlived, un démon qui utilise le protocole Virtual Router Redundancy Protocol (VRRP) pour permettre à deux routeurs redondants, voire plus, de présenter une adresse IP virtuelle aux autres systèmes du réseau.

Pour comprendre comment vous pouvez utiliser KeepAlived, imaginez que vous êtes un administrateur système en charge d’un groupe de machines. Comme vous êtes un gars sérieux, vous rendez tout aussi redondant que possible.

Vous utilisez du RAID sur vos serveurs de fichiers pour vous protéger des défaillances des disques durs.

Vous sauvegardez vos données sur bande régulièrement.

Vous stoquez des pièces de rechange de vos systèmes.

Cependant, vous savez qu’un important point unique de défaillance existe sur votre réseau: Le Routeur.

Cet unique système siège entre vos stations de travail et le monde extérieur. Si il défaille, vos utilisateurs perdent toute connectivité vers Internet et les autres réseaux de votre organisation.

Que pouvez-vous faire pour vous protéger de cela ?

La réponse est « utimiser de multiples routeurs redondants ».

A première vue, cette solution n’est pas si simple, car les ordinateurs clients standards ( utilisant Windows, Linux ou tout autre système ) ne font généralement pas fonctionner de protocole de routage.

C’est à dire qu’ils ne savent pas comment se comporter avec plusieurs routeurs.

A la place, ils sont configurés avec une seule adresse Ip de passerelle.

Tout trafic qui n’est pas destiné au réseau local, sera redirigé vers ce routeur.

Ce paramétrage est simple et fiable. Cependant, il ne laisse pas de place à la redondance, car les systèmes de votre réseau continueront à utiliser aveuglément votre routeur, même si il n’est plus accessible.

La solution

Heureusement, les logiciels libres et les standards ouverts fournissent une réponse à ce problème par l’entremise de KeepAlived et du protocole VRRP.

VRRP permet à de multiples routeurs de surveiller chacun d’entre eux et de fonctionner comme un routeur virtuel.

Un routeur est designé comme routeur maître et contrôle une adresse IP virtuelle en complément de sa propre adresse IP.

L’autre routeur est un esclave et ne fait rien hormis surveiller le maître.

Si le maître cesse de répondre, l’esclave s’empare de l’adresse IP virtuelle du routeur.

L’esclave continue de surveiller le maître, et quand celui-ci revient en ligne, l’esclave lui cède à nouveau l’adresse ip virtuelle.

VRRP est supporté par la plupart des routeurs commerciaux modernes.

Depuis que VRRP est une spécification IETF, tout le monde peut l’utiliser, et une implémentaion sous Linux nous vient d’une partie du package KeepAlived.

Ainsi, vous pouvez créer un routeur redondant avec deux serveurs Linux, chacun d’eux utilisant Keepalived.

Bien que Keepalived ait été principalement créé pour assurer le fonctionement de fermes de serveurs, il fonctionne parfaitement bien pour VRRP. Vous pouvez ignorer les autres possibilités de KeepAlived.

Installation et configuration

Vous pouvez télécharger et compiler KeepAlived de manière classique.

Cependant, il peût y avoir un paquet prépackagé de KeepAlived pour votre distribution Linux.

Je vous encourage à utiliser la dernière version de KeepAlived depuis keepalived.org, car KeepAlived a subit de nombreux développements récemment.

Le fonctionnement de KeepAlived est contrôlé par le fichier de configuration keepalived.conf ( par défaut /etc/keepalived/keepalived.conf ). C’est là que vous décidez quel routeur sera le maître et lequel sera l’esclave ( master et slave ).

Voici un exemple de fichier keepalived.conf minimal pour un maître.


vrrp_instance VI_1
state MASTER
interface eth0
virtual_router_id 1
priority 100
authentication
auth_type PASS
auth_pass password

virtual_ipaddress
192.168.1.1/24 brd 192.168.1.255 dev eth0


Et voici un fichier keepalived.conf d’exemple pour un esclave :


vrrp_instance VI_1
state BACKUP
interface eth0
virtual_router_id 1
priority 50
authentication
auth_type PASS
auth_pass password

virtual_ipaddress
192.168.1.1/24 brd 192.168.1.255 dev eth0

Il y a beaucoup d’autres options pour keepalived.conf, mais ces paramètres sont suffisants pour débuter.

Vous pouvez bien entendu, vérifier la page de man de keepalived.conf pour le reste des options.

Les deux routeurs, maître et esclave, doivent utiliser le même virtual_router_id.

La priorité plus basse dans le keepalived.conf esclave indique qu’il doit laisser sa place au maître ( c’est à dire que tant que le maître est actif, c’est lui qui supporte l’adresse IP virtuelle ).

La priorité du maître doit être 50 points plus haute que celle de l’esclave pour s’assurer qu’il sera toujours automatiquement « master ».

Le paramètre setting dans chaque fichier keepalived.conf indique dans quel état KeepAlived doit passer au démarrage.
Vous voulez le maître dans l’état MASTER et l’esclave dans l’état BACKUP.

Notez que vous pouvez avoir de multiles routeurs esclaves.

Dans ce cas, il faut mettre chaque esclave dans des priorités équivalentes ( indiquer 48, 49, 50 dans l’exemple ci-dessus ).

Le routeur avec la priorité la plus haute deviendra maître si nécessaire.

Si celui-ci flanche à son tour, le prochain routeur avec la priorité la plus haute prendra le relais et ainsi de suite.

La seule configuration nécessaire sur les systèmes clients est de s’assurer qu’ils utilisent l’adresse ip virtuelle comme adresse de passerelle, et non l’adresse réelle du routeur.

Si les clients pointent déjà sur l’IP du routeur maître, cela peût être plus simple de modifier son adresse IP réelle et de paramétrer l’adresse IP virtuelle avec l’ancienne adresse du routeur. Cela vous évite de modifier le paramétrage sur chaque client.

Notez que je néglige ce qui se passe au dela des routeurs en termes de redondance.

Évidemment, si vous avez votre seule connexion externe connectée sur votre routeur maître, vous la perdrez quand il « tombera ». Vous devrez effectuer un certain autre travail pour paramétrer l’autre coté du routeur.

Test

Après que vous ayez configuré Keepalived, démarrez-le sur tous vos routeurs en lançant le script /etc/init.d/keepalived ( /etc/init.d/keepalived start ).

Vous devriez avoir des messages apparaissant dans /var/log/messages sur chaque machine indiquant lequel est le maître et lequel est l’esclave.
Supposons que votre routeur maître a comme adresse IP réelle 192.168.1.250 et votre esclave est 192.168.1.251 ( souvenez-vous que l’adresse IP virtuelle est 192.168.1.1 ).

Exécutez ip addr list eth0 sur chaque machine, en suppossant que votre interface Ethernet est eth0. Sur le maître vous devez voir quelque chose comme ceci :

2: eth0: mtu 1500 qdisc noqueue
link/ether 00:e0:81:2b:aa:b5 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.250/24 brd 192.168.1.255 scope global eth0
inet 192.168.1.1/24 brd 192.168.1.255 scope global secondary eth0

et la sortie sur l’esclave doit être quelquechose comme :

2: eth0: mtu 1500 qdisc noqueue
link/ether 00:e0:81:2b:aa:c3 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.251/24 brd 192.168.1.255 scope global eth0

Ces entrées indiquent que le routeur maître assume deux adresses IP, la sienne et l’IP virtuelle.

Pour tester le « failover », débranchez le câble Ethernet du routeur maître.

Vous devriez voir des messages dans les logs du routeur esclave qui indiquent qu’il devient le maître.

Vous ne verrez pas d’autres messages dans le syslog du maître tant que vous ne le reconnecterez pas au réseau, car il ne réalise pas qu’il n’est plus le maître. Quand vous reconnecterez le maître au réseau, l’esclave laissera son contrôle de l’adresse IP virtuelle au maître à nouveau.

Donc qu’arrive-t-il sur les clients quand le routeur maître défaille ?

VRRP ne permet pas la migration des connexions, donc vous perdrez toutes les connexions actives. Par exemple, toute connexion ssh ouverte sur le routeur maître sera coupée.

En pratique, c’est acceptable, car la plupart des machines clientes utilisent le réseau pour des activités comme la navigation Web, qui ouvre une connexion différente à chaque requête. Tous les utilisateurs verront une page web n’arrivant pas à se charger ou peut être se charger de manière incomplète. Ils cliqueront sur le bouton Recharger et tout rentrera dans l’ordre.

Conclusion

C’est actuellement assez simple de paramétrer de multiples routeurs redondants sur le réseau en utilisant Keepalived et VRRP.

Les détails de la configuration peuvent sembler un peu complexe, mais c’est largement dû au fait que KeepAlived possède beaucoup d’autres composants en plus du support de VRRP.

Cependant, si vous utilisez les fichiers de l’exemple ci-dessus, vous devriez voir KeepAlived fonctionner rapidement et votre réseau devenir plus robuste.

Liens

-1. Keepalived
-2. Virtual Router Redundancy Protocol

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.