User Tools

Site Tools


informatique:cisco:ospf

tag_reseau_protocole_routage_ieee

OSPF

Open Shortest Path First est un protocole de routage à état de lien non propriétaire ; c'est le protocole de routage intra-domaine (IGP) le plus utilisé de nos jours.

Théorie

  • protocole de routage à état de liens standardisé par l'IEEE (version 2 = RFC 2328)
  • update seulement sur changement de topologie
  • updates périodiques toutes les 30 min
  • utilisation d'IP multicast pour dialoguer : 224.0.0.5 pour les routeurs et 224.0.0.6 pour les DR/BDR
  • basé sur l'algorithme de Dijkstra (SPF) qui permet de transformer la table de topologie en table de routage
  • comme en EIGRP, il existe 3 tables : la table des voisins, la table de topologie et la table de routage qui en découle.
  • notion d'aire OSPF = sectorisation qui permet d'agréger les routes, ce qui apporte :
    • allègement des tables de routage
    • réduction des overhead des LSU
    • réduction des calculs SPF

Cisco recommande de ne pas dépasser 50 routeurs par aire.

  • toutes les aires (regular area ou aire ordinaire) sont reliées à l'aire 0 (aire backbone ou aire de transit) par leur ABR (routeur de bordure). Chaque flux entre 2 aires passe forcément par l'aire 0. Chaque routeur ne communique qu'avec des routeurs de la même aire que lui (sauf si c'est un ABR). Les numéros d'aires vont de 0 à 4294967295.
  • découverte du voisinage par l'échange de paquets Hello ; si les conditions sont requises, 2 voisins deviennent adjacents et peuvent ainsi échanger leurs tables de routage
  • la métrique (le coût) OSPF est basé sur la bande passante (BW) du lien inter-routeur (= 108 ÷ BW)
  • le protocole OSPF est encapsulé dans un paquet IP (protocole n°89), mais le protocole OSPF inclut des paquets de type ACK qui permettent d'acquitter la réception de message
  • les 3 types de réseaux définis par OSPF sont
    • point-to-point
    • broadcast
    • NBMA (Non-Broadcast Multi-Access)

Terminologie

  • PDU Protocol Data Units ; les LSAs sont des PDUs
  • LSA Link-State Advertisement qui sont envoyer à tous les routeurs de l'aire
  • LSR Link-State Request : si les LSA sont plus récents que la base de topologie, le routeur demande les informations manquantes
  • LSU Link-State Update : envoyé sur demande (LSR) par le DR aux autre routeurs du segment
  • LSDB Link-State DataBase qui sont identiques sur tous les routeurs de l'aire
  • DR Designated Router
  • BDR Backup Designated Router
  • ABR Area Border Router (Cisco recommande de ne pas dépasser 2 aires par ABR en plus de l'aire 0)
  • ASBR Autonomous Sytem Boundary Router = tout routeur qui redistribue des routes externes (statiques ou d'un autre AS)
  • SPF Shortest Path First (algorithme de Dikjstra) algorithme du plus court chemin
  • stub area aire “impasse”, qui ne reçoit pas de LSA type 5
  • totally stubby area est une stub area qui ne reçoit pas non plus les LSAs de type 3
  • NSSA ou Not So Stubby Area est une stub area qui annonce un réseau externe

BR, BDR et relations d'adjacence

Une relation d'adjacence permet l'échange d'informations de routage entre 2 routeurs voisins ; cela ne peut se faire que si ceux-ci ont les 4 paramètres suivants en commun :

  • les intervalles Hello et dead time
  • le numéro d'aire
  • l'authentification mutuelle (= le même password par exemple)
  • le flag stub area qui identifie une stub area càd une aire “impasse” (cf plus haut)

Selon le type de lien qui relie 2 routeurs, l'OSPF va monter différents types d'ajacence :

  • avec les liens point-à-point comme du HDLC : adjacence complète (full adjacency)
  • avec des liens LAN comme Ethernet, OSPF procède à l'élection d'un DR et d'un BDR par segment ; ceux-ci centralisent les échanges (un peu à la manière d'un root brige avec le protocol Spanning-Tree) et les retransmettent aux autres routeurs (DROTHERs). Cela permet de limiter les flux inter-routeur.

Il y a autant de DR dans une aire que de réseau multi-access.

L'élection d'un DR/BDR se fait en fonction des critères ci-dessous ; en cas d'égalité, on passe au critère suivant ; le routeur qui remporte l'élection devient DR ; le second devient BDR). Les critères d'élection sont les suivants, par ordre de priorité :

  • plus haute priorité OSPF
  • plus haut router-id
  • plus haute IP de loopback
  • plus haute IP sur les autres interfaces

Les différents types de paquets

  • LSU
  • LSR
  • DBD : DataBase Descriptor
  • LSAck
  • hello (Hello interval sur NBMA = 30s, sur interface rapides comme l'Ethernet c'est 10s ; le dead time est égal à 3 4 fois le Hello interval donc = 40s sur Ethernet par ex.)

Les différents types de LSAs

Les Link State Advertisement sont les paquets utilisés par les routeurs OPF pour communiquer (des LSUs) ; ils doivent être acquitter par les voisins (il sont retransmis toutes les retransmit-interval - 5s par défaut - tant que l'acquittement n'est pas reçu). Il y en a de plusieurs types :

  • LSA type 1 (router) : envoyés par chaque routeur, contient les routes connected ; ils sont de type :
    • transit
    • p2p
    • stub
    • virtual link
  • LSA type 2 (network) : annonce d'un réseau et des routeurs qui y sont connectés ; initié par un DR
  • LSA type 3 et 4 (summary) : ce sont des route summary envoyés par un ABR, et transmis respectivement aux autres ABRs et aux ASBRs
  • LSA type 5 (external) : annonce d'une route externe par un ASBR (n'est pas propagé dans les stub areas)
  • LSA type 7 (NSSA) : générés par les ASBR d'une aire NSSA, ils sont convertis par l'ABR de l'aire en LSA de type 5.
  • LSA type 9 à 11 (opaque)

Les états OSPF

DOWN premier état OSPF ; le routeur émet des hello mais n'en reçoit pas
ATTEMPT uniquement sur NBMA ; envoi de hello unicast a son voisin dont le dead time a expiré
INIT le routeur reçoit un hello d'un voisin, mais il ne contient pas (encore) son router-id
2WAY communication bidirectionnelle établie = les hellos reçus contiennent son router-id ; état normal d'un DROTHER avec un autre DROTHER puisqu'un routeur ne peut être FULL qu'avec le DR et le BDR)
EXSTART état d'échange de link state information avec le DR/BDR
EXCHANGE état d'échange de DBD/LSA avec le DR/BDR
LOADING suite à l'état EXCHANGE, état de demande au voisin une information pour mise à jour (link-stat request)
FULL état normal symbolisant une adjacence complète = la base de données des voisins sont synchronisés

En résumé : seul l'état FULL dénote bon fonctionnement sauf sur un réseau de type broadcast (comme l'Ethernet) dans le cas de l'adjacence de 2 routeurs DROTHER qui restent à l'état 2WAY.

Voici l'algorithme d'état OSPF :

OSPF over NBMA

Non-Broadcast Multi-Access est un type de réseau qui n'accepte pas le broadcast (multicast) et qui est en mode multi-access (!= point à point). C'est le cas par défaut de Frame Relay.

  • broadcast (ex : Ethernet) : permet la découverte automatique des voisins (par paquets hello) et nécessite l'élection d'un BR/BDR
  • non-broadcast (ex : FR, ATM, X.25) : mode par défaut pour le FR ; ne permet pas la découverte automatique des voisins ; nécessite l'élection d'un BR/BDR
  • point-to-multipoint : peu conseillé, plusieurs voisins par réseaux, détection automatique des voisins, ne nécessite pas de DR/BDR
  • point-to-point (ex : interfaces série) : un voisin par interface, ne nécessite pas de DR/BDR

Timers par défaut

brouillon / à valider

Tableau récapitulatifs des timers par défaut :

Protocole Hello timer (s) Dead timer (s)
NBMA FR 30 120
Multipoint Broadcast 30 120
Multipoint Non-Broadcast 30 120
Broadcast Ethernet 10 40
Point-to-point Série 10 40

Mise en place basique

Les best pratices recommandent d'utiliser une loopback pour faire de l'OSPF, car cette interface locale est toujours up. On s'en servira comme identifiant du routeur dans l'OSPF (c'est conseillé aussi, mais pas obligatoire).

R1(config)interface loopback 0
R1(config-if)description Lo0 pour OSPF
R1(config-if)ip address 192.168.0.23 255.255.255.255

Pour activer le routage : on créer une instance OSPF (ici le processus 111 qui est un ID local), et on spécifie l'identifiant OSPF du routeur (NB : ce n'est pas forcément une adresse IP du routeur, on peut mettre une valeur aléatoire sur 32bits ; cependant il est préférable d'utiliser l'IP de la loopback du routeur) :

R1(config)#router ospf 111
R1(config-router)#router-id 192.168.0.23

NB : Si la commande router-id n'est pas définie, le routeur prendra par défaut la plus haute valeur d'adresse IP qu'il trouvera sur ses interfaces actives dans l'OSPF. Ce paramètre n'est pas préemptif, ce qui veux dire que l'on doit redémarrer le processeur OSPF sur le routeur pour qu'il prenne en compte une nouvelle valeur. Pour en finir sur ce router-id, il faut savoir que cela ne représente pas une adresse IP : on peut très bien spécifier router-id 10.0.0.1 sur un routeur alors que l'adresse IP 10.0.01 appartient à un autre équipement (mais ce n'est bien sur pas conseillé !).

.. Puis on annonce les réseaux connus, avec la syntaxe network <adresse du réseau> <masque inversé (wildcard)> area <numéro de l'aire>. Cette commande :

  • va activer l'OSPF sur la ou les interfaces qui matchent
  • va annoncer dans l'OSPF les réseaux des interfaces qui matchent, avec les masques définis sur ces interfaces.

Ce dernier point signifie que si on a network 10.0.0.1 0.0.0.0 area 0 (/32) et une interface en ip address 10.0.0.1 255.255.255.0 (donc un /24), c'est bien le réseau 10.0.0.0 /24 qui va être annoncé. C'est pour ne pas confondre cela qu'il est souvent conseiller de déclarer dans l'OSPF les interfaces de routage (en /32, comme l'exemple que je viens de donner) et non les réseaux.

On annonce la loopback 0 ainsi que les réseaux connus que l'on veut injecter dans l'OSPF.

R1(config-router)#network 192.168.0.23 0.0.0.0 area 0
R1(config-router)#network 192.168.1.0 0.0.0.255 area 0

Si l'interface de routage du réseau 192.168.1.0/24 est le .254, la dernière lignes peut également s'écrire ainsi :

R1(config-router)#network 192.168.1.254 0.0.0.0 area 0

Le routeur Cisco va automatiquement détecter l'interface reliée à ce réseau et activer le routage OSPF dessus. area 0 c'est l'aire backbone (dorsale). En effet, afin d'éviter de propager la totalité de la base de données des liens, l'OSPF permet de sectoriser un réseau en différentes aires (~domaines). Les routeurs à la frontière des aires sont appelés Area Border Router (ABR).

Une autre méthode alternative pour déclarer le réseau 192.168.1.0/24 consiste à activer explicitement l'OSPF sur son interface de routage :

R1(config-if)#ip ospf 111 area 0

Définir les coûts OSPF

OSPF définit les coûts par défaut qui sont historiquement égaux à la vitesse de l'interface divisé par 10^8, donc une interface à 100Mbps aura un coût par défaut de 1.

On peut personnaliser ce coût :

(config-if)#ip ospf cost 5
(config-router)#auto-cost reference-bandwidth

Configuration avancée

Redistribution de routes

La redistribution de route est utilisée pour injecter des routes apprises d'un AS vers un autre AS : par exemple de eigrp 1 vers ospf 1 ; ou des routes statiques vers eigrp 1.

Voici un article plus détaillé sur la redistribution de routes.

Authentification

Les routeurs doivent bien sur être configurés de la même manière des 2 cotés du lien.

Par clé simple

Il transite en clair sur le réseau ; sur l'interface voulue participant à l'OSPF :

 (config-if)#ip ospf authentication
 (config-if)#ip ospf authentication-key san-fran

Par hash MD5

 (config-if)#ip ospf authentication message-digest
 (config-if)#ip ospf message-digest-key 1 md5 toto

avec 1 l'ID le key-id (de 1 à 255) et toto la clé (alphanumérique sur 16 bits)

Pour ne pas faire apparaitre les mots de passe MD5 en clair dans la conf il faut activer le service suivant :

(config)#service password-encryption

Passive interface

Pour désactiver l'OSPF sur une interface de routage, on utilise la commande passive-interface :

router ospf 111
 passive-interface se0/0/0

Cette interface ne participera plus à l'OSPF, mais son réseau continuera d'être annoncé/routé (s'il y a bien la ligne network <réseau> etc..)

Agrégation de routes

Ne peut se faire que sur les ABR ou les ASBR :

  • les ABRs : agréger les routes de l'aire 1 afin de limiter les annonces vers les autres aires
(config-router)#network 10.1.1.0 0.0.0.255 area 1
(config-router)#network 10.1.2.0 0.0.0.255 area 1
(config-router)#area 1 range 10.1.0.0 255.255.0.0

Ici on agrège pour n'annoncer qu'un réseau en /16 (attention il ne faut pas que d'autres réseaux de la plage soient utilisés sur un autre routeur !).

On peut spécifier des réseaux agrégés à ne pas diffuser :

(config-router)#area 1 range 10.1.0.0 255.255.0.0 not-advertise
  • les ASBRs : agréger les routes redistribuées dans l'OSPF à partir d'une source externe (statique, autres IGP, etc…)
(config-router)#summary-address 192.168.0.0 255.255.0.0

Si le routeur agrège le réseau 192.168.0.0/16 mais qu'il ne possède connait que le réseau 192.168.0.0/24, alors il ajoute une route vers Null0 avec un coût de 0 pour les réseaux de la plage qu'il ne connait pas :

ABR#show ip route 192.168.1.0
Routing entry for 192.168.1.0/24
  Known via "ospf 1", distance 110, metric 0, type intra area
  Routing Descriptor Blocks:
  * directly connected, via Null0
      Route metric is 0, traffic share count is 1

Stub area

Doit se configurer sur chaque routeur de l'aire (ici l'aire 3) :

R1(config-router)#area 3 stub

Cela provoque l'apparition d'une route par défaut :

sh ip route
 [..]
 O*IA 0.0.0.0/0 [110/2] via 10.3.2.2, 00:01:23, FastEthernet0/0

Totally stubby area

Un concept Cisco, ne se configure que sur l'ABR de l'aire : c'est une aire qui n'accepte ni les LSAs de type 5 ni les LSAs de type 3 (= ni les routes externes ni les routes aggrégées venant d'autres aires).

R1(config-router)#area 3 stub no-summary

NSSA

Not So Stubby Area, défini une stub area qui annonce une route externe, et accepte par défaut les routes OSPF, OSPF inter-area et NSSA externes de type 2 (O, O IA et O N2). Cela se configure sur tous les routeurs de l'aire :

R1(config-router)#area 3 nssa

On peut coupler les foncions d'un NSSA et une totally-stub area :

R1(config-router)#area 3 nssa no-summary

Pour connecter une aire à l'aire 0 via une autre aire, on créé un lien virtuel (tunnel) entre l'ABR de l'aire “distante” et l'ABR de l'aire contigüe à l'aire 0. Le vlink se déclare sur les 2 routeurs d'extrémité en pointant vers le routeur-id d'en face :

Dans l'exemple suivant

  • R1 (id=192.168.0.2) est l'ABR situé entre l'aire 33 (qui veut se connecter à l'aire 0) et l'aire 3 (connecté à l'aire 0)
  • R2 (id=192.168.0.1) est l'ABR situé entre l'aire 0 et l'aire 3.

L'aire 3 ne doit pas être une stub-area.

R1(router-config)#area 3 virtual-link 192.168.0.2
R1(router-config)#network 10.0.10.0 0.0.0.255 area 33
R2(router-config)#area 3 virtual-link 192.168.0.1

Vérifs avec sh ip ospf virtual-links.

Sub-second hello packet

Sur les liens de bonne qualité (donc souvent du LAN Ethernet) il peut être intéressant d'augmenter la réactivité de l'OSPF pour baisser les temps de convergence du réseau en cas de perte d'un routeur. On peut le faire en diminuant les timers d'envoi des paquets hello ainsi que le dead-time interval. Quand on descend en-dessous de la seconde, on appelle cela Fast Hello Packets ou subsecond hello packets. Cela doit être manipuler avec précaution sous peine d'avoir les adjacences OSPF de ses routeurs qui bagottent sans cesse.

Cela se configure facilement, en spécifiant sur l'interface de routage la commande :

interface Gi0/0
 ip ospf dead-interval minimal hello-multiplier 5

Ici on configure le dead-interval au minimum possible (càd 1 seconde) et on indique qu'on envoie 5 hellos dans cet intervalle de temps, ce qui fait un toutes les 200 ms. Comme un voisin est déclaré dead après la perte de 4 hellos packet, on descend bien en dessous de la seconde pour converger.

Lien cisco : OSPF Support for Fast Hellos

Vérification

show ip route

show ip route
  Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area 
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route
 
Gateway of last resort is 10.0.1.0 to network 0.0.0.0

Cette commande permet d'afficher la table de routage du routeur. Les annonces correspondent à :

Code Type Description
O OSPF routes OSPF de la même aire (intra-area)
O IA OSPF inter-area les routes OSPF inter-aire (inter-area)
N1 OSPF NSSA external type 1
N2 OSPF NSSA external type 2
E1 OSPF external type 1 route externe de type 1 (= route redistribuée) à métrique variable
E2 OSPF external type 2 route externe de type 2 (= route redistribuée) à métrique constante
* candidate default route candidate par défaut
show ip ospf interface
show ip ospf neighbor
show ip ospf 8 database adv-router 10.167.131.1
show ip ospf 8 database router 10.167.131.1
 
show ip protocols
show ip route ospf

debug

debug ip ospf adj
debug ip ospf events

(Pour désactiver le debugging : undebug all)

Liens

informatique/cisco/ospf.txt · Last modified: 2013/10/14 22:44 (external edit)