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 :

 

 

Les réseaux 1 et 2 sont directement connectés (C) sur les interfaces 0/0 et 0/1

     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

Le réseau 3 est accessible par l’intermédiaire de du routeur d’ip 2.0.0.3

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.