Le protocole de routage OSPF
(Open Shortest Path First)
Comme RIP, le protocole OSPF fait partie des protocoles de routage interne. Il permet le calcul des tables de routage des routeurs se trouvant dans un même domaine. C’est un protocole qui réagit dynamiquement au modifications du réseau mais contrairement à RIP, il nécessite une vue d’ensemble du réseau et de l’état des liens. Le but de ce TP est de se familiariser avec ce protocole en étudiant plus particulièrement le sous protocole Hello puis en étudiant l’interconnexion entre des réseaux utilisant des protocoles différents (RIP et OSPF).
1
CONFIGURATIONS
SIMPLES :
Nous
configurons tout d’abord la plate-forme suivante :
Les interface des machines Host A et Host B sont configurées avec la commande habituelle IfConfig.
Il est ensuite nécessaire d configurer les interfaces des routeurs CISCO (ex pour le routeur A)
On entre dans le système d’exploitation du routeur
CISCO
tip cisco
On passe en mode configuration
enable
On passe en mode configuration interface
configure terminale
interface Ethernet 0/1
On active l’interface puis on lui indique son
adresse IP et son netmask
no
shutdown
ip adress
1.0.0.2 255.255.255.0
On se place sur la deuxième interface puis on
l’active et on lui indique son adresse IP et son netmask
exit
interface
Ethernet 0/0
no
shutdown
ip adress 2.0.0.2 255.255.255.0
On passe en mode configuration terminale
exit
On tue les processus de routage déjà existant qu’on
a détectés avec la commande ps -edf
no router
OSPF 10
On lance un processus de routage OSPF avec un
process-Id de 7
router OSPF 7
On indique sur quelles interfaces il doit
fonctionner ainsi que l’aire à laquelle appartient l’interface (aire 0 = aire
principale)
network
1.0.0.2 0.0.0.0 area 0
network
2.0.0.2 0.0.0.0 area 0
En mode d’entrée, on active la configuration
réalisée.
exit
exit
write
Remarque : - Bien que les adresses soient de classes A, on a utilisé le netmask 255.255.255.0. Mais ceci ne posera aucun problème dans la suite.
- Le protocole OSPF n’a pas encore été lancé sur la machine B
Nous lançons un capt afin d’analyser les paquets circulant sur le réseau 1. Nous observons toutes les 10 secondes un paquet émis par le routeur A à destination de l’adresse multicast 224.0.0.5. Cette adresse multicast correspond à tous les routeurs utilisant le protocole OSPF du réseau.
Voici l’analyse de l’un de ces paquets :
0: 0100 5e00 0005 0003 e358
6b20 0800 45c0
16: 0040 0113 0000 0159 d68b
0100 0002 e000
Le
34ème octet (02) indique la version du protocole OSPF
Le
35ème octet (01) le type de paquet. Ici c’est un paquet de type
Hello
Les
octets 36 et 37 indiquent la longueur du paquet (Ox002c = 44)
L’id
du routeur apparaît dans les octets 38 à 41 (Ox82C8 0303 = 130.200.3.3)
Ensuite
apparaît l’identificateur de l’aire : 0000 0000 puis apparaît le checksum
Puis
les octets 50 à 53 indique le type d’authentification (ici c’est 0, il n’y en a
pas)
Ensuite
on peut voir le netmask : Oxffff ff00 = 225.225.225.0
Puis
l’intervalle d’émission ou l’on retrouve les dix secondes observées (= Oxa)
32: 0005 0201 002c
82c8 0303 0000 0000 75d1
48: 0000
0000 0000 0000 0000 ffff ff00 000a
64: 0201 0000 0028 0100 0002 0000 0000
On peut également remarquer que l’option vaut 02, la priorité 01 l’identificateur d’aire 0000 (c’est bien ce que l’on avait configuré) ainsi que l’intervalle de mort : 0028 = 40 secondes
Apparaît également le numéro du routeur désigné : Ox0100 0002 = 1.0.0.2 (ie : l’émetteur du paquet)
Nous lançons maintenant le protocole OSPF sur les deux interfaces du routeur B (on utilise le même numéro d’aire = 0)
Sur le routeur A, on observe la base de donnée liée au protocole OSPF à l’aide de la commande show ip ospf database network. Voici le résultat obtenu :
On observe ici l’id de notre routeur
A : 130.200.3.3. Il est égal à la plus grande adresse IP de l’ensemble de
ses interfaces. On aurait donc dû avoir max(1.0.0.2,2.0.0.2) mais une interface
est restée configurée avec l’adresse 130.200.3.3. C’est pourquoi ce routeur est
désigné par cet identifiant.
OSPF Router with ID
(130.200.3.3) (Process ID 7)
7
est le numéro de processus associé au protocole OSPF lors de son lancement
Net Link States (Area
0)
Routing Bit
Set on this LSA
LS age: 1320
Options: (No
TOS-capability, DC)
LS Type: Network Links Indique le type d’informations
fournies
Link State ID:
2.0.0.2 (address of Designated Router)
Advertising Router:
130.200.3.3 Id du routeur ayant
fourni les informations
LS Seq Number:
80000001
Checksum:
0xC9C3
Length: 32
Network Mask:
/24
Attached Router: 130.200.3.3
Attached Router: 3.0.0.3
Ici apparaît les id des routeurs
détectés donc 130.200.3.3 (routeur A) et 3.0.0.3 (=max(2.0.0.3,3.0.0.3) =
routeur B)
La commande show ip ospf database router 3.0.0.3 permet d’observer les paquets envoyés par B à A. (Rq : Il faut mettre l’id du routeur et non l’adresse de l’interface car la commande avec 2.0.0.3 ne donne aucun résultat). Voici le résultat obtenu :
OSPF Router with ID
(130.200.3.3) (Process ID 7)
Router Link
States (Area 0)
LS age: 1557
Options: (No
TOS-capability, DC)
LS Type: Router Links Indique que l’on observe l’état des
liaisons
Link State ID: 3.0.0.3 On observe l’état des liens du
routeur B
Advertising Router: 3.0.0.3 Id du routeur ayant fourni les
informations
LS Seq Number:
80000003
Checksum:
0x8C69
Length: 48
Number of Links: 2 Nombre de liens détectés par le
routeur émettant le paquet. C’est le nombre de réseaux auquel le routeur B est
connecté
1er
lien : le réseau 3.0.0.0 a été détecté comme aire terminale car aucun
Hello n’a été reçu sur l’interface connectée à ce réseau.
Link connected to: a Stub Network indique que c’est une aire
terminale
(Link ID) Network/subnet number: 3.0.0.0 adresse du réseau détecté
(Link Data) Network Mask: 255.255.255.0 netmask des machines sur ce réseau
Number
of TOS metrics: 0
TOS 0 Metrics: 10
2éme
lien : l’interface 2.0.0.3 du routeur B est connecté à une aire non
terminale (car des Hello ont été reçus sur cette interface)
Link connected to: a Transit Network indique une aire non terminale
(Link ID) Designated Router address:
2.0.0.2 indique l’id du routeur
désigné sur ce lien
(Link Data) Router Interface address:
2.0.0.3 indique l’interface
connectée à ce lien
Number
of TOS metrics: 0
TOS 0 Metrics: 10
Ces informations sont reçues par le routeur A. Symétriquement le routeur B a reçu des informations. Ainsi, les routeurs connaissent les liens de tous les routeurs présents sur l’aire et peuvent reconstituer la topologie du réseau. Avec cela, l’algorithme de Dijkstra leur permet de connaître les chemins les plus intéressants et ainsi de remplir les tables de routage.
La commande show ip route permet de connaître l’état des tables de routages du routeur. Voici les résultats obtenus sur A :
1.0.0.0/24 is
subnetted, 1 subnets
C 1.0.0.0
is directly connected, Ethernet0/0
2.0.0.0/24
is subnetted, 1 subnets
C 2.0.0.0
is directly connected, Ethernet0/1
Il
a été détecté par le protocole OSPF (O)
3.0.0.0/24 is
subnetted, 1 subnets
O 3.0.0.0
[110/20] via 2.0.0.3, 00:06:36, Ethernet0/1
De même sur le routeur B, les 3 réseaux ont été détectés. Cependant, les ping entre les machines A et B ne fonctionnent pas. Ceci est dû au fait qu’OSPF met à jour les tables de routage des routeurs mais pas celle des Host. C’est pourquoi, il faut manuellement rajouter :
- sur Host A : route add default 1.0.0.2
- sur Host B : route add default 3.0.0.3
Ceci permet aux hosts de remplir leur tables de routage en envoyant systématiquement leurs paquets au routeur A ou B.
Après cette manipulation, le ping entre les deux machines fonctionne.
2
PARAMETRES D’OSPF :
A. Routeur désigné :
La désignation d’un routeur permet de limiter le trafic des paquets sur les réseaux lors de l’inondation. Le routeur désigné est celui ayant le plus grand identifiant OSPF. Dans notre cas ce sera la machine A (qui possède une interface non utilisée d’IP 130.200.3.3). La commande show ip ospf neighbor donne la liste des voisins connus par le routeur. Voici le résultat obtenu sur A :
Neighbor ID Pri State Dead Time
Address Interface
3.0.0.3 2 FULL/BDR 00:00:33
2.0.0.3 Ethernet0/1
Le
routeur ospf d’id 3.0.0.3 est accessible directement sur l’interface 0/1.
L’adresse IP de son interface est 2.0.0.3 et il sera considéré comme
inaccessible si dans 33 sec il n’a pas reémis un paquet hello. Il a une
priorité de 2 (donc ce n’est pas le routeur désigné)
La commande ip ospf priority permet de modifier le routeur désigné. Ceci peut être utile pour des raisons politiques. On pourrait par exemple choisir un routeur qui est moins chargé.
B. Algorithme d’authentification :
Au début du TP, on a vu (dans l’analyse de trame) qu’aucune authentification n’est utilisée par les routeurs. Or ce système pourrait éviter des perturbations due à une machine défaillante ou même protéger d’utilisateurs extérieurs. Pour installer un système d’authentification, nous lançons sur chaque interface des routeurs la commande ip OSPF authentication-key toto (au niveau configuration interface) et area 0 authentication (au niveau routage). Voici alors les paquets Hello échangés :
0: 0100 5e00 0005 0003
e358 6b20 0800 45c0 ..^......Xk ..E.
16: 0040 05d8 0000 0159
d1c6 0100 0002 e000 .@.....Y........
32:
0005 0201 002c 82c8 0303 0000 0000 75d0
.....,........u.
48: 0001
746f 746f 0000 0000 ffff ff00 000a
..toto..........
64: 0201 0000 0028 0100 0002
0000 0000 .....(........
En gras apparaissent le champ du type d’authentification : 1 (ó authentification en clair) puis le mot de passe (Ox746f 746f = toto). Cependant, deux problèmes sont soulevés par ce type d’authentification. Le premier est que le mot de passe est en clair, ainsi avec un simple capt comme ci-dessus, on peut découvrir ce mot de passe. Le second inconvénient est que ce mot de passe doit être identique sur tous les routeurs. Ces problèmes sont réglés par l’utilisation du codage avec l’algorithme du MD-5 (type d’authentification = 2).
C. Fréquence d’émission et timer :
Voici l’état des tables de routages avant de débrancher le câble (commande show ip route) :
(ici celle du routeur A)
1.0.0.0/24 is subnetted, 1 subnets
C 1.0.0.0 is directly
connected, Ethernet0/0
2.0.0.0/24 is subnetted, 1
subnets
C 2.0.0.0 is directly
connected, Ethernet0/1
3.0.0.0/24 is subnetted, 1
subnets
O 3.0.0.0 [110/20] via
2.0.0.3, 00:00:56, Ethernet0/1
Les trois réseaux apparaissent dans la tables de routage du routeur A.
On débranche la liaison entre le routeur A et le HUB. Après débranchement, le routeur A perd rapidement (5sec) ses entrées 2 et 3. En effet, il a physiquement détecté que le câble de son interface 2.0.0.2 n’était plus branchée. Il a donc enlevé le réseau 2 de sa table de routage. Dans le même temps, il a vu que sa 3ème entrée nécessitait l’accès au routeur 2.0.0.3, appartenant à un réseau inaccessible. Donc cette entrée à également disparue. Voici l’état de sa table de routage après avoir débranché :
1.0.0.0/24 is subnetted, 1 subnets
C 1.0.0.0 is directly
connected, Ethernet0/0
Seul le réseau 1
est accessible.
Coté routeur B,
seule une entrée a disparue de la TR (le réseau 1). En effet, son câble étant
toujours relié au hub, il est toujours présent sur le réseau net2 (même si
c’est la seule machine sur ce réseau). L’entrée à mis environ 30 ou 40 secondes
pour disparaître. En effet, le timer de panne est de 40 secondes. Et le timer
de hello est de 10 secondes (voir précédemment).
Nous rebranchons
maintenant le câble. Le routeur 1 retrouve immédiatement le réseau 2 (il a
détecté qu’il est physiquement relié à ce réseau). Mais du coté routeur A comme
pour le routeur B, il faut entre 0 et 10 secondes pour retrouver la 3ème
entrée dans la table de routage. Ce temps correspond au timer d’émission des
Hello. Pour que les routeurs réagissent plus vite aux modifications d’un
réseau, il faut soit diminuer le timer de panne (éliminer plus vite une entrée
de la table) soit augmenter le timer d’émission des Hello. Il faut cependant
faire attention à ce que le timer de panne soit nettement supérieur au timer
d’émission des Hello. L’avantage de réagir plus vite est évident : les
détections de pannes seront plus rapide donc un meilleur dynamisme et donc
moins de risque d’envoyer des paquets à un réseau inaccessible. Cependant,
cette manipulation à un gros inconvénient car cela augmente le nombre de
paquets émis pour OSPF (nombre de paquets hello) et cela risque d’augmenter l’
encombrement du réseau. il faut donc choisir ces timers pour obtenir un
compromis acceptable entre encombrement du réseau et dynamisme.
3
CONFIGURATIONS
« COMPLEXES »
A.
Mélange d’algorithmes de
routage
Pour faire tourner RIP sur les machines B et C :
- sur les machines A et C, on lance le démon in.routed –q
- sur la machine B, on lance le démon in.routed –s et on tape la commande :
ndd –set /dev/ip ip_forwarding 1 car cette machine se trouve au milieu de deux réseaux et a donc le rôle de routeur.
On doit également configurer le routeur B de sorte que le protocole RIP tourne sur l’interface d’adresse 3.0.0.3 et le protocole OSPF tourne sur l’interface d’adresse 2.0.0.3. Pour cela, on configure le routeur comme suivant :
configure terminale
no router ospf 7 on tue le processus ospf en cours pour éviter des problèmes de configuration
interface ethernet
0/0
router ospf 7 on lance le routage
ospf
network 2.0.0.3 0.0.0.0 area 0 sur l’interface d’adresse 2.0.0.3
redistribute rip metric 1 mais on redistribue les routes apprises
exit par
rip
interface ethernet
0/1
router rip on lance le
routage rip
network 3.0.0.0 l’interface
d’adresse 3.0.0.0
redistribute ospf 7 metric 1 mais on redistribue les
routes apprises
exit par
ospf
exit
write
Grâce à la
commande show ip route, on voit que
chacun des deux routeurs connaît les quatre réseaux net1, net2, net3 et net4.
Les réseaux net1 et net4
apparaissent dans la table de routage de la machine C car la machine B est
configurée comme un routeur (cf. paragraphe du dessus) et donc fait circuler
les paquets de routage.