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.
Topologie

Topologie

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).

Convergence

Convergence

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

Client 1

Client 1

Client 2

Client 2

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

6 Responses to “Comparatif et configuration HSRP, VRRP, GLBP”

  1. topdam Says:

    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.

  2. Bastien Migette Says:

    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

  3. Nedjla Says:

    J’ai tout lu et tout compris alors bravo pour moi. et merci pour vous c’était super bien expliqué.

  4. Duflo Says:

    Très clair & très précis! Merci beaucoup (:

  5. Bg Dupond Says:

    En moins de 2h j’ai parfaitement compris tout un cours qui m’a été donné sur des semaines grâce aux explications précises et claires.
    Merci

  6. Bastien Migette Says:

    Au plaisir 🙂

Leave a Reply

Le temps imparti est dépassé. Merci de recharger le CAPTCHA.