# OSPF

Open Shortest Path First est un protocole de routage dynamique a état de liens interne

# Introduction

OSPF est le protocole de routage à état de liens le plus répandu. Les topologies OSPF peuvent être séparées par zones pour optimiser la taille des tables de routage en résumant des zones par sous-réseaux.

En OSPF, le calcul de la priorité en fonction de la vitesse d’une interface est basé sur une vitesse de référence divisée par la vitesse établie du lien arrondie à l’entier le plus près à la hausse. Par défaut, cette vitesse de référence est de 100 Mbps donc à moins d’ajuster cette vitesse de référence, le coût sera toujours de 1 à moins que le lien soit établi à moins de 100 Mbps.

# Types de routeurs

Différents routeurs occupent différents rôles dans une topologie OSPF.

- Un “DR” ou “Designated Router” est le routeur responsable de redistribuer les information de la topologie OSPF. Il y en aura un par segment Ethernet/domaine de broadcast. Si seulement deux routeurs sont reliés en point à point, ce segment comprendra un DR et un BDR. Il est possible de configurer sa priorité pour forcer le routeur possédant ce rôle. C'est avec ce routeur que les autres communiqueront pour indiquer leur existence et pour récupérer la base de données de la topologie OSPF.
- Un “BDR” ou “Backup Designated Routeur” occupera le rôle de “DR” en cas d’échec du routeur désigné actif.
- Un “DROther” est un routeur participant à la topologie n’étant ni un “DR”, ni un “BDR”. Ceux-si apparaîtront seulement si plus de deux routeurs se situent dans le même domaine de broadcast.
- Un “BR” ou “Backbone Router” est un routeur possédant uniquement des interfaces dans la zone dorsale/par défaut (0.0.0.0)
- Un “IR” ou “Internal Router” est un routeur dont toutes les interfaces sont dans la même zone.
- Un “ABR” ou “Area Border Router” est un routeur possédant des interfaces dans plusieurs zones.
- Un “ASBR” ou “Autonomous System Border Router” est un routeur participant à plusieurs protocoles de routage dynamique inter-reliant plusieurs systèmes autonomes.

Chaque routeur participant à une zone OSPF a un identifiant unique sous forme d'une adresse IP. Par défaut, différents manufacturiers utiliseront différentes adresse, que ce soit la plus élevée ou la moins élevée configurée sur l'appareil mais il est aussi possible de forcer un identifiant sur un routeur pour faciliter son repérage dans la base de données OSPF. Puisqu'un routeur a plusieurs adresses IP, il est généralement préférable de configurer l'identifiant que de laisser au sort l'identification des routeurs.

Dans le plan suivant, le routeur principal est R1 et le routeur de second recours est R4. Ceci implique que si un changement de topologie a lieu, ce sera R1 qui en sera informé et qui avertira les autres routeurs. En cas de panne de R1, R4 prendra la relève pour ce rôle.

[![image.png](https://cours.alexarsenault.cf/uploads/images/gallery/2025-03/scaled-1680-/QEXimage.png)](https://cours.alexarsenault.cf/uploads/images/gallery/2025-03/QEXimage.png)

On peut observer dans la base de données des routeurs l'ensemble des voisins. Le routeur désigné voit les routeurs sans rôle comme DROTHER et voit son point de relève comme BDR. On observe aussi que les adresses de rebouclage ont été assignées comme identifiants aux routeurs.

```
R1-Cisco#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
172.16.0.2        1   FULL/DROTHER    00:00:33    172.16.255.2    Ethernet0/0
172.16.0.3        1   FULL/BDR        00:00:34    172.16.255.3    Ethernet0/0
172.16.0.4       64   FULL/DROTHER    00:00:32    172.16.255.4    Ethernet0/0
172.16.0.5        1   FULL/DROTHER    00:00:36    172.16.255.5    Ethernet0/0
172.16.0.6        1   FULL/DROTHER    00:00:30    172.16.255.6    Ethernet0/0
```

Même chose pour la MikroTik qui est BDR.

```
[admin@R4-Tik] > /routing/ospf/neighbor/print
Flags: V - virtual; D - dynamic 
 0  D instance=main area=backbone address=172.16.255.1 priority=65 router-id=172.16.0.1 dr=172.16.255.1 
      bdr=172.16.255.3 state="Full" state-changes=7 adjacency=5m28s timeout=36s 

 1  D instance=main area=backbone address=172.16.255.2 priority=1 router-id=172.16.0.2 dr=172.16.255.1 
      bdr=172.16.255.3 state="TwoWay" state-changes=2 timeout=39s 

 2  D instance=main area=backbone address=172.16.255.3 priority=1 router-id=172.16.0.3 dr=172.16.255.1 
      bdr=172.16.255.3 state="Full" state-changes=6 adjacency=5m30s timeout=33s 

 3  D instance=main area=backbone address=172.16.255.5 priority=1 router-id=172.16.0.5 dr=172.16.255.1 
      bdr=172.16.255.3 state="TwoWay" state-changes=2 timeout=34s 

 4  D instance=main area=backbone address=172.16.255.6 priority=1 router-id=172.16.0.6 dr=172.16.255.1 
      bdr=172.16.255.3 state="TwoWay" state-changes=2 timeout=38s
```

Du point de vue des autres routeurs, leur relation est "TwoWay" avec tous sauf le DR et BDR. Ils n'échangent donc pas d'information directement entre eux.

```
R2-Cisco#show ip ospf neigh

Neighbor ID     Pri   State           Dead Time   Address         Interface
172.16.0.1       65   FULL/DR         00:00:39    172.16.255.1    Ethernet0/0
172.16.0.3        1   2WAY/DROTHER    00:00:37    172.16.255.3    Ethernet0/0
172.16.0.4       64   FULL/BDR        00:00:35    172.16.255.4    Ethernet0/0
172.16.0.5        1   2WAY/DROTHER    00:00:39    172.16.255.5    Ethernet0/0
172.16.0.6        1   2WAY/DROTHER    00:00:33    172.16.255.6    Ethernet0/0
```

```
[admin@R5-Tik] > /routing/ospf/neighbor/print
Flags: V - virtual; D - dynamic 
 0  D instance=main area=backbone address=172.16.255.1 priority=65 router-id=172.16.0.1 dr=172.16.255.1 
      bdr=172.16.255.3 state="Full" state-changes=7 adjacency=8m24s timeout=31s 

 1  D instance=main area=backbone address=172.16.255.2 priority=1 router-id=172.16.0.2 dr=172.16.255.1 
      bdr=172.16.255.3 state="TwoWay" state-changes=2 timeout=34s 

 2  D instance=main area=backbone address=172.16.255.3 priority=1 router-id=172.16.0.3 dr=172.16.255.1 
      bdr=172.16.255.3 state="Full" state-changes=6 adjacency=8m25s timeout=39s 

 3  D instance=main area=backbone address=172.16.255.4 priority=64 router-id=172.16.0.4 dr=172.16.255.1 
      bdr=172.16.255.3 state="TwoWay" state-changes=2 timeout=35s 

 4  D instance=main area=backbone address=172.16.255.6 priority=1 router-id=172.16.0.6 dr=172.16.255.1 
      bdr=172.16.255.3 state="TwoWay" state-changes=2 timeout=33s
```

# Types de zones

Une topologie OSPF peut être divisée en plusieurs zones pour optimiser la convergence et la sécurité du réseau. Une zone peut comprendre un maximum de 50 routeurs.

- Une zone de type “dorsale” (backbone) ou par défaut est la zone au cœur du réseau. Cette zone a comme identifiant de zone “0” ou “0.0.0.0”
- Une zone de type “stub” est une zone qui ne débouche sur rien d’autre que le réseau contenu dans cette zone. Ce type de zone ne peut pas injecter de routes de types externes dans les zones voisines.

**Une zone de type “NSSA” (Not-So-Stubby-Area) est généralement située entre une zone “stub” et la zone par défaut. Ce type de zone peut injecter des routes de types externes dans la zone par défaut.**

# Types d'états de liens

Une base de données OSPF est composée de “LSA” (avertissements d’état de liens). On retrouve 7 types d’états de liens.

- Un LSA de type 1 représente l’existence et l’identité d’un routeur dans une zone.
- Un LSA de type 2 représente un réseau sur lequel du voisinage OSPF est établi (les réseaux entre les routeurs).
- Un LSA de type 3 représente une route résumée vers une zone de type “stub”.
- Un LSA de type 4 représente l’existence et l’identité d’un routeur “ASBR”
- Un LSA de type 5 représente une route provenant d’un autre protocole de routage, qu’il s’agisse d’une route directement connectée, une route statique ou d’un autre protocole comme RIP ou EIGRP.
- Un LSA de type 7 représente une route provenant d’un autre protocole de routage tout comme un LSA de type 5 mais provenant aussi d’une zone de type “NSSA”. Cet avertissement de lien sera transformé en LSA de type 5 lorsqu’il sera propagé dans la zone dorsale/par défaut.

Exemple de la base de données OSPF d'une topologie sous Cisco. On y voit ici l'état des routeurs, le réseau 172.16.255.0/24 reliant ensemble tous les routeurs ainsi que les routes de type exerne (directement connectées à chaque routeur, ex. leur LoopBack et leur LAN) :

```
R1-Cisco#show ip ospf database

            OSPF Router with ID (172.16.0.1) (Process ID 255)

		Router Link States (Area 0.0.0.0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
172.16.0.1      172.16.0.1      126         0x8000000C 0x00D352 1         
172.16.0.2      172.16.0.2      127         0x80000007 0x00DB4C 1         
172.16.0.3      172.16.0.3      127         0x8000000A 0x00D34E 1         
172.16.0.4      172.16.0.4      136         0x80000003 0x001F30 1         
172.16.0.5      172.16.0.5      125         0x80000004 0x001B30 1         
172.16.0.6      172.16.0.6      138         0x80000002 0x001D2D 1         

		Net Link States (Area 0.0.0.0)

Link ID         ADV Router      Age         Seq#       Checksum
172.16.255.1    172.16.0.1      128         0x80000004 0x001119

		Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
172.16.0.1      172.16.0.1      295         0x80000001 0x00BF65 0         
172.16.0.2      172.16.0.2      295         0x80000001 0x00AF73 0         
172.16.0.3      172.16.0.3      294         0x80000001 0x009F81 0         
172.16.0.4      172.16.0.4      142         0x80000001 0x0011BF 0         
172.16.0.5      172.16.0.5      135         0x80000001 0x0001CD 0         
172.16.0.6      172.16.0.6      142         0x80000001 0x00F0DB 0         
172.16.255.0    172.16.0.4      141         0x80000001 0x00399B 0         
172.16.255.0    172.16.0.5      130         0x80000001 0x0033A0 0         
172.16.255.0    172.16.0.6      142         0x80000001 0x002DA5 0         
192.168.1.0     172.16.0.1      295         0x80000001 0x0092E5 0         
192.168.2.0     172.16.0.2      295         0x80000001 0x0081F4 0         
192.168.4.0     172.16.0.4      141         0x80000001 0x00E043 0         
192.168.5.0     172.16.0.5      130         0x80000001 0x00CF52 0         
192.168.6.0     172.16.0.6      142         0x80000001 0x00BE61 0
```

Même chose par le point de vue d'un routeur MikroTik participant à cette même topologie

```
[admin@R4-Tik] > /routing/ospf/lsa/print
Flags: S - self-originated, F - flushing, W - wraparound; D - dynamic 
 0  D instance=main type="external" originator=172.16.0.1 id=172.16.0.1 sequence=0x80000001 age=731 checksum=0xBF65 
      body=
        options=DC
        netmask=255.255.255.255
        forwarding-address=0.0.0.0
        metric=20 type-2
        route-tag=0

 1  D instance=main type="external" originator=172.16.0.2 id=172.16.0.2 sequence=0x80000001 age=731 checksum=0xAF73 
      body=
        options=DC
        netmask=255.255.255.255
        forwarding-address=0.0.0.0
        metric=20 type-2
        route-tag=0

 2  D instance=main type="external" originator=172.16.0.3 id=172.16.0.3 sequence=0x80000001 age=730 checksum=0x9F81 
      body=
        options=DC
        netmask=255.255.255.255
        forwarding-address=0.0.0.0
        metric=20 type-2
        route-tag=0

 3 SD instance=main type="external" originator=172.16.0.4 id=172.16.0.4 sequence=0x80000001 age=577 checksum=0x11BF 
      body=
        options=E
        netmask=255.255.255.255
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

 4  D instance=main type="external" originator=172.16.0.5 id=172.16.0.5 sequence=0x80000001 age=572 checksum=0x1CD 
      body=
        options=E
        netmask=255.255.255.255
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

 5  D instance=main type="external" originator=172.16.0.6 id=172.16.0.6 sequence=0x80000001 age=578 checksum=0xF0DB 
      body=
        options=E
        netmask=255.255.255.255
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

 6 SD instance=main type="external" originator=172.16.0.4 id=172.16.255.0 sequence=0x80000001 age=570 checksum=0x399B 
      body=
        options=E
        netmask=255.255.255.0
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

 7  D instance=main type="external" originator=172.16.0.5 id=172.16.255.0 sequence=0x80000001 age=567 checksum=0x33A0 
      body=
        options=E
        netmask=255.255.255.0
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

 8  D instance=main type="external" originator=172.16.0.6 id=172.16.255.0 sequence=0x80000001 age=578 checksum=0x2DA5 
      body=
        options=E
        netmask=255.255.255.0
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

 9  D instance=main type="external" originator=172.16.0.1 id=192.168.1.0 sequence=0x80000001 age=731 checksum=0x92E5 
      body=
        options=DC
        netmask=255.255.255.0
        forwarding-address=0.0.0.0
        metric=20 type-2
        route-tag=0

10  D instance=main type="external" originator=172.16.0.2 id=192.168.2.0 sequence=0x80000001 age=731 checksum=0x81F4 
      body=
        options=DC
        netmask=255.255.255.0
        forwarding-address=0.0.0.0
        metric=20 type-2
        route-tag=0

11 SD instance=main type="external" originator=172.16.0.4 id=192.168.4.0 sequence=0x80000001 age=570 checksum=0xE043 
      body=
        options=E
        netmask=255.255.255.0
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

12  D instance=main type="external" originator=172.16.0.5 id=192.168.5.0 sequence=0x80000001 age=567 checksum=0xCF52 
      body=
        options=E
        netmask=255.255.255.0
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

13  D instance=main type="external" originator=172.16.0.6 id=192.168.6.0 sequence=0x80000001 age=578 checksum=0xBE61 
      body=
        options=E
        netmask=255.255.255.0
        forwarding-address=0.0.0.0
        metric=1 type-1
        route-tag=0

14  D instance=main area=backbone type="router" originator=172.16.0.1 id=172.16.0.1 sequence=0x8000000C age=562 
      checksum=0xD352 body=
        options=E|DC bits=E
            type=network id=172.16.255.1 data=172.16.255.1 metric=10

15  D instance=main area=backbone type="router" originator=172.16.0.2 id=172.16.0.2 sequence=0x80000007 age=563 
      checksum=0xDB4C body=
        options=E|DC bits=E
            type=network id=172.16.255.1 data=172.16.255.2 metric=10

16  D instance=main area=backbone type="router" originator=172.16.0.3 id=172.16.0.3 sequence=0x8000000A age=562 
      checksum=0xD34E body=
        options=E|DC bits=E
            type=network id=172.16.255.1 data=172.16.255.3 metric=10

17 SD instance=main area=backbone type="router" originator=172.16.0.4 id=172.16.0.4 sequence=0x80000003 age=565 
      checksum=0x1F30 body=
        options=E bits=E
            type=network id=172.16.255.1 data=172.16.255.4 metric=1

18  D instance=main area=backbone type="router" originator=172.16.0.5 id=172.16.0.5 sequence=0x80000004 age=562 
      checksum=0x1B30 body=
        options=E bits=E
            type=network id=172.16.255.1 data=172.16.255.5 metric=1

19  D instance=main area=backbone type="router" originator=172.16.0.6 id=172.16.0.6 sequence=0x80000002 age=574 
      checksum=0x1D2D body=
        options=E bits=E
            type=network id=172.16.255.1 data=172.16.255.6 metric=1

20  D instance=main area=backbone type="network" originator=172.16.0.1 id=172.16.255.1 sequence=0x80000004 age=565 
      checksum=0x1119 body=
        netmask=255.255.255.0
            router-id=172.16.0.1
            router-id=172.16.0.2
            router-id=172.16.0.3
            router-id=172.16.0.4
            router-id=172.16.0.5
            router-id=172.16.0.6
```

# Fonctionnement

#### Activation d'OSPF

Il est possible pour un routeur d'exécuter plusieurs instances OSPF séparées advenant qu'il appartienne à plus d'un système autonome. Nous garderons ici la configuration simple avec une seule instance par appareil. En MikroTik, on parle de créer une "instance" identifiée par un nom textuel alors qu'en Cisco on parler de créer un "routeur" avec un identifiant numérique. Ces identifiants demeurent interne à chaque routeur, cette information ne sera pas échangée entre les routeurs. À chaque instance sera lié un identifiant pour ce routeur qui sera une information partagée en avertissement d'état de lien de type 1. Cet identifiant est une valeur binaire de 32 bits et est notée sous la même forme qu'une adresse IPv4 pour en faciliter la lecture.

Dans l'exemple suivant, l'instance du **MikroTik** sera nommée "**main**" et le MikroTik aura comme **identifiant 0.0.0.1**. L'instance du **Cisco** aura comme identifiant "**100**" et le routeur aura comme **identifiant 0.0.0.2**.

MikroTik :

```
/routing ospf instance
add disabled=no name=main router-id=0.0.0.1 routing-table=main
```

Cisco :

```
router ospf 100
 router-id 0.0.0.2
```

Il sera aussi nécessaire de créer une zone au sein de laquelle tous les routeurs connaîtront la topologie entière entre les routeurs de cette zone. Ces zones peuvent contenir jusqu'à 50 routeurs. Ces zones sont identifiées tout comme les routeurs par une valeur binaire de 32 bits et tout comme les identifiants de routeur, elle sera représentée sous la même forme qu'une adresse IPv4.

La zone **0.0.0.0** est la zone décrite comme étant la zone "**dorsale**" et devrait représenter le **coeur de votre réseau**. Cette zone est généralement mandatoire. En MikroTik, il est possible de créer une zone sans l'attribuer à un réseau IP ou une interface tandis que Cisco regroupe sur la même ligne le réseau dans lequel il recherche des voisins ainsi que l'identifiant de la zone.

<p class="callout warning">En MikroTik, si l'identifiant de la zone est 0.0.0.0, celui-ci ne s'affichera pas lors d'une exportation de la configuration mais s'affichera lors de l'affichage de l'état OSPF. Ceci sera réflété dans l'exemple suivant.</p>

<p class="callout warning">Il est aussi important de noter que Cisco s'attend à des "wildcard bits" (masque de sous-réseau inversé) plutôt qu'un masque de sous-réseau avec une notation traditionnelle. Il est possible d'inscrire un masque de sous-réseau traditionnel mais celui-ci sera traduit dans la configuration.</p>

Utiilisons ici le réseau **172.16.31.252/30** pour établir le lien entre nos routeurs.

MikroTik :

```
/routing ospf area
add disabled=no instance=main name=backbone
```

```
[admin@R1-Tik] > /routing/ospf/area/print
Flags: X - disabled, I - inactive, D - dynamic; T - transit-capable 
 0    name="backbone" instance=main area-id=0.0.0.0 type=default 
```

Cisco :

```
router ospf 100
 network 172.16.31.252 0.0.0.3 area 0.0.0.0
```

<p class="callout info">[Projet GNS3](https://cours.alexarsenault.cf/attachments/23) lié à [cette machine virtuelle](https://mega.nz/file/aYozASYQ#yPje05WUCNFptzGKX73GhbiloBtrRi1xQ7SGDGZ_Ec0)</p>

#### Établissement du voisinage

À fin d'assurer le fonctionnement d'une zone OSPF, les routeurs devront tout d'abord établir une connexion avec leurs voisins immédiats pour leur permettre de rejoindre le voisinage des routeurs situés dans la zone correspondante.

La première configuration qui sera requise pour assurer le bon fonctionnement d'OSPF entre deux routeurs sera de mentionner aux routeurs à quel endroit chercher des voisins. En Cisco, les sous-réseaux sur lesquels chercher des voisins seront déterminés par la commande "network" et l'instance exécutant OSPF détectera automatiquement sur quelles interfaces chercher à établir un voisinage en fonction des adresses IP configurées sur ces interfaces. MikroTik permet de mentionner tant un réseau IP qu'une interface, dans le cas ou seulement une interface serait mentionnée, le réseau IP correspondant à l'interface sera utilisé pour rechercher un voisin.

Ces liens de voisinage établis sont des avertissements d'**état de lien de type 2** et correspond à **un réseau sur lequel un voisinage entre plusieurs routeurs est établi**.

[![image.png](https://cours.alexarsenault.cf/uploads/images/gallery/2025-06/scaled-1680-/image.png)](https://cours.alexarsenault.cf/uploads/images/gallery/2025-06/image.png)

Établissons ici le voisinage entre notre MikroTik et notre Cisco. Lorsque nous avons configuré la zone de notre Cisco, nous avons déjà dû attribuer un réseau IP à notre zone 0.0.0.0 (*nous avons choisi 172.16.31.252/30*). Configurons les adresses IP des interfaces reliées ensemble et assignons la zone dorsale à ce lien sur notre MikroTik.

MikroTik :

```
/ip address
add address=172.16.31.253/30 interface=ether8 network=172.16.31.252

/routing ospf interface-template
add area=backbone disabled=no networks=172.16.31.252/30
```

Cisco (*le sous-réseau IP est déjà associé à la zone*) :

```
interface Ethernet1/3
 ip address 172.16.31.254 255.255.255.252
 no shutdown
```

À partir de ce moment, chaque routeur fera parvenir à destination de l'adresse IP 224.0.0.5 (*adresse IP de classe D dédiée aux protocoles de "broadcast*") un "Hello Packet" à un intervalle régulier (*par défaut aux 10 secondes*) indiquant l'existance du routeur avec l'adresse IP de son interface. Si ce "Hello Packet" d'un voisin n'est pas reçu dans le délai imparti par le paramètre de "Dead Peer Detection" ou "DPD", le voisinage entre ces deux routeurs sera coupé.

Annonce du MikroTik :

```
Frame 1: 82 bytes on wire (656 bits), 82 bytes captured (656 bits) on interface -, id 0
Ethernet II, Src: 0c:85:f2:ca:00:07, Dst: 01:00:5e:00:00:05
Internet Protocol Version 4, Src: 172.16.31.253, Dst: 224.0.0.5
Open Shortest Path First
    OSPF Header
        Message Type: Hello Packet (1)
        Source OSPF Router: 0.0.0.1
        Area ID: 0.0.0.0 (Backbone)
        Auth Type: Null (0)
        Auth Data (none): 0000000000000000
    OSPF Hello Packet
        Network Mask: 255.255.255.252
        Hello Interval [sec]: 10
        Options: 0x02, (E) External Routing
        Router Priority: 128
        Router Dead Interval [sec]: 40
        Designated Router: 172.16.31.253
        Backup Designated Router: 172.16.31.254
        Active Neighbor: 0.0.0.2
```

Annonce du Cisco :

```
Frame 4: 114 bytes on wire (912 bits), 114 bytes captured (912 bits) on interface -, id 0
Ethernet II, Src: aa:bb:cc:00:01:31, Dst: 01:00:5e:00:00:05
Internet Protocol Version 4, Src: 172.16.31.254, Dst: 224.0.0.5
Open Shortest Path First
    OSPF Header
        Version: 2
        Message Type: Hello Packet (1)
        Packet Length: 48
        Source OSPF Router: 0.0.0.2
        Area ID: 0.0.0.0 (Backbone)
        Auth Type: Null (0)
        Auth Data (none): 0000000000000000
    OSPF Hello Packet
        Network Mask: 255.255.255.252
        Hello Interval [sec]: 10
        Options: 0x12, (L) LLS Data block, (E) External Routing
        Router Priority: 1
        Router Dead Interval [sec]: 40
        Designated Router: 172.16.31.253
        Backup Designated Router: 172.16.31.254
        Active Neighbor: 0.0.0.1
```

On note donc lici l'identifiant de la zone, les identifiants du routeur émettant l'annonce et le voisin auquel l'annonce est destinée ainsi que le délai suite auquel chaque routeur considèrera son voisin comme étant absent (*40 secondes*).

On peut aussi noter ici dans l'en-tête OSPF les paramètres "Auth Type" et "Auth Data", il est possible de configurer un mécanisme d'authentification entre les routeurs pour éviter qu'un intrus se joigne à notre topologie. Ceci sera abordé plus tard.

Sans trop se pencher sur le contenu exact de l'échange qui prendra place entre les deux routeurs, suite à leur échange de poignée de main, la description des bases de données des deux routeurs sera échangée puis le nouveau voisin demandera la liste des états de liens de la base de donnée du routeur désigné (*maître de la base de données de la topologie*) et indiquera lorsqu'il aura appliqué cette liste de règles.

[![image.png](https://cours.alexarsenault.cf/uploads/images/gallery/2025-06/scaled-1680-/99rimage.png)](https://cours.alexarsenault.cf/uploads/images/gallery/2025-06/99rimage.png)

Le voisinage entre les deux routeurs passera donc à travers quelques états. Il est pertinent de comprendre ces états pour dépanner la configuration en cas d'erreur d'établissement de voisinage.

1. **Down**  
    En cas d'état "Down", ceci signifie que le voisin est absent, cet état changera lorsqu'un "Hello Packet" sera reçu de la part de ce voisin. Cet état s'affichera seulement lorsqu'un voisin statique sera configuré.
2. **Init** En cas d'état "Init", un "Hello Packet" a permis la détection du voisin et le routeur attend d'entrer en relation avec son voisin. Cet état devrait être passé rapidement mais peut y rester en cas d'erreur d'authentification à titre d'exemple.
3. **Two-Way**  
    En cas d'état "Two-Way", ceci signifie que le routeur a reçu confirmation de son voisin qu'il a été observé et que les routeurs sont en relation.

Les autres états seront abordés plus loin dans ce document. Ces 3 états sont ceux qui s'afficheront lors de l'établissement d'un voisinage.

<p class="callout info">[Projet GNS3](https://cours.alexarsenault.cf/attachments/24) lié à [cette machine virtuelle](https://mega.nz/file/aUAgmZYQ#LvqLGwf-ngAGKTYyt4ZHCZyDSwYWKuHAxE0TjQVLRQk)</p>

#### Élection des routeurs désignés

Deux routeurs dans chaque voisinage seront élus en tant que routeur désigné ainsi que routeur désigné de relève. Le premier routeur se joignant à une topologie se considèrera lui-même comme étant le routeur désigné et indiquera sa priorité dans ses "Hello Packets".

Ici, notre Cisco est le seul appareil allumé et s'annonce comme étant routeur désigné avec une priorité de 1.

```
OSPF Hello Packet
    Network Mask: 255.255.255.252
    Hello Interval [sec]: 10
    Options: 0x12, (L) LLS Data block, (E) External Routing
    Router Priority: 1
    Router Dead Interval [sec]: 40
    Designated Router: 172.16.31.254
    Backup Designated Router: 0.0.0.0
```

Le MikroTik tentera ensuite de se joindre à la topologie. Puisqu'il s'agit de son premier "Hello Packet", il n'a pas encore déterminé s'il doit se proclâmer DR (routeur désigné) ou BDR (routeur désigné de relève) et par conséquent n'en indiquera pas dans son "Hello Packet". Il indiquera par contre sa priorité ici de 128.

```
OSPF Hello Packet
    Network Mask: 255.255.255.252
    Hello Interval [sec]: 10
    Options: 0x02, (E) External Routing
    Router Priority: 128
    Router Dead Interval [sec]: 40
    Designated Router: 0.0.0.0
    Backup Designated Router: 0.0.0.0
```

La plus haute priorité l'emporte. En cas de priorité égale, ce sera l'identifiant de routeur le plus élevé qui l'emportera. Un DR et un BDR seront établis par domaine de broadcast. Si seulement deux routeurs sont reliés en point à point, il n'y aura seulement qu'un DR et un BDR mais si plus de deux routeurs sont reliés ensemble dans un seul domaine de diffusion, les routeurs n'étant pas DR ou BDR seront notés comme étant "DROther".

Imaginons le cas suivant où plusieurs routeurs sont reliés par un lien "MPLS" (*Multiprotocol Label Switching*) géré par notre fournisseur d'accès à Internet reliant plusieurs de nos bâtiments ensemble à la tête de chacun réside un routeur. Puisqu'ici, plus de deux routeurs se situent dans le même domaine de broadcast, il sera nécessaire d'utiliser un réseau IP plus large qu'un /30 et ici, nous retrouverons un DR, un BDR et un DROther.

[![image.png](https://cours.alexarsenault.cf/uploads/images/gallery/2025-06/scaled-1680-/I1rimage.png)](https://cours.alexarsenault.cf/uploads/images/gallery/2025-06/I1rimage.png)

Dans cet exemple, utilisons 192.168.255.248/29 permettant d'interconnecter jusqu'à 6 routeurs. Limitons-nous à 3 pour cet exemple. Les trois routeurs seront reliés dans la zone 0.0.0.0, le R1 aura comme identifiant 0.0.0.1, le routeur 2 0.0.0.2 et le commutateur de couche 3 0.0.0.3.

Le commutateur de couche 3 aura comme priorité 10 et les deux autres auront comme priorité 1. Le résultat prévu serait qu'à priorité égale, le routeur 2 l'emporte sur le routeur 1 car son identifiant de routeur est plus élevé.

R1 :

```
/ip address
add address=192.168.255.249/29 interface=ether8 network=192.168.255.248

/routing ospf instance
add disabled=no name=main router-id=0.0.0.1 routing-table=main
/routing ospf area
add disabled=no instance=main name=backbone
/routing ospf interface-template
add area=backbone disabled=no networks=192.168.255.248/29 priority=1
```

R2 :

```
ip cef

interface Ethernet1/3
 ip address 192.168.255.250 255.255.255.248
 no shutdown

router ospf 100
 router-id 0.0.0.2
 network 192.168.255.248 0.0.0.7 area 0.0.0.0
```

SW-L3 :

```
ip routing
ip cef

interface Ethernet3/3
 no switchport
 ip address 192.168.255.251 255.255.255.248

router ospf 100
 router-id 0.0.0.3
 priority 10
 network 192.168.255.248 0.0.0.7 area 0.0.0.0
```

Avec une telle configuration, le commutateur L3 est DR et le routeur Cisco est BDR du point de vue du MikroTik.

```
[admin@R1-MikroTik] > routing ospf neighbor print
Flags: V - virtual; D - dynamic 
 0  D instance=main area=backbone address=192.168.255.250 priority=1 
      router-id=0.0.0.2 dr=192.168.255.251 bdr=192.168.255.250 state="Full" 
      state-changes=6 adjacency=8s timeout=31s 

 1  D instance=main area=backbone address=192.168.255.251 priority=1 
      router-id=0.0.0.3 dr=192.168.255.251 bdr=192.168.255.250 state="Full" 
      state-changes=6 adjacency=5s timeout=33s
```

Si on regarde plutôt les voisins depuis le DR (le commutateur L3), on observera que le routeur Cisco est BDR et le MikroTik est DROther.

```
SW-L3-Cisco#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
0.0.0.1           1   FULL/DROTHER    00:00:35    192.168.255.249 Ethernet3/3
0.0.0.2           1   FULL/BDR        00:00:34    192.168.255.250 Ethernet3/3
```

<p class="callout info">[Projet GNS3](https://cours.alexarsenault.cf/attachments/25) lié à [cette machine virtuelle](https://mega.nz/file/aUAgmZYQ#LvqLGwf-ngAGKTYyt4ZHCZyDSwYWKuHAxE0TjQVLRQk)</p>

#### Annonces d'état de liens

Les bases de données OSPF des routeurs sont composées de "LSA" (Link State Advertisement). Les différents types sont abordés dans un [chapitre précédent](https://cours.alexarsenault.cf/books/ospf/page/types-detats-de-liens) mais les principaux sont les LSA de type 1 (routeurs participants à une zone), type 2 (réseaux IP à travers lesquels les routeurs communiquent ensemble) et type 5 (routes de type externe, ex. routes statiques ou directement connectées).

Sans redistribution de configurée, seulement les objets internes à OSPF seront échangés donc principalement l'identité des routeurs ainsi que les réseaux sur lesquels OSPF est en exécution pour la recherche de voisins. Il est possible de déclarer un tel réseau comme passif sur lequel OSPF sera exécuté mais aucune route ne sera échangée. Ceci n'est pas la façon idéale de procéder.

Par défaut, on remarquera donc ici que seulement les 3 routeurs ainsi que le réseau les reliant les trois seront dans la base de donnée de ces routeurs.

```
[admin@R1-MikroTik] > routing ospf lsa print
Flags: S - self-originated, F - flushing, W - wraparound; D - dynamic 
 0 SD instance=main area=backbone type="router" originator=0.0.0.1 id=0.0.0.1 sequence=0x80000006 age=162 
      checksum=0xF191 body=
        options=E
            type=network id=192.168.255.251 data=192.168.255.249 metric=1

 1  D instance=main area=backbone type="router" originator=0.0.0.2 id=0.0.0.2 sequence=0x8000000A age=164 
      checksum=0xA8AA body=
        options=E|DC
            type=network id=192.168.255.251 data=192.168.255.250 metric=10

 2  D instance=main area=backbone type="router" originator=0.0.0.3 id=0.0.0.3 sequence=0x8000000B age=164 
      checksum=0xA4AA body=
        options=E|DC
            type=network id=192.168.255.251 data=192.168.255.251 metric=10

 3  D instance=main area=backbone type="network" originator=0.0.0.3 id=192.168.255.251 sequence=0x80000004 age=174 
      checksum=0x2C9F body=
        netmask=255.255.255.248
            router-id=0.0.0.3
            router-id=0.0.0.1
            router-id=0.0.0.2
```

Ajoutons derrière chaque routeur un réseau /24 et nous observerons ensuite ce qu'OSPF en fera.

R1 :

```
# Routeur
/ip/address/add address=192.168.1.1/24 interface=ether7

# VPC
ip 192.168.1.2 255.255.255.0 192.168.1.1
save
```

R2 :

```
# Routeur
interface Ethernet1/2
 ip address 192.168.2.1 255.255.255.0
 no shutdown

# VPC
ip 192.168.2.2 255.255.255.0 192.168.2.1
save
```

SW-L3 :

```
! Switch L3
interface Vlan1
 ip address 192.168.3.1 255.255.255.0
 no shutdown

! VPC
ip 192.168.3.2 255.255.255.0 192.168.3.1
save
```

À ce point, chaque VPC devrait pouvoir rejoindre sa passerelle respective mais vous remarquerez qu'ils ne peuvent communiquer ensemble. On peut observer en regardant la table de routage que les routeurs ne se sont pas mutuellement informés de leurs nouveaux réseaux.

(*Depuis R2*) :

```
R2-Cisco#show ip route
Codes: L - local, C - connected, S - static, 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

Gateway of last resort is not set

      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, Ethernet1/2
L        192.168.2.1/32 is directly connected, Ethernet1/2
      192.168.255.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.255.248/29 is directly connected, Ethernet1/3
L        192.168.255.250/32 is directly connected, Ethernet1/3
```

Comme mentionné précédemment, les routeurs ne s'échangent que les informations concernant OSPF. On peut remarquer ici par contre que les nouveaux réseaux /24 sont des routes de type "connected". On peut informer OSPF d'annoncer ces routes à leurs voisins. Ces états de liens seront de type externe, ce sont des routes injectées dans OSPF provenant d'un autre protocole de routage (*connected dans ce cas-ci*)

R1 :

```
/routing/ospf/instance/set 0 redistribute=connected
```

R2 :

```
router ospf 100
 redistribute connected subnets
```

R3 :

```
router ospf 100
 redistribute connected subnets
```

Suite à l'ajout de ces configurations, chaque routeur fera parvenir au DR (*le commutateur de couche 3*) les nouveaux objets redistribués dans la topologie OSPF. Le message suivant est le MikroTik informant le DR de l'existence de son /24.

```
LSA-type 5 (AS-External-LSA (ASBR)), len 36
    .000 0000 0000 0001 = LS Age (seconds): 1
    0... .... .... .... = Do Not Age Flag: 0
    Options: 0x02, (E) External Routing
    LS Type: AS-External-LSA (ASBR) (5)
    Link State ID: 192.168.1.0
    Advertising Router: 0.0.0.1
    Sequence Number: 0x80000001
    Checksum: 0xa640
    Length: 36
    Netmask: 255.255.255.0
    0... .... = External Type: Type 1 (metric is specified in the same units as interface cost)
    .000 0000 = TOS: 0
    Metric: 1
    Forwarding Address: 0.0.0.0
    External Route Tag: 0
```

Ce message sera retransmis par le DR au BDR et aux DROthers. Le même processus sera répété pour chaque nouveau lien annoncé dans la zone OSPF.

Si l'on réaffiche maintenant la tabled e routage de R2, les /24 de R1 et R3 devraient s'y trouver.

```
R2-Cisco#show ip route
Codes: L - local, C - connected, S - static, 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

Gateway of last resort is not set

O E1  192.168.1.0/24 [110/11] via 192.168.255.249, 00:05:44, Ethernet1/3
      192.168.2.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.2.0/24 is directly connected, Ethernet1/2
L        192.168.2.1/32 is directly connected, Ethernet1/2
O E2  192.168.3.0/24 [110/20] via 192.168.255.251, 00:00:21, Ethernet1/3
      192.168.255.0/24 is variably subnetted, 2 subnets, 2 masks
C        192.168.255.248/29 is directly connected, Ethernet1/3
L        192.168.255.250/32 is directly connected, Ethernet1/3
```

En affichant aussi sa base de données OSPF, on y observera maintenant les annonces d'état de liens de type 5 correspondant aux /24 injectés dans OSPF.

```
R2-Cisco#show ip ospf database

            OSPF Router with ID (0.0.0.2) (Process ID 100)

		Router Link States (Area 0.0.0.0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
0.0.0.1         0.0.0.1         482         0x80000007 0x00F58A 1         
0.0.0.2         0.0.0.2         422         0x8000000B 0x00ACA3 1         
0.0.0.3         0.0.0.3         159         0x8000000C 0x00A8A3 1         

		Net Link States (Area 0.0.0.0)

Link ID         ADV Router      Age         Seq#       Checksum
192.168.255.251 0.0.0.3         1435        0x80000004 0x002C9F

		Type-5 AS External Link States

Link ID         ADV Router      Age         Seq#       Checksum Tag
192.168.1.0     0.0.0.1         482         0x80000001 0x00A640 0         
192.168.2.0     0.0.0.2         421         0x80000001 0x00141F 0         
192.168.3.0     0.0.0.3         158         0x80000001 0x00032E 0         
192.168.255.248 0.0.0.1         482         0x80000001 0x00CD28 0
```

Tous les VPCs sont maintenant en mesure de se contacter.

<p class="callout warning">Il est à noter que l'injection d'une route par défaut est une opération critique, un paramètre parfois nommé "default-information originate" ou "originate-default" existe pour empêcher un routeur d'injecter une route par défaut provenant d'un autre protocole, qu'il s'agisse d'une route statique ou DHCP ou tout autre protocole de routage. Le paramètre peut aussi être utiliseé pour forcer l'injection d'une route par défaut à partir de (par exemple) votre pare-feu principal ou le coeur de votre réseau.</p>

<p class="callout info">[Projet GNS3](https://cours.alexarsenault.cf/attachments/26) lié à [cette machine virtuelle](https://mega.nz/file/aUAgmZYQ#LvqLGwf-ngAGKTYyt4ZHCZyDSwYWKuHAxE0TjQVLRQk)</p>

##### Injection d'une route par défaut

À venir

#### Changement de topologie

À venir

#### Authentification

À venir