Mise en place du protocole HSRP

I. Présentation

Dans ce tutoriel, nous allons apprendre à mettre en place le protocole de haute disponibilité HSRP sur des routeurs Cisco.

II. Etude du protocole

HSRP ou « Hot Standby Routing Protocol » est un protocole propriétaire Cisco qui a pour fonction d’accroitre la haute disponibilité dans un réseau par une tolérance aux pannes.

A. Fonctionemment

Cela se fait par la mise en commun du fonctionnement de plusieurs routeurs physiques (au minimum deux) qui, de manière automatique, assurerons la relève entre eux d’un routeur à un autre. Le protocole HSRP présente aussi son semblable normalisé qui se nomme VRRP. Celui-ci étant normalisé, il est disponible sur les routeurs d’autres marques que Cisco. Plus précisément, la technologie HSRP permettra aux routeurs situés dans un même groupe (que l’on nomme « standby group ») de former un routeur virtuel qui sera l’unique passerelle des hôtes du réseau local. En se « cachant » derrière ce routeur virtuel aux yeux des hôtes. Les routeurs garantissent en fait qu’il y est toujours un routeur qui assure le travail de l’ensemble du groupe. Un routeur dans ce groupe est donc désigné comme « actif » et ce sera lui qui fera passer les requêtes d’un réseau à un autre.

Pendant que le routeur actif travail, il envoie également des messages aux autres routeurs indiquant qu’il est toujours « vivant » et opérationnel. Si le routeur principal (élu actif) vient à tomber. Il sera automatiquement remplacé par un routeur qui était alors jusque-là « passif » et lui aussi membre du groupe HSRP. Aux yeux des utilisateurs toutefois, cette réélection et ce changement de passerelle sera totalement invisible car ils auront toujours pour unique passerelle le routeur virtuel que forment les routeurs membres du groupe HSRP. Le routeur virtuel aura donc toujours la même IP et adresse MAC aux yeux des hôtes du réseau même si en réalité il y a un changement du chemin par lequel transitent les paquets.

B. Schema

Pour illustrer cela, nous pouvons schématiser la vision que les hôtes auront du réseau ainsi que l’état réel du réseau :

Ce que voient les hôtes du réseau :

HSRP01

L’état réel du réseau :

HSRP02

Les routeurs physiques forment un routeur virtuel. Un des routeurs est en état « Actif » et transmet les échanges alors que l’autre est en « Passif » et reste à l’écoute de l’état du routeur « Actif », prêt à prendre la relève. En réalité, le routeur que voient les utilisateurs est un routeur virtuel composé de plusieurs routeurs qui travaillent via le protocole HSRP.  Formant un groupe, un routeur sera désigné comme le routeur actif qui travaillera réellement et le ou les autres se tiendront prêt à prendre la relève si besoin.

  • Un routeur actif est donc un routeur membre du groupe HSRP qui a été élu comme le routeur principal du groupe. Il fait passer les requêtes au nom du routeur virtuel du groupe et envoie également des messages avertissant ses collègues de son état.
  • Un routeur passif est un routeur membre du groupe HSRP qui n’a pas été élu comme routeur principal mais comme routeur « standby » qui sera donc le premier à intervenir en soutien au routeur actif. Son activité est de rester à l’écoute des « Hello » du routeur actif qui sont les messages qu’il envoie pour avertir les autres routeurs du groupe de son état.
  • Un routeur virtuel est le routeur qui représente le groupe HSRP. C’est celui que les utilisateurs voient (IP, MAC) sur le réseau.
  • Un « standby group » est le groupe que forment les routeurs membres d’un même groupe HSRP. Un standby group est donc représenté par le routeur virtuel.

C. L'élection des routeurs

L’élection des routeurs sert à déterminer lequel sera primaire (actif) et lequel sera secondaire (passif). Le processus d’élection se met en place dès l’installation des liens et des routeurs dans un groupe (après un petit délai d’attente que l’on peut paramétrer, le « standby delay »). Nous verrons lors de la mise en place technique que les routeurs se voient assigner une priorité par l’administrateur. Celle-ci étant par défaut à 100. Le routeur qui aura la plus haute priorité (ou « priority ») sera le routeur primaire ou principal du groupe HSRP. Si aucune modification des priorités n’est faite (qu’elles sont toutes à 100), c’est le routeur qui aura l’IP la plus haute qui sera désigné comme routeur primaire. Le groupe HSRP est alors sûr de trouver un routeur primaire parmi l’ensemble des routeurs qui le compose.
Une fois l’élection faite, seul le routeur principal ou primaire enverra des paquets pour avertir les autres de son état. Ceux-ci seront envoyés en multicast sur l’IP 224.0.0.2 via UDP (afin de ne pas encombrer le réseau inutilement). Les routeurs passifs, attentifs à la réception de ces paquets, prendront le relais (après une réélection) s’ils ne reçoivent pas de paquets « Hello » pendant un certain délais. Nous verrons lors de la mise en place technique que ce délai peut être laissé par défaut ou configuré si besoin.

D. Étude de l'entête d'un paquet HSRP

On peut, à partir de cette analyse de trames, voir la composition d’une entête d’un paquet HSRP et alors mieux comprendre le fonctionnement de ce protocole. Ces entêtes sont codées sur 20 octets :

HSRP03

  •   Version (1 octet)

Indique la version du protocole utilisé, ici c’est la version 0.

  •  Op Code (1 octet)

Indique le type de message transmis par le paquet. On peut trouver trois types de messages qui auront chacun une valeur et une signification différentes :

HSRP04

  •   Les états HSRP (1 octet)

Ce champ sert à décrire l’état de l’expéditeur dans son activité HSRP :

HSRP05

  •   Hellotime (1 octet)

Il représente le délai en seconde entre chaque envois de paquets “Hellotime”. On ne lit ce champs que si le paquet est un paquet « Hello ». C’est-à-dire si l’Op Code est de « 0 ». Dans notre exemple, l’Op Code est bien à zéro. Il s’agit donc d’un paquet Hello. L’ « Hellotime » est de 3 secondes qui est la valeur par défaut.

  •  HoldTime (1 octet)

L’ « HoldTime » est la durée de validité d’un paquet Hello. Il n’est lui aussi lu que si l’Op Code du paquet est « 0 ». Ici, l’ « Holdtime » a la valeur par défaut qui est de 10 secondes. Cela signifie que si notre routeur ne reçoit pas de paquet « Hello » d’un voisin du même groupe durant 10 secondes. Ce voisin sera considéré comme plus opérationnel. Si celui-ci était le routeur actif du groupe. On procédera à une réélection.

  •   Priority (1 octet)

C’est la priorité du routeur qui envoi le paquet. Étant par défaut à 100, elle est dans notre exemple également à 100. Cette priorité est importante dans le cadre d’une élection et d’une 0négociation entre les routeurs.

  •   Group (1 octet)

C’est le numéro du groupe du routeur qui envoie le paquet. Permet de gérer correctement le fait qu’un routeur appartienne à plusieurs groupes HSRP. Par sécurité, il est d’usage de ne pas laisser la valeur du groupe par défaut. Cela permet de ralentir les attaquants dans leurs procédures car ils devront chercher le numéro du groupe avant de pouvoir envoyer de faux paquets aux routeurs membres du groupe HSRP.

  •   Reserved

C’est un champ qui était laissé libre au cas où un futur besoin se ferait sentir pour améliorer le protocole mais il n’est pas toujours pas utilisé.

  •   Authentication data (8 octet)

Indique le mot de passe utilisé lors des échanges HSRP entre les routeurs. Si on n’utilise pas d’authentification. On paramétrera ce champ avec la valeur « Cisco » qui est celle par défaut.

  •   Adresse IP Virtuelle (4 octet)

Indique l’IP du routeur virtuel qui représente le groupe HSRP sur le réseau. Nous pouvons voir par quel port transitent les paquets HSRP par une simple analyse de trames :

HSRP06
On voit donc bien ici que c’est le protocole de transport UDP qui est utilisé et que le port utilisé par les routeurs est le port 1985.

Comment le protocole HSRP permet-il au routeur de mettre à jours le temps de maintien ou « holdtime » de son état avant qu’il ne puisse changer d’état ?

L’holdtime est le délai après lequel, sans recevoir de message « hello » d’un voisin, un routeur le considérera comme plus joignable. Les routeurs envoient donc constamment des messages « hello » sur l’iP multicast 224.0.0.2 en UDP sur le port 1985. De cette façon, les routeurs membres du groupe peuvent s’assurer qu’en recevant un message « Hello » de leur voisin, ceux-ci sont toujours en vie.

Les routeurs mettent à jours le délai « Holdtime » à chaque fois qu’un message « Hello » est reçu. Par exemple en prenant les valeurs par défaut de « Hello » (3 secondes) et « Holdtime » (10 secondes). Si le routeur « R2 » reçoit un paquet Hello provenant de « R3 », il mettra son « Holdtime » à « 0 » pour ce routeur (il met le compteur à zéro).Ainsi, dès qu’un « Hello » time est envoyé, le « Holdtime » revient à « 0 ». Si le « Holdtime » atteint sa limite et qu’aucun message « Hello » provenant de « R3 » n’est reçu pendant 10 secondes, « R2 » considérera « R3 » comme non opérationnel.

Le routeur « R2 » comprendra un paquet comme étant un paquet « Hello » uniquement si son « OpCode » est à « 0 ». Il regardera alors le champ « HelloTime » qui indique pendant combien de temps le paquet sera valide ainsi que le « Holdtime » qui permettra d’indiquer à partir de combien de temps sans nouvelle du routeur en question celui-ci pourra être considéré comme non opérationnel.

III. Mise en place de l'environnement

A. Définition du paramétrage

Nous allons maintenant mettre en place une architecture afin de permettre le paramétrage d’un groupe HSRP. Bien évidemment, cette architecture doit se composer d’au moins deux routeurs Cisco qui font le lien entre deux réseaux. Le paramétrage IP se fera comme suivant :

HSRP07

Nous voyons donc nos trois routeurs physiques qui forment un groupe représenté par le routeur virtuel disponible à l’IP 10.1.1.254. En bleu nous voyons également les priorités que nous mettrons sur nos routeurs. Nous laisserons donc les routeurs « R1 » et « R2 » en priorité par défaut 100 et mettrons « R3 » en priorité 150. Ce sera donc « R3 » qui sera, lors de l’élection, élu comme prioritaire et actif. En revanche si le routeur « R3 » vient à tomber, c’est « R1 » qui prendra le relais car, à priorité égale, c’est le routeur avec l’IP la plus haute qui prend le relais. Ici c’est donc « R1 » avec l’IP « 10.1.1.253 ».

B. Configuration HSRP

Une fois que tous les routeurs sont opérationnels (qu’ils font bien tous office de passerelle individuellement), nous pouvons passer à la mise en place du HSRP. Sur chaque routeur, il faut maintenant définir une IP (en plus des IP d’interfaces déjà définies) qui sera l’IP du routeur virtuel et une priorité si l’on souhaite changer celle par défaut :

# R1
conf t
interface fa0/0
standby 10 ip 10.1.1.254
standby 10 preempt

« Standby » est la commande qui permet la configuration du HSRP. « 10 » est le numéro du groupe HSRP dont fait partie l’interface. Il faut savoir qu’un routeur peut faire partie de plusieurs groupes HSRP. Nous aurons alors cette annonce qui se fera sur notre terminal :

HSRP08
On voit alors que l’état HSRP de notre routeur « R1 » a changé. Il est passé de « Speak » (état de négociation et d’élection) à « Standby » pour attendre l’élection des routeurs du groupe. Étant donné qu’il est pour l’instant seul dans le groupe HSRP numéro 10. Il est automatiquement passé en « Active ». Il est donc le routeur principal du groupe HSRP numéro 10.

On passe maintenant au paramétrage HSRP de notre second routeur « R2 » :

# R2
conf t
interface fa0/0
standby 10 ip 10.1.1.254
standby 10 preempt

On le met également dans le groupe HSRP 10. Nous pourrons alors voir cette annonce :

HSRP09
Le routeur est passé de l’état « Speak » qui est l’état de négociation à l’état « Standby ». On peut en déduire que le routeur « R1 » est resté prioritaire. En effet, bien qu’ils aient la même priorité par défaut (100), on sait que c’est le routeur qui à l’IP physique la plus haute qui est élu dans ce cas-là. Ici c’est donc « R1 » avec l’IP 10.1.1.253 contre 10.1.1.252 pour « R2 ». Le routeur « R2 » passe donc en mode « Sta ndby ».
On configure alors notre dernier routeur R3 :

# R3
Conf t
Interface fa0/0
Standby 10 ip 10.1.1.254
Standby 10 priority  105
Standby 10 preempt

On voit alors sur notre routeur « R1 » anciennement en « Active » qu’il est passé en « Speak » pour renégocier l’élection, puis en « Standby » :

HSRP10
Cela est dû au fait que le routeur « R3 » à une priorité plus haute et qu’il est donc passé en « Active » comme nous le confirme cette annonce sur le terminal « R3 »:

HSRP11

On peut maintenant définir un hôte qui aura pour passerelle le routeur virtuel 10.1.1.254. Si l’on fait un « traceroute » depuis cet hôte. Nous verrons qu’il passe bien par la passerelle virtuelle 10.1.1.254.

HSRP12

C. Test du HSRP

On peut maintenant passer à notre phase de test où nous allons désactiver le routeur actif pour voir si les autres routeurs prennent bien le relais. On effectue donc un ping continu a travers le routeur virtuel et on ouvre le terminal de nos routeurs pour voir les annonces HSRP. On désactive donc notre routeur « R3 » qui est notre routeur actif. Une fois le routeur « R3 », nous voyons une latence au niveau du ping au travers notre routeur virtuel :

HSRP13
Cela est dû au temps de renégociation et de réélection du routeur actif dans le groupe HSRP. Cela se confirme par l’annonce que l’on peut voir sur le routeur « R1 » :

HSRP14
On voit que celui-ci qui était en attente « standby » est maintenant passé actif. Pour rappel, les routeurs « R1 » et « R2 » ont la même priorité par défaut « 100 » mais le routeur « R1 » à une IP plus élevée que le routeur « R2 », c’est donc lui qui passe en « active ».

Pour voir les échanges qui ont lieu entre les routeurs, nous pouvons également faire une analyse de trames :

HSRP15
On voit bien que les routeurs actifs et passifs envoient en multicast sur l’adresse 224.0.02 leur état dans des paquets « Hello » à intervalle régulier.

D. Problème de sécurité

Nous voyons par une simple analyse de trame que le mot de passe utilisé lors des échanges HSRP afin d’authentifier les routeurs entre eux passent en clair sur le réseau :

HSRP16
Qu’il soit celui laissé par défaut ou non, le mot de passe reste en clair et cela donne la possibilité à des attaquants d’envoyer des paquets en multicast 224.0.0.2 en UDP sur le port 1985 aux routeurs afin de diffuser de fausses informations et avec le bon mot de passe qui peut être facilement capturé.

Nous allons maintenant chercher à hasher ce mot de passe afin de ne pas diffuser le mot de passe en clair. Bien que le hash puisse être retrouvé (avec du temps et des ressources importantes), cela ralentira grandement les attaquants. On utilise pour cela la commande suivante :

standby 10 authenticate md5 key-string

Le temps de mettre l’authentification par mot de passe hashé sur tous vos routeurs. Vous aurez surement ce message d’erreur :

HSRP17

Cela est dû au fait que certains routeurs envoient un mot de passe hashé alors que d’autre attendent un mot de passe en clair. On voit donc bien ici l’importance du mot de passe dans les échanges HSRP. Une fois que le hash est mis sur tous les routeurs, tout devrait revenir à la normal et nous pourrons faire une nouvelle analyse de trame :

HSRP18

On voit ici que le mot de passe n’est plus indiqué en clair dans l’entête HSRP.

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Mickael Dorigny

Fondateur d'IT-Connect.fr et d'Information-security.fr. Auditeur sécurité chez Amossys.

    mickael has 478 posts and counting.See all posts by mickael

    4 pensées sur “Mise en place du protocole HSRP

    • j’aurais aimé savoir la config du switch et si c’est un lien trunk montant vers les routeurs ?

      On peut le faire avec un switch de niveau 3 dans un environnement routé en ospf ?
      Comment faire alors ? (:

      Répondre
    • Salut Mickael

      Super ton site, je n’ai pas tout vu, pour HSRP tu pourrais peut-être le compléter avec la surveillance des cartes vers l’extérieur :

      standby 10 track Serial 0/0 10

      si l’interface S 0/0 passe à un autre état que up/up la priorité est décrémenté de 10.

      Répondre
    • Bonjour , j’ai un problème avec la commande « standby 10 ip 10.1.1.254
       »

      R1(config-if)#standby 10 ip 10.1.1.254
      ^
      % Invalid input detected at ‘^’ marker.

      Je ne vois pas du tout ou est la faute , pourriez vous m’aidez s’il vous plait (je suis sur packet tracer 5.0 – avec un routeur 2811)

      Répondre
      • Bonjour Sam,

        Il semblerait que tu n’ai sélectionné aucune interface. Le soucis se trouve là.

        Cdlt

        Répondre

    Laisser un commentaire

    Votre adresse de messagerie 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.