Comparatif et configuration HSRP, VRRP, GLBP
Voici un petit article sur les différents protocoles de redondance niveau 3 que l’on dispose sur du cisco. Le but étant biensur de permettre la redondance de routeur, typiquement de passerelles WAN.
Voici, en guise d’introduction, une comparaison sommaire de ces 3 protocoles:
- HSRP : Propriétaire cisco, créé en 1994, Active/Standby Failover
- VRRP : Créé par l’IETF en 1999 (donc compatible multi vendeurs), identique à HSRP (toutefois VRRP utilise des timers plus petit par défaut le rendant plus rapide)
- GLBP : Propriétaire cisco, créé en 2005, permets le failover Active/Active pour faire du load-balancing.
Pour le pingeur, c’est un petit outil home made tiré d’une source que j’ai modifiée. Voici l’exécutable avec la source: pingeur
Topologie Dynagen
ghostios = True sparsemem = True autostart = false #workingdir = c:\temp [localhost] [[3660]] image = ../images/C3660-JK.BIN ram = 128 idlepc = 0x604eb02c [[ROUTER WAN]] model=3660 F0/0=IAR1 F0/0 F0/1=IAR2 F0/0 [[ROUTER IAR1]] model = 3660 F0/1=S1 1 [[ROUTER IAR2]] model = 3660 F0/1=S1 2 [[ETHSW S1]] 1 = access 1 2 = access 1 3 = access 1 NIO_GEN_ETH:vmnet1 #Remplacer par une loopback ou ce que vous voulez 4 = access 1 NIO_GEN_ETH:vmnet2 #Remplacer par une loopback ou ce que vous voulez
Configuraiton commune
Tous les exemples se baseront sur cette configuration:
Note: Si l’on était dans un environnement de production, l’on aurait pu configurer DHCP sur les deux routeurs, et partager leur lease database via la commande ip dhcp database ( http://www.cisco.com/en/US/docs/ios/12_2/ip/configuration/guide/1cfdhcp.html#wp1001297 )
! hostname WAN ! interface Loopback0 ip address 200.0.0.1 255.255.255.0 ! interface FastEthernet0/0 ip address 10.254.1.1 255.255.255.0 duplex auto speed auto ! interface FastEthernet0/1 ip address 10.254.2.1 255.255.255.0 duplex auto speed auto ! router eigrp 65000 network 10.0.0.0 network 200.0.0.0 0.0.0.255 !
! hostname IAR1 ! ip dhcp pool LAN network 10.0.0.0 255.255.255.0 default-router 10.0.0.254 domain-name home.lan ! ip dhcp excluded-address 10.0.0.2 ip dhcp excluded-address 10.0.0.254 ! interface FastEthernet0/0 ip address 10.254.1.2 255.255.255.0 duplex auto speed auto ! interface FastEthernet0/1 ip address 10.0.0.1 255.255.255.0 duplex auto speed auto ! router eigrp 65000 network 10.0.0.0 !
! hostname IAR2 ! interface FastEthernet0/0 ip address 10.254.2.2 255.255.255.0 duplex auto speed auto ! interface FastEthernet0/1 ip address 10.0.0.2 255.255.255.0 duplex auto speed auto ! router eigrp 65000 network 10.0.0.0 !
HSRP
Timers:
- Hello: 3s
- Hold timer: 10s
- Modifiables via la commande standby [#] timers hello hold
Les passerelles sont regroupées en « Standby groups » au sein desquelles les routeurs se partagent une IP et une adresse MAC virtuelles. Au sein d’un group standby, il y a un routeur actif, et les autres en standby.
Le choix du routeur actif se fait en fonction de la priorité HSRP (100 par défaut), et, si les priorités sont identiques, en fonction de l’adresse IP (la plus grande valeur la plus haute priorité).
Une fonctionnalité est le tracking qui permets de baisser dynamiquement cette priorité au cas ou un évènement doit faire modifier la topologie, par exemple, mon routeur actif peut tracker une de ses interfaces et si celle ci venait à être indisponible, baisser sa priorité afin de passer en standby et que l’autre routeur passe en mode active.
Il est toutefois à noter que par défaut le passage du mode standby au mode active ne se fait que lorsque le routeur est indisponible (non réception de hellos au bout du hold timer). Pour forcer les changements d’états dynamiques, il convient d’ajouter le paramètre preempt (que nous allons voir).
Il est aussi possible de tracker des objets SLA/RTR, par exemple un ping vers la passerelle du FAI.
les adresses MAC virtuelles HSRP ont cette forme (peuvent être changées via la commande standby # MAC):
0000.0C07.ACXX : Cisco Vendor ID, MACs HSRP, Standby Group ID
La configuration se fait selon ces étapes
- Création des groupes HSRP (en mode de configuration d’interface)
- Assignation de l’IP virtuelle
- Paramètres optionnels (tracking, preemtion)
- Vérifications (toujours
)
Configuration HSRP (standby group 1):
! IAR1 interface FastEthernet0/1 !interface vers LAN (segment à redonder) standby 1 ip 10.0.0.254 !IP Virtuelle standby 1 preempt !active la preemtion standby 1 name HSRPGROUP1 !Définition d'un nom, optionnel standby 1 priority 110 ! change la priorité par défaut (100) ! !IAR2 interface FastEthernet0/1 standby 1 ip 10.0.0.254 standby 1 preempt standby 1 name HSRPGROUP1 !
Vérifications
IAR1#sh standby brief P indicates configured to preempt. | Interface Grp Prio P State Active Standby Virtual IP Fa0/1 1 110 P Active local 10.0.0.2 10.0.0.254 ! IAR2#sh standby brief P indicates configured to preempt. | Interface Grp Prio P State Active Standby Virtual IP Fa0/1 1 100 P Active local 10.0.0.3 10.0.0.254 IAR2#sh stand FastEthernet0/1 - Group 1 State is Standby 13 state changes, last state change 00:15:01 Virtual IP address is 10.0.0.254 Active virtual MAC address is 0000.0c07.ac01 Local virtual MAC address is 0000.0c07.ac01 (v1 default) Hello time 3 sec, hold time 10 sec Next hello sent in 1.608 secs Preemption enabled Active router is 10.0.0.1, priority 110 (expires in 7.624 sec) Standby router is local Priority 100 (default 100) IP redundancy name is "HSRPGROUP1" (cfgd)
On voit ici que le routeur ayant la priorité la plus haute (IAR1) est le routeur ACTIVE. Maintenant on va redémarrer ce routeur et voir l’incidence sur la disponibilité (ping vers l’interface WAN depuis un PC du lan).
On voit ici le temps de convergence (environ 10s, ce qui correspond au HOLD Timer). Note: Le retour du routeur IAR1 à l’état ACTIVE ne créé pas d’interruption (preemption instantannée).
Maintenant, on va ajouter un tracking sur l’interface reliée au WAN sur IAR1:
IAR1(config)#int f0/1 IAR1(config-if)#standby 1 track F0/0 ? <1-255> Decrement value IAR1(config-if)#standby 1 track F0/0 15 ! decrement la priorité de 15 si l'interface tombe
Test:
IAR1(config-line)#int F0/0 IAR1(config-if)#shut IAR1(config-if)#^Z IAR1#sh *Mar 1 00:13:05.627: %HSRP-5-STATECHANGE: FastEthernet0/1 Grp 1 state Active -> Speak IAR1#sh stand br P indicates configured to preempt. | Interface Grp Prio P State Active Standby Virtual IP Fa0/1 1 95 P Speak 10.0.0.2 unknown 10.0.0.254 IAR1#conf t Enter configuration commands, one per line. End with CNTL/Z. *Mar 1 00:13:15.627: %HSRP-5-STATECHANGE: FastEthernet0/1 Grp 1 state Speak -> Standby IAR1(config)#int f00/0 IAR1(config-if)#no sh IAR1(config-if)#^Z IAR1#sh stand br P indicates configured to preempt. | Interface Grp Prio P State Active Standby Virtual IP Fa0/1 1 110 P Active local unknown 10.0.0.254 IAR1#
On voit bien ici que la priorité est modifié dynamiquement. Le temps d’interruption du ping est d’environ 50ms (un ping échoué).
Voilà pour HSRP (je vous montrerai comment mettre du tracking via un ping probe dans la partie pour aller plus loin à la fin de cet article).
Pour désactiver HSRP:
int f0/1 no standby 1
VRRP
Timers:
- Hello: 1s
- Hold timer: 3xHello (3s) + Skew timer
- Skew timer = 256-priority/256 s (priority = 100 par défaut). Cela permets d’ajouter un délai au cas ou le 3e ping arriverai avec du retard (< 1s)
- Les timers VRRP HOLD ne sont pas configurable (toujours égaux à 3x le hello timer).
- Les timers sont configurés sur le master (vrrp # timers advertise {hello}), et sont appris par le backup (vrrp # timers learn, par défaut)
VRRP fonctionne de la même manière que HSRP, quelques nuances toute fois, les rôles active/standby sont définis respectivement comme master/backup, et le standby group devient le vrrp group.
Une autre différence est que l’ip virtuelles peut correspondre à l’ip configurée sur l’interface du router MASTER (seules 2 IPs sont donc nécessaires à la configuration de VRRP).
La configuration se fait à l’identique que HSRP, en remplaçant la commande standby par VRRP. La configuration HSRP vu ci dessus donnerai ceci en VRRP:
! IAR1
interface FastEthernet0/1 !interface vers LAN (segment à redonder)
vrrp 1 ip 10.0.0.1 !IP Virtuelle, correspond au master !
vrrp 1 preempt !active la preemtion
vrrp 1 desc VRRP1 !Définition d'une description, optionnel, pas de commande name
vrrp 1 priority 110 ! change la priorité par défaut (100)
!
!IAR2
interface FastEthernet0/1
vrrp 1 ip 10.0.0.1
vrrp 1 preempt
vrrp 1 desc VRRP1
!
Vérifications
IAR1#sh vrrp FastEthernet0/1 - Group 1 VRRP1 State is Master Virtual IP address is 10.0.0.1 Virtual MAC address is 0000.5e00.0101 Advertisement interval is 1.000 sec Preemption enabled Priority is 255 (cfgd 110) Master Router is 10.0.0.1 (local), priority is 255 Master Advertisement interval is 1.000 sec Master Down interval is 3.003 sec IAR1#sh vrrp brief Interface Grp Pri Time Own Pre State Master addr Group addr Fa0/1 1 255 3003 Y Y Master 10.0.0.1 10.0.0.1 IAR2#sh vrrp brief Interface Grp Pri Time Own Pre State Master addr Group addr Fa0/1 1 100 3609 Y Backup 10.0.0.1 10.0.0.1
Les configurations VRRP et HSRP sont donc très similaires. VRRP supporte aussi le tracking via la commande vrrp # track {trackid] decrement {valeur}
Je vais aborder le tracking d’objets dans la partie pour aller plus loin. Pour l’instant, faisons un test de temps de convegence en redemarrant IAR1.
IAR2# *Mar 1 01:05:40.543: %SYS-5-CONFIG_I: Configured from console by console *Mar 1 01:06:05.003: %VRRP-6-STATECHANGE: Fa0/1 Grp 1 state Backup -> Master *Mar 1 01:06:10.743: %VRRP-6-STATECHANGE: Fa0/1 Grp 1 state Master -> Backup
J’ai eu moins d’une seconde d’interruption de service (étrange).
Pour désactiver vrrp:
int f0/1 no vrrp 1
GLBP
Timers:
- Hello : 3s
- Dead : 10s (temps à partir duquel un AVF sera dead, son adresse mac sera associée à un autre AVF
- Redirect (Temps à partir duquel on arrêtera de rediriger l’adresse mac d’une AVF dead vers une autre AVF ): 600s
- Timeout (Temps à partir duquel un routeur est considéré comme inactif, son adresse MAC ne sera plus utilisée) : 14,400s (4 heures), doit être supérieur au temps de conservervation des entrées ARP des clients.
GLBP fonctionne un peu différement que HSRP et VRRP. A une seule adresse IP virtuelle sont rattachée plusieurs adresses MAC (une par gateway). et chaque client, lorsqu’il fera une requête ARP sur l’ip virtuelle GLBP, se vera répondre avec une de ces adresses mac, de manière équitable.
Voici comment cela fonctionne, il y a un routeur appelé « Active Virtual Gateway » (AVG) qui agit comme le point central, c’est à dire qu’il connaît toutes les adresses MAC qu’utilisent les autres routeurs (Active Virtual Forwarders – AVF).
L’AVG gère les réponses aux requêtes ARP, il est donc capable d’attribuer de manièré égale des clients aux différents AVFs.
Note: Il est possible de pondérer le ratio de répartition des clients/AVF (si l’on veut qu’un des routeurs gère 2/3 des clients et l’autre 1/3 par exemple).
Si l’AVG tombe, le prochain routeur le remplacera. L’élection de l’AVG dépend de la priorité
Pour la configuration, cela est similaire à HSRP et VRRP (IAR1 sera l’AVG):
Configuration:
!IAR2 int F0/0 glbp 1 ip 10.0.0.254 glbp 1 preempt !IAR1 int F0/0 glbp 1 ip 10.0.0.254 glbp 1 preempt glbp 1 priority 110 !
on peut donc observer:
IAR2#sh glbp brief Interface Grp Fwd Pri State Address Active router Standby route Fa0/1 1 - 100 Standby 10.0.0.254 10.0.0.1 local !BACKUP AVG Fa0/1 1 1 7 Listen 0007.b400.0101 10.0.0.1 - Fa0/1 1 2 7 Active 0007.b400.0102 local - IAR1#sh glbp brief Interface Grp Fwd Pri State Address Active router Standby route Fa0/1 1 - 110 Active 10.0.0.254 local 10.0.0.2 !AVG Fa0/1 1 1 7 Active 0007.b400.0101 local - Fa0/1 1 2 7 Listen 0007.b400.0102 10.0.0.2 -
Maintenant, regardons le cache arp des clients
Même tarif, ping (depuis le client associé à l’AVF 1 – IAR1), puis reboot IAR1 ![]()
On as donc un temps d’interruption de 10s lors du reboot, et aucune interruption lors du redémarrage (du à la preemption sans délai).
Pour aller plus loin
Délais de préemtion HSRP
Il est possible de définir des délais pour la preemtion:
IAR2(config-if)#standby [#] delay ? minimum Minimum delay reload Delay after reload
Cela permets, dans le cas du délai reload, d’attendre un certain temps avant que le routeur devienne actif, ce qui est utilie car au démarrage, le routeur n’a pas forcément toute sa table de routage, ARP, … et s’il devient actif trop vite cela peut créer une interruption de service.
Le délai minimum permets d’attendre un certain temps avant de changer son état, cela peut être utile pour éviter le flapping, par exemple le mettre à quelques secondes, si une interface tombe, et remonte, le routeur actif n’aura pas changer.
Tracking d’objets
Le tracking d’objets permets de monitorer un service, cela va du simple ping, à l’interrogation d’un serveur web ou ftp. Ici, nous allons définir une loopback sur le routeur WAN de la sorte:
int l1 ip add 10.100.0.1 255.255.255.0
Puis nous définirons un objet qui va pinger cette interface. Nous définirons un timeout de 3 secondes, avec un ping toutes les 5secondes.
Pour affecter un objet de tracking à HSRP/VRRP, utiliser cette commande:
En mode de configuration d’interface.
{standby|vrrp} # track {track_id} decrement {valeur}
Test avec HSRP
! ip sla monitor 1 ! creation d'un monitor ping toute les 5s avec 3s de timeout type echo protocol ipIcmpEcho 10.100.0.1 source-interface FastEthernet0/0 timeout 3000 frequency 5 ip sla monitor schedule 1 life forever start-time now ! Activation du monitor précédémment créé tout de suite et pour toujours ! track 10 rtr 1 ! creation d'un objet de tracking de notre monitor ! interface FastEthernet0/1 standby 1 preempt standby 1 track 10 decrement 20 ! affectation de notre objet de tracking à HSRP !
Maintenant, je mets un shut down sur la loopback, observons !
IAR1#sh stand bri
P indicates configured to preempt.
|
Interface Grp Prio P State Active Standby Virtual IP
Fa0/1 1 110 P Active local 10.0.0.2 10.0.0.254
!
WAN(config-if)#int l1
WAN(config-if)#sh
!
IAR1#sh stand bri
P indicates configured to preempt.
|
Interface Grp Prio P State Active Standby Virtual IP
Fa0/1 1 90 P Active local 10.0.0.2 10.0.0.254
!
WAN(config-if)#no sh
!
IAR1#sh stand bri
P indicates configured to preempt.
|
Interface Grp Prio P State Active Standby Virtual IP
Fa0/1 1 110 P Active local 10.0.0.2 10.0.0.254
On voit bien que la priorité est bien dynamiquement modifiée !!! Les possibilités des SLAs sont bien sur très étendues, aussi, je vous donne les liens pour approfondir ces connaissances, mais comme je suis gentil, je vous donne l’équivalent pour faire du tracking d’interface comme HSRP avec VRRP
IAR1(config)#track 5 interface F0/0 line-protocol IAR1(config)#int f0/0 IAR1(config)#vrrp 1 track 5 decrement 20
http://www.cisco.org.lv/en/US/docs/ios/12_4/ip_sla/configuration/guide/hsicmp.html
http://www.cisco.com/en/US/docs/ios/12_2/configfun/configuration/guide/fcf017.html
Je n’ai pas trouvé les commandes avec GLBP
Note: les objets de tracking peuvent servir à bien d’autre chose, notemment au niveau de la sélection dynamique desroutes (route tracking)
Gestion du load balancing GLBP
IAR1(config-if)#glbp 1 Load-balancing ? host-dependent Load balance equally, source MAC determines forwarder choice round-robin Load balance equally using each forwarder in turn weighted Load balance in proportion to forwarder weighting <cr>
http://www.cisco.com/en/US/docs/ios/12_2t/12_2t15/feature/guide/ft_glbp.html
Conclusion
HSRP et VRRP font sensiblement la même chose, s’il existe les deux aujourd’hui, c’est en partie du au fait que HSRP a été créé avant VRRP, et que cisco, tout en implémentant VRRP, ont gardé HSRP. Si vous êtes uniquement cisco, vous pouvez utiliser HSRP, sinon, VRRP vous permettras d’avoir de la redondance entre équipements de divers fabricants (ou pas). Un des avantage de HSRP cependant est de pouvoir tracker simplement une interface sans avoir à créer un objet de tracking, cependant, cette feature est peut être présente pour VRRP dans d’autres versions d’IOS (j’ai testé la C3660-JK9O3S-M), Version 12.4(12) ).
GLBP est une bonne solution, puisque la configuration est aussi aisée que HSRP et VRRP, cependant il permets de faire du load balancing entre les clients d’un LAN, ce qui évite d’avoir un routeur inactif.
Voilà, bravo à ceux qui ont tout lu
Recent Entries
- Définir des « handlers » personnalisés pour associer les liens d’un protocole avec une application perso.
- DMVPN over GETVPN avec KS COOP (redondance) et KS Forwarding
- EAP-TLS avec Autorité de certification autonome (Standalone CA) sous Windows 2003
- Static subnet NAT avec VRF pour monter des ‘PODs’ (LAB)
- Capture WiFi en mode monitor sous windows, et capture par process
- Comment taper un point d’interrogation ‘?’ dans un mot de passe ?
- IPSEC High Availability Stateful Failover avec VTI
- Exemple GETVPN avec utilisation du CA server IOS
- Vente de matériel cisco : ip phone 7960, 3550 PoE, AP 1131Ag
- Prise en main d’un IDS 4215 et utilisation IDM sous Windows 7




mai 7th, 2010 at 22:21
Bonsoir, je suis en train de travailler sur une maquette semblable de HSRP et votre tuto me plait. Cependant j’ai une question qui me turlupine…
Dans le cas ou le lien entre IAR1 et IAS est down, IAR1 passe bien en standby mais WAN essaye toujours de passer par IAR1 pour communiquer vers le LAN … Tant que le lien entre WAN et IAR1 n’est pas rompu, WAN crois que IAR1 est toujours actif. Je crois qu’il doit y avoir un problème dans ma conf … Pouvez vous me conseillez ?
D’avance merci.
mai 19th, 2010 at 0:21
Bonjour, si tu as un protocole de routage qui tourne sur ton routeur, si ton interface tombe la route doit être supprimée, sinon tu peux faire des routes statiques avec du tracking sur WAN, ou même si t’es un fou un PBR avec du tracking sur WAN
http://www.cisco.com/en/US/tech/tk364/technologies_configuration_example09186a0080211f5c.shtml