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


