Le protocole OSPF a une autre approche quant à l’apprentissage ou le partages de ses informations contenu dans sa table de routage. En effet, il va annoncer ses routes en envoyant des paquet LSA (Link State Advertisement) aux routeur membre de sa zone. Tous les routeurs de la zone, les intégrerons dans sa base de données LSDB (Link State DataBase).
Chaque LSA à un identifiant, ce qui permet d’optimiser l’envoie. Avant d’envoyer un LSA, le routeur enverra un message demandant à son voisin s’il a déjà ce LSA. Dans le cas où le routeur voisin réponds qu’il ne l’a pas, il l’envoie, dans le cas contraire l’envoie ne se fait pas. Une fois les LSA « inondés », c’est-à-dire envoyé à tous ses voisins, il enverra de manière occasionnelle les mises à jour (par exemple lorsqu’un lien change d’état (UP<->DOWN) ou lorsque le LSA arrive en fin de vie (30 minutes par défaut). L’ensemble de ses processus permettent que l’ensemble des routeurs d’un même zone partage le même LSDB, c’est-à-dire les mêmes informations.
La LSDB même si elle contient toutes les informations, n’indique pas la meilleure route à utiliser par le paquet. Le routeur va devoir lui-même calculer la meilleure route en utilisant l’algorithme de Dijkstra. Cet algorithme permet de découvrir le plus court chemin entre deux points, c’est ce même algorithme que nous allons retrouver dans les applications GPS par exemple. En s’appuyant sur toutes les données contenues dans la LSDB, il va définir les routes qui devront être ajouter dans les tables de routage.
Nous avons ici trois étapes clé quant au fonctionnement du protocole OSPF sur un routeur :
- Devenir voisin
- Echange des LSAs pour avoir une LSDB commune
- Calcul de la meilleure route
Pour qu’il y ait relation de voisinage entre deux routeurs exécutant le protocole OSPF, il faut bien évidemment qu’il soit lié, c’était membre d’un même réseau (ou sous réseau) mais cette condition n’est pas la seule. En effet, pour que la relation de voisinage puisse se faire, les routeurs envoie des messages Hello toutes les 10 secondes sur l’adresse multicast 224.0.0.5, si les deux routeurs ont une configuration compatible, il pourra y avoir une relation de voisinage. Ce mécanisme permettra d’apprendre les changements et permet de calculer les nouvelles routes possibles et éventuellement de modifier les routes déjà présente pour proposer une route plus fiable ou plus pertinente. Dans le message Hello, nous retrouverons l’identifiant du routeur (Router ID) codé sur 32 bits. Par défaut, le RID est une adresse ip d’une interface du routeur. Cette identifiant unique sera dans le LSA est permettra de savoir qui a envoyé quoi. De ce fait si un routeur ne reçoit plus de message Hello au bout de l’intervalle qui a été défini (10 seconde pas défaut), il attendra 4 fois cette intervalle. Passé ce délai, le routeur ne fera plus parti des voisins, il recalculera les chemins les plus courts. Les LSAs intégrerons ses nouvelles informations et mettrons à jours les LSDB. Pour s’assurer que les routeurs partagent la même LSDB, une autre action sera réalisée par les routeurs, qui est une action de vérification. En effet, toutes les 30 minutes (valeur par défaut), les routeurs inonde le réseau de LSA pour s’assurer que tous les LSDB sont identiques. Regardons cela en pratique, nous repartirons de la même topographie que pour le protocole de routage RIP.
Configuration des interfaces R1
Router#enable
Router#configure terminal
Router(config)#hostname R1
R1(config)#interface gig 0/0
R1(config-if)#no shutdown
R1(config-if)#ip address 10.0.0.5 255.255.255.252
R1(config-if)#interface gig 0/1
R1(config-if)#no shutdown
R1(config-if)#ip address 10.0.0.9 255.255.255.252
Configuration des interfaces R2
Router#enable
Router#configure terminal
Router(config)#hostname R2
R2(config)#interface gig 0/0
R2(config-if)#no shutdown
R2(config-if)#ip address 192.168.0.254 255.255.255.0
R2(config-if)#interface gig 0/1
R2(config-if)#no shutdown
R2(config-if)#ip address 10.0.0.1 255.255.255.252
R2(config-if)#interface gig 0/2
R2(config-if)#no shutdown
R2(config-if)#ip address 10.0.0.6 255.255.255.252
Configuration des interfaces R3
Router#enable
Router#configure terminal
Router(config)#hostname R3
R3(config)#interface gig 0/0
R3(config-if)#no shutdown
R3(config-if)#ip address 192.168.1.254 255.255.255.0
R3(config-if)#interface gig 0/1
R3(config-if)#no shutdown
R3(config-if)#ip address 10.0.0.2 255.255.255.252
R3(config-if)#interface gig 0/2
R3(config-if)#no shutdown
R3(config-if)#ip address 10.0.0.10 255.255.255.252
Configuration de l’OSPF sur R1
La configuration n’est pas très différente que celle que nous avons vu pour le protocole RIP. Nous allons commencer par activer le protocole OSPF sur le R1. Nous devons luis indiquer un identifiant de processus. En effet, sur un même routeur nous pouvons avoir plusieurs processus OSPF qui s’exécute.
R1(config)#router ospf 1
Nous allons indiquer le router ID manuellement.
R1(config-router)#router-id 1.1.1.1
Nous pouvons maintenant indiquer nos réseaux. Le protocole OSPF a une particularité quant aux déclarations de réseau, en effet, nous devons indiquer le masque inversé. Nous allons donc déclarer nos réseaux adjacents avec leur masque. Nous allons tous mettre dans la même zone.
R1(config-router)#network 10.0.0.4 0.0.0.3 area 0
R1(config-router)#network 10.0.0.8 0.0.0.3 area 0
Configuration de l’OSPF sur R2
R2(config)#router ospf 1
R2(config-router)#router-id 2.2.2.2
R2(config-router)#network 192.168.0.0 0.0.0.255 area 0
R2(config-router)#network 10.0.0.0 0.0.0.3 area 0
R2(config-router)#network 10.0.0.4 0.0.0.3 area 0
Dans la table de routage, nous pouvons voir une router précédé par la lettre « O », ce qui indique que cette route a été apprise via le protocole OSPF.
Configuration de l’OSPF sur R3
R3(config-if)#router ospf 1
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 192.168.1.0 0.0.0.255 area 0
R3(config-router)#network 10.0.0.0 0.0.0.3 area 0
R3(config-router)#network 10.0.0.8 0.0.0.3 area 0
Table de routage R3
Ici, nous pouvons lire que la distance administrative est de 110, donc le protocole OSPF est prioritaire sur le protocole RIP est à coté de cela nous avons une métrique de « 2 ». Cette métrique est calculée à partir de la bande passante qui sera divisé par la bande passant de référence qui est définit par défaut à 100 000 000 bit/s. L’opération effectué sera alors « bande passante de référence / bande passante de l’interface en bit/s ». Le résultat ne peut être qu’un entier et ne peut pas être inférieur à 1. Si toutefois la valeur est inférieure, le coût sera égale à 1, dans ce cas, il peut être pertinent de modifier la valeur de la bande passante de référence. En effet, en partant de la formule de calcul nous pourrions avoir le tableau suivant :
Nous constatons que les liens 10 Gb ou 1 Gb ou 1 Fa auront les mêmes coûts si nous conserverons cette valeur alors que nous savons qu’il sera plus pertinent d’utiliser une liaison 10Gb/s plutôt qu’une liaison de 100Mb/s. La ligne de commande pour modifier cette valeur est la suivante :
R1(config-router)#auto-cost reference-bandwidth 1000
Pour connaître le cout d’une route, nous devons additionnées l’ensemble des liaisons emprunté par un paquet. L’OSPF est donc un protocole à état de lien.
Une capture WireShark nous permet de voir les messages Hello envoyé toute les 10 secondes.
En désactivant une interface, nous pouvons voir, toujours sur Wireshark, que nous voyons un nouveau type de paque LS Update aussi appelé LSU. Les LSU contient un ensemble de LSA pour la mise à jour.
Si nous nous attardons sur cette capture de paquet, nous voyons que 2 Type de LSA sont envoyé :
- Les paquets LSA Type 1 (routeur LSA) sont envoyés entre les routeurs dans la même zone d’origine et ne quittent pas la zone. Un routeur OSPF utilise des paquets LSA de type 1 pour décrire ses propres interfaces, mais transporte également des informations sur ses voisins vers des routeurs adjacents dans la même zone.
- Les paquets LSA Type 2 (Network LSA) sont générés par le routeur désigné (DR) pour décrire tous les routeurs connectés directement à son segment. Les paquets LSA de type 2 sont inondés entre des voisins dans la même zone d’origine et restent dans cette zone.
Il existe en effet de type de LSA.
Nous pouvons également voir que nos LSDB est identique à l’aide de la commande
RX#show ip ospf database
LSDB R1
LSDB R2
LSDB R3
Election DR/BDR
Mais que se passerait-il si deux LSDB n’était pas identique ? Qu’elle LSDB sera prise en compte ? Nous allons retrouver un peu les mêmes mécanismes que nous avons vu avec le spanning-tree. Nous aurons une élection d’un routeur désigné (DR), il sera le juge de paix. Il y aura aussi l’élection d’un Router désigner secondaire BDR), qui prendra le relais si le routeur désigné est défaillant. Rappelons-nous les LSA sont connecté sur un même réseau, donc si nous voulons partir d’un cas pratique, nous utiliserons la topologie suivante :
Nous allons configurer les routeurs de la façon suivante :
Configuration R1
Router#enable
Router#configure terminal
Router(config)#hostname R1
R1(config)#interface gig 0/0
R1(config-if)#no shutdown
R1(config-if)#ip address 10.0.0.1 255.255.255.248
R1(config-if)#interface gig 0/1
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.0.254 255.255.255.0
R1(config-if)#router ospf 1
R1(config-router)#router-id 1.1.1.1
R1(config-router)#network 10.0.0.0 0.0.0.7 area 0
R1(config-router)#network 192.168.0.0 0.0.0.255 area 0
Configuration R2
Router#enable
Router#configure terminal
Router(config)#hostname R2
R2(config)#interface gig 0/0
R2(config-if)#no shutdown
R2(config-if)#ip address 10.0.0.2 255.255.255.248
R2(config-if)#interface gig 0/1
R2(config-if)#no shutdown
R2(config-if)#ip address 192.168.1.254 255.255.255.0
R2(config-if)#router ospf 1
R2(config-router)#router-id 2.2.2.2
R2(config-router)#network 10.0.0.0 0.0.0.7 area 0
R2(config-router)#network 192.168.1.0 0.0.0.255 area 0
Configuration de R3
Router#enable
Router#configure terminal
Router(config)#hostname R3
R3(config)#interface gig 0/0
R3(config-if)#no shutdown
R3(config-if)#ip address 10.0.0.3 255.255.255.248
R3(config-if)#interface gig 0/1
R3(config-if)#no shutdown
R3(config-if)#ip address 192.168.2.254 255.255.255.0
R3(config-if)#router ospf 1
R3(config-router)#router-id 3.3.3.3
R3(config-router)#network 10.0.0.0 0.0.0.7 area 0
R3(config-router)#network 192.168.2.0 0.0.0.255 area 0
Configuration de R4
Router#enable
Router#configure terminal
Router(config)#hostname R4
R4(config)#interface gig 0/0
R4(config-if)#no shutdown
R4(config-if)#ip address 10.0.0.4 255.255.255.248
R4(config-if)#interface gig 0/1
R4(config-if)#no shutdown
R4(config-if)#ip address 192.168.3.254 255.255.255.0
R4(config-if)#router ospf 1
R4(config-router)#router-id 4.4.4.4
R4(config-router)#network 10.0.0.0 0.0.0.7 area 0
R4(config-router)#network 192.168.3.0 0.0.0.255 area 0
Nous pouvons vérifier si les routes ont bien été apprise sur nos différents routeur. Par exemple sur la table de routage de R1, nous voyons les routes apprissent par l’OSPF (route précédée par la lettre « O »).
Nous pouvons également constater que les LSDB des 4 routeurs sont identiques.
Maintenant que nous savons que notre configuration OSPF est fonctionnelle, nous allons identifier le routeur désigné appelé aussi DR (Designed Router). Pour ce faire, nous allons consulter la table de voisinage du protocole OSPF et plus particulièrement la colonne « State » de cette table.
Nous consulterons la commande du routeur R1, pour ce faire, nous exécuterons la commande suivante :
R1#show ip ospf neighbor
Nous avons plusieurs états :
- 2WAY/DROTHER : 2 WAY est la relation de base de voisinage, il a reçu un LSA contenant son nom par un voisin et par conséquent, il est connu de son voisin. DROTHER, nous indique qu’il n’est ni DR, ni BDR.
- FULL/BDR : Lorsque nous activons le protocoles OSPF, le routeur se mets en statut « Loading » et envoie des paquets LSR (Link State Request) afin de demander les informations à ses voisins, ses informations sont envoyées intégrée dans les paquets LSA qui sont eux même regrouper dans des LSU. Lorsque cette phase est terminée, il rentre en statut « FULL ». Ce statut lui permet de créer la table de routage OSPF et de router le trafic. Le voisin est le BDR.
- FULL/DR : Dans cet état, le protocole OSPF du voisin est opérationnel et il est le DR.
Le DR est celui qui a l’identifiant routeur le plus élevé. L’identifiant du routeur le plus élevé est le router-id 4.4.4.4 qui a été configuré sur le routeur R4. Router-id étant un paramètre optionnel, nous allons le supprimer de notre configuration est ceux, sur les 4 routeurs de notre lab.
Rx(config)#router ospf 1
Rx(config-router)#no router-id
Rx(config-router)#end
Rx#clear ip ospf process
Nous aurons à confirmer l’opération
Retournons voir la table de voisinage sur notre routeur R1.
Les identifiants de nos voisins est l’adresse IP la plus élevé configurer sur le voisin. Le DR est encore une fois l’adresse IP la plus élevé.
Dans notre contexte, nous sommes « par défaut », nous pouvons choisir le DR en modifiant sa priorité. Dans la capture de la table de voisinage ci-dessus, nous voyons que la priorité à 1, c’est la priorité la base (0 étant une exclusion du processus d’élection) et 255 la priorité la plus forte. On pourrait très bien configurer notre router avec le Router ID 192.168.1.254 DR, le Router ID 192.168.3.254 BDR. Cette configuration se fera sur l’interface que recevra les LSA (ou plutôt les LSU).
Le Router ID 192.168.1.254 est le router R2, la configuration pour le faire passer DR devra donc se faire sur Gig 0/0.
R2(config)#interface gig 0/0
R2(config-if)#ip ospf priority 255
Le Router ID 192.168.3.254 est le router R4, la configuration pour le faire passer BDR devra donc se faire sur Gig 0/0.
R4(config)#interface gig 0/0
R4(config-if)#ip ospf priority 254
Nous devons ensuite relancer le processus OSPF sur tous les routeurs.
Rx(config)#router ospf 1
Rx(config-router)#no router-id
Rx(config-router)#end
Rx#clear ip ospf process
Consultons maintenant notre table de voisinage sur R1.
Il peut être pertinent d’attribuer le statut de routeur désigné à un routeur qui se trouve au centre de votre infrastructure.
Les zones OSPF
Pour bien comprendre l’utilité des zones OSPF, il faut imaginer un réseau d’entreprise avec plusieurs centaines de routeurs. Les mises à jour de LSDB serait volumineux et le calcul du chemin le plus court prendrait beaucoup de ressource matérielle (CPU, RAM, …). Il y aura donc de la latence qui aura pour conséquence d’avoir des LSDB rarement identique. La solution sera alors de créer des regroupements de router qui se partagerons la même LSDB.
Ici, nous avons 3 zones une zone rouge, une zone bleue et une zone violette. Dans cette topologie, nous voyons que la liaison entre la zone rouge et la zone bleu est assuré par le routeur R2. La liaison entre la zone bleue et violette est assuré par le routeur R3. Dans le protocole OSPF, R2 et R3 sont des ABR (Area Border Router ou en français Router en bordure de zone). R4 va annoncer ses réseaux à R2 et R5 va annoncer ses routes à R3. Les routeurs qui ne sont pas ABR et qui sont à l’extrémité d’une zone, par exemple R1 ou R4 ou R5 peut être des ASBR (Autonomous System Border Router). Ses routeurs ont la particularité de se connecter à des réseaux partenaires et pourront faire la passerelle entre les protocoles de routages. En effet, un administrateur réseaux ne peux pas imposer un protocole de routages à un autre administrateur réseau. Il faudra donc utiliser un système autonome (Autonomous System) qui permettra de créer une cohérence entre les différents protocoles de routage.