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