Skip to main content

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.

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.

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.

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

Projet GNS3 lié à cette machine virtuelle

É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

É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

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.

Projet GNS3 lié à cette machine virtuelle

É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

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

Projet GNS3 lié à cette machine virtuelle

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

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.

Projet GNS3 lié à cette machine virtuelle

Injection d'une route par défaut

À venir

Changement de topologie

À venir

Authentification

À venir