Evaluation de l`implémentation du protocole OSPF

Transcription

Evaluation de l`implémentation du protocole OSPF
Evaluation de l’implémentation du
protocole OSPF de Quagga
–
Marion BAURES
Nicolas WULLENS
IENAC 07 S/TR
Ecole Nationale de l’Aviation Civile
–
Maı̂tre de projet : Fabien Garcia
Département Communication Navigation Surveillance
Subdivision Recherche
ENAC
2009/2010
Contents
1 Introduction
4
2 Gestion de projet
5
1
Plan de projet au lancement . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2
Après les premiers essais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3
A la fin du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
3 Quagga
1
9
Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4 Les protocoles de routage dynamique
9
10
1
RIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2
OSPF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
3
Différences majeures RIP-OSPF . . . . . . . . . . . . . . . . . . . . . . . . . .
17
5 Exemples de structures d’autonomous systems
18
1
AS 2200 : RENATER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2
AS20965 : GEANT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3
AS 1239: SPRINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
4
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
6 Evaluation d’OSPFv3
25
1
Plan d’adressage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
2
Analyse des paquets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3
Changement de topologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
4
Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
2
7 Evaluation d’OSPFv2
37
1
Plan d’adressage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
2
Mise en oeuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
8 Conclusion
42
9 Annexes
43
1
Utilisation d’un pont réseau avec Marionnet . . . . . . . . . . . . . . . . . . . .
43
2
Configuration des routers Quagga . . . . . . . . . . . . . . . . . . . . . . . . . .
46
3
Plan d’adressage de Geant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
48
4
Trace des paquets capturés lors du démarage d’un réseau . . . . . . . . . . . .
50
5
Table de routage d’Italie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
6
Tables de routage d’Allemagne . . . . . . . . . . . . . . . . . . . . . . . . . . .
60
Introduction
Bien qu’il soit de nos jours beaucoup utilisé, le protocole OSPF reste difficile à mettre en
place. Il est cependant supporté par des logiciels de routage tels que Quagga (pour les routeurs
linux), dans ses deux versions: OSPFv2 (ipv4) et OSPFv3 (ipv6). Au cours de ce projet nous
allons étudier les fonctionnalités OSPF(v2 et 3) offertes actuellement par Quagga.
Dans un premier temps, nous effectuerons une recherche documentaire afin de comprendre le
fonctionnement d’OSPF et de décrire l’architecture de Quagga. Afin d’effectuer des tests, il
nous faudra créer un réseau en se rapprochant le plus possible d’une topologie pouvant exister.
Enfin, l’outil qui nous servira à tester Quagga est le logiciel de simulation de réseaux Marionnet
dont nous exploiterons les nombreuses possibilités.
4
Gestion de projet
Dans cette partie, nous allons voir l’évolution des plans prévisionnels du projet tout au
long de celui-ci.
1
Plan de projet au lancement
Figure 2.1: Tableau récapitulatif du projet au démarage
2
Après les premiers essais
La découverte de Quagga ayant pris plus de temps que prévu, nous avons redéfini les temps
pour la suite du projet.
3
A la fin du projet
5
Figure 2.2: Diagramme de Gantt au lancement du projet
Figure 2.3: Tableau récapitulatif après les premiers essais
Figure 2.4: Diagramme de Gantt après les premiers essais
Figure 2.5: Tableau récapitulatif à la fin du projet
Figure 2.6: Diagramme de Gantt à la fin du projet
Quagga
Quagga est une suite de logiciels de routage pour TCP/IP permettant d’utiliser les principaux algorithmes de routage dynamique actuels. Elle fournit notamment une implémentation
de RIPv1, RIPv2, RIPng, OSPFv2, OSPFv3 et BGP-4. Quagga supporte aussi les fonctionalités IPv6. Réalisée par Kunihiro Ishiguro, cette suite a été conçue pour fonctionner sur les
plates-formes UNIX (FreeBSD, GNU/Linux, Solaris and NetBSD)[2].
1
Architecture
Quagga est constituée d’un ensemble de démons fonctionnant ensemble pour fournir le
service demandé (créer la table de routage).
Il existe un démon central nommé zebra qui est le gestionnaire du noyau de la suite. Ensuite
chaque protocole possède son propre démon qui permet son fonctionnement :
• ospfd pour l’implémentation d’OSPFv2
• ripd pour l’implémentation de RIP v1 et v2
• ospf6d pour l’implémentation d’OSPFv3 (pour IPv6)
• ripngd pour l’implémentation RIPng (pour IPv6)
• bgpd pour l’implémentation de BGPv4 (inclut la gestion des familles d’adresses pour le
multicast et IPv6)
[11]
Dans ce projet, nous allons nous concentrer sur le protocole OSPF dans sa version IPv6 :
OSPFv3 (implémente la RFC2740).
9
Les protocoles de routage dynamique
Les protocoles de routage dynamique permettent d’adapter le routage à la topologie du
réseau. Il existe plusieurs protocoles dynamiques. Nous étudierons ici les différences entre les
protocoles RIP et OSPF.
Le réseau internet est organisé en une collection de systèmes autonomes (AS, Autonomous
System). Chaque système autonome possède un administrateur et sa propre technologie de
routage. Tous les routeurs d’un AS sont connectés les uns avec les autres. Un protocole différent
est utilisé pour faire l’interface entre les systèmes autonomes. Un protocole de routage interne
à un AS est appelé IGP (Interior Gateway Protocole), tandis que le protocole de routage utilisé
entre deux routeurs d’AS différents est un EGP (Exterior Gateway Protocole).
1
RIP
1.1
Le fonctionnement de RIP
RIP (Routing Information Protocol) fait parti des protocoles de routage interne basés sur
les algorithmes ”‘Distance-Vecteur”’. Ces algorithmes utilisent l’algorithme de Bellman-Ford.
Il permet à chaque routeur de communiquer aux autres routeurs la métrique, c’est-à-dire la
distance qui les sépare du réseau IP (le nombre de sauts qui les sépare). Ainsi, lorsqu’un
routeur reçoit un de ces messages, il incrémente cette distance de 1 et communique le message
aux routeurs directement accessibles[3].
Une route est composée de:
• l’adresse du réseau destinataire
• L’adresse du routeur pour atteindre le réseau de destination (next hop)
• la métrique qui représente le nombre de routeurs à traverser pour atteindre le réseau de
destination
En réception, le routeur compare les routes reçues avec les siennes et met sa propre table
à jour si:
• une route reçue est meilleure
• une route reçue est nouvelle
10
Il informe ses voisins immédiats des éventuelles nouvelles routes découvertes.
Le nom de Distance-Vecteur vient du fait qu’il est possible de calculer des routes optimales
avec seulement l’échange de la liste des distances. Ces informations sont échangées entre les
entités d’un même réseau.
Résumons le rôle d’un routeur ou d’un hôte R: pour chaque destination du réseau, R garde
une métrique estimée égale au coût total permettant de l’atteindre ainsi que le nom de ses
voisins sur lesquels la métrique est basée.
La route conservée permettant de faire suivre un message est optimale: le routeur conserve
l’adresse du routeur suivant dans sa table de routage, choisi de manière à ce que le nombre de
sauts permettant d’atteindre la destination soit minimal.
Les routes sont mises à jour toutes le 30 secondes: les routeurs envoient leurs tables de
routage et, si des changements ont eu lieu, améliorent les routes et les métriques en fonction
de ce qu’ils ont reçu. (cf RFC2453 3.8)
1.2
Les limites
Pour éviter les boucles de routage, le nombre de sauts est limité à 15. Au-delà, les paquets
sont supprimés.
RIP ne prend en compte que la distance entre deux machines en terme de saut, mais il ne
considère pas l’état de la liaison afin de choisir la meilleure bande passante possible. Si l’on
considère un réseau composé de trois routeurs A, B et C, reliés en triangle, alors RIP préférera
passer par la liaison directe A-B même si la bande passante n’est que de 56 kbps alors qu’elle
est de 20 Mbps entre A et C et C et B.
La convergence est lente pour des grands réseaux, l’information échangée étant proportionnelle
au nombre de routeurs.
2
OSPF
Le protocole suivant est plus complexe (notamment du point de vu de la métrique), mais il
permet de gérer des domaines plus importants et possède un temps de convergence plus faible.
Il repose sur l’état des liens[4].
2.1
Résumé
Dans OSPF, chaque routeur établit des relations d’adjacence avec ses voisins immédiats
en envoyant des messages hello à intervalle régulier. Chaque routeur communique ensuite
la liste des réseaux auxquels il est directement connecté par des messages LSA (Link-State
Advertisements) propagés de proche en proche à tous les routeurs du réseau. L’ensemble des
LSA forme la base de données des liens Link-State Database (LSDB), qui est identique pour
tous les routeurs participants, et peut être représentée par un graphe valué. Chaque routeur
utilise ensuite l’algorithme de Dijkstra, Shortest Path First, pour déterminer la route la plus
courte vers chacun des réseaux de la base commune. Chaque réseau établit donc sa table de
routage à partir de la LSDB.
2.2
Le protocole Hello
Il a pour rôle d’établir et de maintenir les relations de voisinage. Des paquets hello sont
envoyés périodiquement par un routeur à travers toutes ses interfaces en service. Chaque
paquet hello envoyé par un routeur contient entre autre la liste des voisins dont ce routeur
a déjà reçu un paquet hello. Si un routeur A qui envoie des paquets à un routeur B reçoit
également des paquets hello de B contenant son identifiant dans la liste des voisins, c’est qu’une
relation est établie dans les deux sens entre A et B. Après qu’un voisin ait été découvert et
que la communication dans les deux sens ait été annoncée possible, il faut décider si une
relation d’adjacence entre les deux est possible. L’autorisation de ces relations dépend en fait
du statut du routeur s’il fait parti d’un réseau à accès multiples: dans ce cas particulier, un
routeur désigné et un routeur de secours sont choisis[5].
Un routeur qui cherche à entrer en communication avec un voisin peut se trouver dans l’un
des états suivants:
1. Down: état initial, aucune information n’a été récemment transmise.
2. Init: un paquet hello a récemment été reçu, cependant la communication ne se fait pas
encore dans l’autre sens.
3. 2-Way: la communication est bidirectionnelle.
4. ExStart: première étape de la création d’une adjacence. Choix d’un maı̂tre entre les
deux routeurs.
5. Exchange: le routeur décrit sa base d’état des liens à l’autre.
6. Loading: le routeur envoie des paquets LSR (Link State Request) demandant les annonces les plus récemment découvertes dans l’état Exchange (si elles n’ont pas encore
été reçues).
7. Full: les deux routeurs sont totalement adjacents. Cette adjacence apparaı̂t alors dans
la base des liens.
Le message Hello que nous venons de décrire permet d’établir des adjacences entre les
entités communicantes (routeurs,...). Une fois ces relations établies, les routeurs vont pouvoir
s’échanger des informations en s’envoyant des paquets tels que:
1. Description de la base de données (Database Description Packet): paquets envoyés
lorsqu’une adjacence entre deux entités a été initialisée. Ils décrivent le contenu de la
topologie. L’expéditeur est le maı̂tre, les destinataires les esclaves, ces derniers doivent
acquitter la réception des paquets. (Pour l’envoi et la réception: cf RFC 2328[5] § 10.8
et 10.6)
2. Demande d’état des liens (Link State Request Packet): un routeur qui estime qu’une
partie de sa base de données est périmée peut envoyer un tel message. Le format de ce
paquet lui permet de demander à ses voisins de lui envoyer la partie de base de données
qu’il souhaite mettre à jour. (Envoi et réception: cf RFC 2328[5] § 10.9 et 10.7)
3. Mise à jour de l’état des liens (Link State Update Packet): ces paquets contiennent un
ou plusieurs LSA et fournissent le mécanisme qui permet de transmettre ces LSA de leur
origine au saut suivant (leur destination) de manière fiable.
4. Accusé de réception (Link State Acknowledgment Packet): ils acquittent la réception
d’un LSA pour assurer la fiabilité du protocole. Plusieurs LSA peuvent être acquittés
par un seul accusé de réception. (Envoi/Réception: RCF 2328[5] § 13.5 et 13.7)
En cas de changement de topologie, de nouveaux LSA sont propagés de proche en proche,
et l’algorithme SPF est exécuté à nouveau sur chaque routeur. L’avantage d’OSPF par rapport
à RIP réside dans le fait que seule la partie de la base de données modifiée est diffusée, et non
l’intégralité de la base. Ces envois ne sont effectués que lors d’un changement ou au bout d’un
intervalle relativement long: s’il n’y a pas de changement au bout de 30 minutes, un nouveau
LSA est envoyé. Rappelons que RIP envoie des mises à jour toutes les 30 secondes.
2.3
Qu’est-ce qu’un LSA?
C’est un message envoyé par un routeur. (Un routeur peut en envoyer plusieurs.) L’ensemble
des LSA décrit la topologie de l’état des liens. La dernière version d’OSPF (OSPF pour IPv6)
précise la portée du flux dans le paquet LSA. Il peut y avoir trois types de portées:
• portée de lien local: le LSA est diffusé seulement sur le lien local (link-LSA)
• portés d’aire: le LSA est diffusé à travers une unique aire (routers-LSA, network-LSA,
inter-area-prefix-LSA, inter-area-router-LSA and intra-area-prefix-LSA)
• portée d’AS: le LSA est diffusé à travers tout un AS (AS-external-LSA)
Décrivons un peu plus précisément ces types de LSA:
• LSA routeur (router-LSA) diffusés par un routeur uniquement dans l’aire à laquelle
appartient le routeur.
• LSA réseau (Network-LSA) diffusé par un routeur désigné appartenant à un réseau pour
tous les routeur appartenant à ce réseau. Chaque lien qui supporte du broadcast et
chaque lien NBMA (définition: cf RFC 2328[5] 1.2) possédant au moins deux routeurs
adjacents diffusent ce genre de LSA.
• LSA préfixes inter-aire (Inter-Area-Prefix-LSA) équivalents au LSA résumé de la version
ipv4. Générés par les routeurs de bordure d’aire, ils décrivent les routes à destination
d’éléments possédant des préfixes d’adresses ipv6 appartenant à des aires différentes. Ils
contiennent également un résumé des informations de routage (l’information est condensée).
• LSA routeur inter-aire (Inter-Area-Router-LSA) équivalents au LSA résumé de la version
ipv4, mais à la différence des précédents, ils décrivent des routes vers des routeurs limites
d’AS des autres aires. L’utilité de ces routes est décrite dans la RFC 2328[5], 16.4.
• LSA d’AS externe (AS-External-LSA) générés par les routeurs de limite d’AS, ils décrivent
les routes externes à l’AS.
• LSA d’aire NSSA(NSSA-LSA) décrit un chemin vers une destination externe à l’AS.
C’est un LSA dont la portée est restreinte à une seule aire NSSA.
• LSA lien (Link-LSA) diffusé sur un lien local supportant un ou plusieurs routeurs. Un
routeur peut appartenir à plusieurs liens locaux; dans ce cas il diffusera des Link-LSA
différents sur chacun de ces liens.
• LSA préfixe intra-aire (Intra-Area-Prefix-LSA) diffusés à travers une aire.
Pour plus de détails concernant ces différentes portées de LSA, cf RFC 2740[6] et 5340[7], §
4.4.3.
Les LSA constituent une base de donnée commune à tout le réseau. Chaque routeur établit
ensuite sa propre table de routage en appliquant l’algorithme de Dijkstra à la base de donnée.
OSPF utilise une métrique numérique simple, basée sur un coût additif. La valeur par
défaut du coût d’un lien est de 108/bande passante du lien en bit/s. Un lien de 10 Mbit/s
aura par exemple un coût de 10. Pour tenir compte des connexions à très haute vitesse (1
Gbit/s et plus), on peut fixer manuellement le coût de chaque lien, ou bien fixer une bande
passante de référence supérieure à celle par défaut.
2.4
L’algorithme de Dijkstra
L’approche consiste à constituer une route la plus courte possible petit à petit en comparant
les différents possibilités. Lorsqu’un noeud est sélectionné, il offre de nouveaux noeuds (ses
voisins qui n’ont pas encore été sélectionnés) pour avancer. Un noeud sélectionné est entouré
et on ne l’explore qu’une fois. On calcule ensuite les nouvelles routes possibles. Puis on
selectionne un nouveau noeud, non encore exploré, dont le chemin depuis l’origine est le plus
court.
2.4.1
exemple
On cherche à calculer le plus court chemin entre le routeur A et le routeur G.
1. Les trois prochains sauts possibles en sortie de A sont: B, C et F.
2. On sélectionne celui dont la route est la moins coûteuse: B. (poids: 7).
Les nouveaux routeurs accessibles sont alors C via B, D et E de coûts respectifs depuis
A: 17 (moins bon que 11, donc non gardé), 23 et 21.
La route la moins coûteuse est alors la directe A-C de poids 11.
3. On sélectionne donc C, les nouveaux routeurs accessibles sont alors E via C (de poids
20, meilleur que celui de la route passant par B, donc gardé)et F via C (non gardé car
le poids est moins bon que celui déjà connu de A-F direct).
La route la moins coûteuse est alors la directe A-F de poids 13.
4. On sélectionne donc F, les nouveaux routeurs accessibles sont alors E (de poids 21>20
via C, donc non gardé) et G de poids 31.
La route la moins coûteuse est alors la A-E via C de poids 20.
5. On sélectionne donc E, le nouveau routeur accessible est alors D (de poids 25>23 via B,
donc non gardé).
La route la moins coûteuse est alors la A-D via B de poids 23.
6. On sélectionne donc D, le nouveau routeur accessible est alors G (de poids 28<31 via F,
donc gardé).
2.5
Structure d’une table de routage
Une table de routage contient toutes les informations nécessaires pour faire suivre un paquet
IP jusqu’à sa destination. Elle contient plusieurs entrées que nous allons maintenant décrire:
• Type de destinataire: le destinataire peut être un réseau, un routeur de bordure de
domaine (area border router) ou un routeur inter-AS (AS boundary router).
• ID du destinataire: pour un réseau il s’agit de son adresse IP, les autres types de destinataire sont identifiés par leur identifiant OSPF.
• Masque d’adresse: pour les réseaux seulement.
• Capacités optionnelles: supportées par le routeur destinataire (si le destinataire est un
routeur).
• Type de chemin: intra-aire, inter-aire, type externe 1 et type externe 2. Ces deux derniers
désignent des chemins externes à l’AS.
• Coût: coût du chemin jusqu’à la destination. Pour les chemins de type externe 2 il s’agit
du coût de la portion interne à l’AS.
• Coût de type 2: pour les chemins de type externe 2. Il s’agit du coût de la portion de
chemin externe à l’AS.
• Origine de l’état des liens: LSA routeur ou LSA réseau qui est à l’origine de la ligne
produite dans la table. Si par exemple il s’agit d’une route vers une adresse ipv6, ce
champ contiendra l’émetteur de la route.
• Prochain saut: l’interface du routeur suivant à utiliser pour faire suivre un paquet. (Un
des routeurs adjacents).
• Routeur d’annonce: pour les chemins inter-aires ou externes aux AS. ID du routeur de
sortie de l’AS qui conduit à ce chemin externe.
OSPF est capable de répartir la charge sur plusieurs liens, pour autant que la métrique soit
exactement identique pour chaque destination. Il est économe en bande passante : en régime
nominal, seuls de courts messages hello sont envoyés, et en cas de changement de topologie,
seuls les LSA modifiés sont envoyés aux voisins.
2.6
Notion de type de service
Une première version d’OSPF, (OSPF pour IPv4), prenait en compte le type de service et
établissait des chemins différents en fonction du type de service. On trouve donc dans la RFC
2328[5] les différents types de service codés par un entier entre 0 et 30. Quelques exemples:
• 0: service normal
• 2: coût minimisé
• 4: fiabilité maximale
• 8: débit maximum
• 16: délai minimal
Ce code est inclut dans l’en-tête IP des LSA. Cette solution a été remplacée dans la version
avec IPv6 par le champ ”traffic class” d’IP.
3
Différences majeures RIP-OSPF
1. Dans OSPF, la table informant sur l’état des liens est unique et partagée par tous les
routeurs d’une aire. Les routeurs ont donc une visibilité globale de l’ensemble du réseau
tandis que ceux de RIP ont une visibilité partielle (autour d’eux).
2. Dans OSPF, l’algorithme de Dijkstra est appliqué à cette unique table par chaque routeur
pour déterminer la route optimale lui permettant de joindre un sous réseau. Pour RIP,
chaque routeur met à jour sa propre table dès qu’un changement lui est signalé par
un voisin. La diffusion des changements est donc étendue à tout le domaine OSPF et
seulement aux voisins immédiats des routeurs RIP.
3. Les mises à jour interviennent lors d’un changement dans la topologie du réseau utilisant
OSPF, et seule la partie modifiée de la base est diffusée. Pour le réseau utilisant RIP,
des mises à jour régulières sont effectuées (toutes les 30s) et elles consistent pour chaque
routeur à envoyer leur table de routage en entier.
4. Les métriques sont différentes. OSPF tient compte de la vitesse (le coût, métrique
utilisée, est basé sur la bande passante) tandis que RIP ne prend en compte que le
nombre de passerelles traversées. De ce fait, OSPF est plus performant puisqu’il prend
en compte l’état réel du réseau (il fera passer par un chemin éventuellement plus long en
terme de sauts mais plus rapide en terme de temps).
5. Contrairement à RIP, les tables de routage ne sont pas diffusées régulièrement dans le
protocole OSPF. OSPF utilise donc moins de bande passante pour la gestion du réseau.
6. Le temps de convergence d’OSPF est particulièrement rapide, de l’ordre de quelques
secondes, tandis que RIP peut converger plus lentement.
7. RIP se limite aux réseaux de taille inférieure à 15 routeurs (problème de passage à
l’échelle). Au delà, il considère que les réseaux et routeurs sont inaccessibles. OSPF n’a
pas de limite de taille.
8. RIP sélectionne un chemin vers un réseau en ajoutant l’un des nombres de sauts indiqués
par un voisin. Il compare les nombres de sauts pour atteindre une destination et sélectionne le chemin de plus petit nombre de sauts; il repose donc sur un algorithme simple,
il ne requiert pas beaucoup de mémoire. L’algorithme d’OSPF est plus complexe: tous
les routeurs OSPF doivent obtenir des informations complètes sur les réseaux de chaque
routeur pour calculer le plus court chemin. Par conséquent, il requiert des routeurs plus
puissants et davantage de mémoire et de puissance de calcul.
9. RIP utilise une topologie linéaire: les routeurs d’une région RIP échangent des informations avec tous les routeurs. OSPF fait appel à la notion de zone: de cette façon il limite
le trafic à l’intérieur de ces zones sans affecter les performances de tout un réseau.
Exemples de structures d’autonomous
systems
Pour pouvoir évaluer la suite Quagga, nous allons utiliser un outil de simulation des réseaux.
Cet outil, Marionnet, repose sur la technologie VNUML et permet de construire une topologie
réseau puis de la simuler en utilisant des machines virtuelles. Afin de construire la topologie qui
sera ensuite simulée avec Marionnet, nous avons décidé de rechercher des systèmes autonomes
existants pour nous rapprocher au maximum de la réalité.
1
AS 2200 : RENATER
L’AS sur lequel on peut le plus facilement obtenir des informations est RENATER, le
REseau NATional de l’Enseignement et de la Recherche. Cet AS public, que nous utilisons
très régulièrement, possède un statut particulier. Il est utilisé de deux façons différentes :
• interconnecter les différents établissements de l’enseignement et de la recherche français
• effectuer des recherches sur les réseaux (métrologie, déploiement d’IPv6...)
Ce statut a pour conséquence que beaucoup d’informations sur RENATER sont publiées et
notamment sa topologie (figure 5.1).
Ce réseau possède une topologie assez variée avec :
• des boucles : Paris-Rouen-Caen-Rennes-Nantes-Bordeaux-Poitiers-Orléans
• des redondances : Paris-Lyon
• des antennes : Marseilles-Corte
Renater permet aussi de se placer à différentes échelles si on le regarde au niveau national
ou au niveau régional. Nous allons voir les exemples des réseaux Ile de France (section 1.1) et
Midi-Pyrénées (section 1.2).
1.1
AS1309 : RERIF
RERIF est l’AS de Renater pour la région Ile de France.
Ce réseau est organisé autour d’une boucle centrale : Aubervilliers-Orsay-Cachan-Jussieu.
Les principales interconnexions avec d’autres réseaux sont directement faites sur cette boucle
centrale. Quantité d’autres liens moins capacitifs permettent d’offrir le service de Renater à
tous les établissements d’Ile de France et assurent une redondance.
18
Figure 5.1: Réseau fibre optique (10Gb/s) de Renater[14]
Figure 5.2: Réseau Renater Ile de France[13]
1.2
AS1715 : REMIP2000
REMIP est l’AS de Renater pour la région Midi-Pyrénées.
Figure 5.3: Réseau REMIP2000[12]
REMIP est essentiellement constitué d’une boucle de laquelle partent des liens permettant
d’étendre le réseau vers les différents utilisateurs.
1.3
Situation de Renater au sein d’autres AS
Après avoir observé différents AS de RENATER, nous avons regardé les réseaux qui s’y
rattachent.
D’après la figure 5.4, nous avons choisi de nous concentrer d’une part sur GEANT, l’AS qui
interconnecte les differents réseaux de recherche européens et sur le réseau d’interconnexion
Sprint[8] pour avoir un réseau privé.
2
AS20965 : GEANT
GEANT est le réseau européen en charge d’interconnecter les différents réseau de recherche
nationaux (dont RENATER pour la France).
2.1
AS 766: REDIRIS
REDIRIS est le réseau de la recherche en Espagne.
Réseau espagnol REDIRIS[9]
Figure 5.4: Situation de RENATER[15]
Figure 5.5: Le réseau européen GEANT[10]
3
AS 1239: SPRINT
Le réseau Sprint[8] est un réseau commercial permettant l’interconnexion d’autres réseaux
à l’echelle mondiale.
Figure 5.6: Réseau Sprint en Europe
4
Conclusion
On ne retrouve que peu de choses d’un AS à l’autre. Elle est le plus souvent dictée par des
considérations géographiques : où a-t-on la plus grande quantité d’utilisateurs? Cependant,
on peut souvent repérer un noeud ou un ensemble de noeuds centraux sur lequel vient se
connecter l’ensemble du réseau.
Figure 5.7: Réseau Sprint en Amérique du nord
Figure 5.8: Réseau Sprint en Amérique du sud
Figure 5.9: Réseau Sprint en Australie
Figure 5.10: Réseau Sprint en Asie
Figure 5.11: Réseau Sprint en Afrique
Evaluation d’OSPFv3
Dans cette partie, il est question d’évaluer les possibilités de l’implémentation du protocole
OSPFv3 de la suite Quagga. Dans la documentation de Quagga, cette implémentation est
annoncée non terminée. Les principales parties manquantes sont :
• la gestion de la qualité de service, comme pour OSPFv2
• la gestion des aires de routage
Le fait que la gestion des aires ne soit pas implémentée nous oblige à ne définir qu’une
seule aire, l’aire 0.0.0.0 (backbone). D’autre part, cela nous pousse à réduire la taille du réseau
sur lequel nous allons travailler. Nous avons choisi de réaliser l’évaluation d’OSPFv3 sur une
reproduction du réseau d’interconnexion européen GEANT. Le réseau que nous avons construit
comprend les douze routeurs principaux du réseau GEANT ainsi que ses liens 10Gbps. Voici
comment nous avons construit le plan d’adressage.
1
Plan d’adressage
Nous travaillons en ipv6, il nous faut donc configurer des adresses ipv6. Nous avons choisi
comme préfixe celui qui est utilisé par les réseaux de recherche: 1FFE (exemple: le 6-bone).
Ce préfixe sera suivi d’une suite de zéros. Cela donne un prefixe commun à tout le réseau en
1FFE::0:0/96. L’avant dernier mot fera référence au numéro du lien et le dernier ne pourra
être qu’1 ou 2 pour désigner une des deux extrémités du lien. Les mots de 16 bits seront
notés en hexadécimal (d’où le E et le F du préfixe) et le masque sera /112. Ce masque est
le masque du sous-réseau représenté par la liaison entre deux routeurs[1]. Exemple: pour le
routeur Espagne qui possède deux interfaces : 1FFE::1:1/112 -> pour le lien avec le routeur
France et 1FFE::B:1/112 -> pour le lien avec le routeur Italie.
1.1
Procédure de configuration des routeurs sous Marionnet
• entrée dans quagga: vtysh
• configuration des interfaces:
configure terminal
interface ethX
ipv6 address 1FFE::X:Y/112
exit
exit
25
• sauvegarde des fichiers de configuration: write
Ne pas oublier de sauver le projet avant de le quitter, sinon les fichiers de configurations ne
seront pas sauvegardés.
1.2
Plan d’adressage de GEANT en IPv6
Figure 6.1: Plan d’adressage de GEANT pour l’évaluation d’OSPFv3
2
Analyse des paquets
2.1
Les messages HELLO
Après avoir lancé la simulation sur Géant, nous avons capturé les échanges effectués par
le routeur Hongrie. Rappelons que ce dernier est relié au routeur Autriche par le lien 15.
Notons que les adresses utilisées par OSPFv3 sont les adresses de lien local (non routables) qui
sont configurées automatiquement. Pour voir le plan d’adresse correspondant, voir l’annexe
3. Les adresses de lien local sont, sur le lien 15, fe80::4:6ff:fe00:2f/64 pour Autriche et
fe80::4:6ff:fe00:34/64 pour Hongrie. Voici les premiers messages capturés:
09:23:58.413646 IP6 (hlim 64, next-header: OSPF (89), length: 36) fe80::4:6ff:fe00:2f >
ff02::5: OSPFv3-hello 36: rtrid 192.168.0.11 backbone V6/E/R ifid 0.0.0.3 pri 1 int 10 dead
40 dr 192.168.0.11 nbrs
Analysons cette trame en détail:
• 09:23:58.413646: date de capture
• IP6 (hlim 64, next-header: OSPF (89), length: 36)
• fe80::4:6ff:fe00:2f > ff02::5: adresse de l’émetteur (ici Autriche) > adresse du destinataire
(ici adresse multicast pour joindre le groupe OSPF: tous les voisins qui fonctionnent
reçoivent ce message).
• OSPFv3-hello: type du paquet
• 36: longueur du paquet (en octets)
• rtrid 192.168.0.11: ID du routeur émetteur (Autriche)
• backbone V6/E/R: aire sur laquelle circule le paquet (une seule aire: Géant. V6: ospfv6,
E et R sont des options supportées par les voisins appartenant à l’aire )
• ifid 0.0.0.3: ID de l’interface de l’émetteur (également renommée automatiquement)
• pri 1: priorité du routeur émetteur
• int 10 dead 40: intervalle entre l’émission de deux paquets HELLO: 10s, un lien est
déclaré corrompu s’il ne fonctionne pas au bout de 40s (pas de réponse à un paquet
HELLO).
• dr 192.168.0.11: routeur désigné pour le réseau
• nbrs: voisins adjacents (pour l’instant aucune adjacence n’a été établie)
La trame suivante donne:
09:23:59.558710 IP6 (hlim 64, next-header: OSPF (89), length: 36) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-hello 36: rtrid 192.168.0.12 backbone V6/E/R ifid 0.0.0.4 pri 1 int 10 dead
40 nbrs
L’émetteur est ici le routeur Hongrie qui envoie un message HELLO à tout le groupe OSPF
(seuls ses voisins le recevront). Il n’a pas encore établi d’adjacence. Le protocole est fidèle à
celui décrit dans la RFC: la première étape de configuration du réseau consiste à découvrir ses
voisins et établir des adjacences.
09:24:08.418007 IP6 (hlim 64, next-header: OSPF (89), length: 40) fe80::4:6ff:fe00:2f >
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.11 backbone V6/E/R ifid 0.0.0.3 pri 1 int 10 dead
40 dr 192.168.0.11 nbrs 192.168.0.12
Ce message est envoyé par Autriche au groupe OSPF, 10 secondes après sa première émission. D’ailleurs on remarque que des messages HELLO sont émis toutes les 10 secondes pendant
toute la durée de la simulation. Ce temps respecte le délai d’envoi décrit dans la RFC. A la
différence du premier paquet envoyé par ce routeur, une relation d’adjacence a été établie avec
le routeur Hongrie dont on voit apparaı̂tre l’identifiant dans le dernier champ. En effet, après
avoir envoyé un premier paquet HELLO, Autriche a reçu une ”‘réponse”’: un paquet HELLO
provenant de Hongrie, lui signalant que la liaison entre les deux pouvait être établie. Une
relation d’adjacence s’est alors créée. De plus, le routeur Hongrie s’est déclaré comme étant
le ”‘designated router”’ (dr), soit le routeur désigné (responsable) sur ce réseau. Hongrie sera
alors le ”‘backup designated router”’(bdr), le routeur de réserve.
09:24:09.560724 IP6 (hlim 64, next-header: OSPF (89), length: 40) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.12 backbone V6/E/R ifid 0.0.0.4 pri 1 int 10 dead
40 dr 192.168.0.11 bdr 192.168.0.12 nbrs 192.168.0.11
Le paquet HELLO ci-dessus, émis par Hongrie, est détecté 10secondes après son premier
envoi. On observe par la suite que les paquets HELLO sont émis à intervalles de 10 secondes.
(cf annexe 4)
2.2
Database Description Packet
Après les trois premiers paquets HELLO, c’est-à-dire une fois la relation d’adjacence établie
entre Autriche et Hongrie, on observe le message suivant:
09:24:08.444681 IP6 (hlim 64, next-header: OSPF (89), length: 28) fe80::4:6ff:fe00:34 >
fe80::4:6ff:fe00:2f: OSPFv3-dd 28: rtrid 192.168.0.12 backbone V6/E/R I/M/MS mtu 1500 S
4B541AA8
Analysons cette trame en détail:
• 09:24:08.444681: date de capture
• IP6 (hlim 64, next-header: OSPF (89), length: 28)
• fe80::4:6ff:fe00:34 > fe80::4:6ff:fe00:2f:adresse de l’émetteur (Hongrie) > adresse du destinataire (Autriche).
• OSPFv3-dd: type de message (Database Description Packet)
• 28: longueur du paquet (en octets)
• rtrid 192.168.0.12: ID du routeur émetteur (Hongrie)
• backbone V6/E/R aire sur laquelle circule le paquet (une seule aire: Géant. V6: ospfv6,
E et R sont des options supportées par les voisins appartenant à l’aire )
• I: Init bit, indique que ce paquet est le premier de la séquence de description de base de
données à transmettre.
• M: More bit, indique que d’autres paquets permettant de décrire la base suivent.
• MS: Master/Slave bit, indique que le routeur émetteur est le maı̂tre durant le processus
d’échange de la base de données.
• mtu 1500: nombre d’octets dans une trame
• 4B541AA8: numéro de séquence, s’incrémente à chaque nouvel envoi jusqu’à ce que
toutes les données soient transmises.
Puis:
09:24:08.468434 IP6 (hlim 64, next-header: OSPF (89), length: 988) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-dd 988: rtrid 192.168.0.11 backbone V6/E/R mtu 1500 S 4B541AA8
Ce message est envoyé par Autriche en réponse au précédent: notons que la taille du message est nettement plus importante (988 octets): Hongrie est seulement relié à Autriche tandis
qu’Autriche est relié au reste du réseau. Autriche possède donc une base de donnée sur les
états de liens plus importante. Le More bit est à 0: aucun paquet ne suit. MS est aussi à 0:
l’émetteur est l’esclave du transfert. Le numéro de séquence est identique au précédent. Là
encore, le format du paquet respecte la RFC.
Un peu plus tard, on observe une autre trame de type Database Description Packet:
09:24:08.477004 IP6 (hlim 64, next-header: OSPF (89), length: 68) fe80::4:6ff:fe00:34
> fe80::4:6ff:fe00:2f: OSPFv3-dd 68: rtrid 192.168.0.12 backbone V6/E/R MS mtu 1500 S
4B541AA9
Ce message est envoyé par Hongrie à Autriche, le numéro de séquence a été incrémenté: il
s’agit d’une nouvelle séquence d’envoi de données, Hongrie reste le maı̂tre.
L’envoi de tels paquets correspond à la deuxième étape, après établissement des adjacences,
selon la RFC. Cette étape est donc bien respectée par quagga.
2.3
Link State Request Packet
Après les deux premiers paquets Database Description, on relève le paquet suivant:
09:24:08.476988 IP6 (hlim 64, next-header: OSPF (89), length: 580) fe80::4:6ff:fe00:34
> fe80::4:6ff:fe00:2f: OSPFv3-ls req 580: rtrid 192.168.0.12 backbone linklocal-link 0.0.0.3
rtr 192.168.0.11 linklocal-link 0.0.0.4 rtr 192.168.0.12 [|ospf ]
Ce paquet est envoyé par Hongrie à destination d’Autriche. Nous ne nous attarderons pas
sur les premiers champs de ce paquet qui sont analogues à ceux des paquets décrits dans les
paragraphes précédents. La différence à analyser réside dans les derniers champs:
• linklocal-link 0.0.0.3 rtr 192.168.0.11 : partie de sa base de données que l’émetteur
souhaite mettre à jour. Il y en a deux ici.
• linklocal-link: type de LS requis
• 0.0.0.3: ID du LS
• rtr 192.168.0.11: routeur à l’origine du LSA requis et dont l’update est recherché
Rappelons que ce type de message est sensé être envoyé par un routeur qui souhaite obtenir
des informations sur une partie de sa base qu’il estime périmée. Ici Hongrie demande à Autriche
de lui retransmettre la partie concernant le lien entre Autriche et Hongrie: la fonction de ce
type de paquets décrite dans la RFC est respectée.
2.4
Link State Update Packet
En réponse à un Link State Request Paquet, un Link State Update Packet est envoyé.
09:24:08.486073 IP6 (hlim 64, next-header: Fragment (44), length: 1456) fe80::4:6ff:fe00:2f
> fe80::4:6ff:fe00:34: frag (0x00000002:0|1448) OSPFv3-ls upd 1448: [len 1484]
Il s’agit très probablement de la réponse au paquet étudié précédemment, puisque l’émetteur
de ce paquet est Autriche et le destinataire Hongrie et qu’il arrive juste après. Nous n’avons
pas d’informations suffisantes sur le contenu du paquet: cela ne nous permet pas de conclure
sûrement sur le respect de la RFC, mais vu la logique de l’enchaı̂nement des trames, on peut
raisonnablement penser que quagga y est fidèle.
• 1448: longueur du paquet
Le paquet suivant est encore envoyé par Autriche, il s’agit d’un Update qui ne correspond
à aucune demande de mise à jour. La RFC précise que lors d’un changement de topologie, les
mises à jour sont propagées dans tout le réseau automatiquement, c’est bien ce que fait quagga.
09:24:08.489563 IP6 (hlim 64, next-header: OSPF (89), length: 852) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-ls upd 852: rtrid 192.168.0.11 backbone S 80000001 age 11:25
area-intra-area-prefix 0.0.0.2 rtr 192.168.0.2 [|ospf ]
• 80000001: numéro de séquence du LSA
• age 11:25: age du LSA en secondes
• area-intra-area-prefix: type de LSA
• 0.0.0.2: ID du lien
• rtr 192.168.0.2: routeur à l’origine du LSA
La séquence décrite ci-dessus est en fait le header du LSA envoyé. Ce type de message
respecte, là encore, le format décrit dans la RFC.
2.5
Link State Acknowledgement Packet
Ces paquets permettent d’acquitter la réception d’un ou plusieurs LSA. Cependant, on n’en
observe pas un par LSA envoyé: en effet, la RFC précise que les acquittement peuvent s’opérer
implicitement dans les Updates Packets. Regardons de plus près ces paquets d’acquittement:
09:24:08.558140 IP6 (hlim 64, next-header: OSPF (89), length: 36) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-ls ack 36: rtrid 192.168.0.11 backbone S 80000003 age 2 linklocallink 0.0.0.4 rtr 192.168.0.12
• S 80000003 age 2 linklocal-link 0.0.0.4 rtr 192.168.0.12 : header du LSA acquitté.
Il s’agit de l’acquittement envoyé par Hongrie en réponse au Update envoyé par Autriche
0.05s auparavant.
2.6
Conclusion sur l’analyse des paquets
Les trames étudiées nous permettent de conclure que la RFC est bien respectée: le format
des trames est quasiment identique et on retrouve toutes les données requises. Le ”‘quasiment”’
vient du fait que parfois l’ordre des données dans la trame est légèrement modifié. C’est le
cas des headers LSA: le numéro de séquence se situe au début et non en 3ème place, après
l’advertising router comme il est décrit dans la RFC.
On retrouve bien tous les types de messages: HELLO, LS Request, LS Update et LS Acknowledgement qui remplissent tous les rôles décrits dans la RFC.
Il nous manque cependant quelques données (notamment le contenu des LSA envoyés, nous
n’avons que les headers et la description de la base de donnée) pour conclure que quagga est
fidèle à 100% à la RFC. Mais le système fonctionne globalement bien comme il est décrit dans
la norme, on peut donc penser que ces données sont proches de celles qui sont décrites dans la
RFC.
3
Changement de topologie
3.1
3.1.1
Calcul du plus court chemin en fonction du débit
Introduction
Rappelons que, contrairement à RIP, la métrique d’OSPF est basée sur le coût du lien (qui
représente en fait sa capacité). Par conséquent, si Quagga respecte la RFC, le changement de
coût de liens peut entraı̂ner une mise à jour des tables de routage. Ainsi entre deux chemins
ayant un nombre de sauts différent, celui qui possède le plus de sauts peut être choisi si le coût
total de ce chemin est le meilleur.
Le test décrit ci-dessous va nous permettre de vérifier que cette fonctionnalité est bien respectée.
Pour cela, nous avons modifié les valeurs des coûts des liens 11, 12 et 13. Nous avons ensuite
relevé la table de routage du routeur Italie et regardé comment Italie joignait le lien 1. (cf
figure : 5 )
3.1.2
Commentaires
1er cas: c(11)=1, c(12)=1, c(13)=1 Pour joindre le lien 1, Italie passe par Espagne.
Ce chemin correspond au coût minimum: deux liens de coût 1 (11 et 1) => metric = 2.
2ème cas: c(11)=100, c(12)=1, c(13)=2 Cette fois, Italie joint le lien 1 par Allemagne.
Le coût minimum est alors de 1+1+1 => metric = 3 (3liens à 1).
3ème cas: c(11)=100, c(12)=2, c(13)=1 Le lien 1 est joint par Suisse. Le coût minimum
est de 1+1+1 => metric = 3 (3liens à 1)
3.2
Les tables de routage
Les tests concernant les tables de routage ont été réalisés sur le routeur Allemagne car
celui-ci est le routeur central du réseau et permet de voir beaucoup de choses. Pour une bonne
compréhension ce qui suit, il est conseillé de disposer du plan d’adressage construit de GEANT
(figure : 6.1) et de celui créé automatiquement par le protocol IPv6 (figure : 9.1). Voici la
partie de la table de routage d’Allemagne qui nous intéresse au démarrage du réseau complet.
La table complète est disponible dans l’annexe 6.
3.2.1
Le réseau complet
Kernel IPv6 routing table
Destination
Flags Metric Ref
Use Iface
1ffe::1:0/112
UG
2
1ffe::2:0/112
UG
2
1ffe::3:0/112
UG
2
1ffe::4:0/112
U
256
1ffe::5:0/112
U
256
1ffe::6:0/112
UG
2
1ffe::7:0/112
U
256
1ffe::8:0/112
UG
2
1ffe::9:0/112
U
256
1ffe::a:0/112
UG
2
1ffe::b:0/112
UG
2
1ffe::c:0/112
Next Hop
fe80::4:6ff:fe00:7
0
0 eth2
0
0 eth2
fe80::4:6ff:fe00:7
fe80::4:6ff:fe00:e
0
0 eth0
0
0 eth2
::
::
0
0 eth0
0
0 eth1
fe80::4:6ff:fe00:19
::
0
0 eth1
fe80::4:6ff:fe00:19
0
0 eth1
::
0
0 eth3
fe80::4:6ff:fe00:7
0
0 eth2
fe80::4:6ff:fe00:2c
0
0 eth4
::
U
256
1ffe::d:0/112
UG
2
1ffe::e:0/112
UG
3
1ffe::f:0/112
UG
4
0
0 eth4
0
0 eth4
fe80::4:6ff:fe00:2c
fe80::4:6ff:fe00:2c
0
0 eth4
0
0 eth4
fe80::4:6ff:fe00:2c
Dans cette table, la première chose que l’on peut voir, c’est que tous les réseaux qui sont
définis par le plan sont joignables (le flag U indique une route active) dans cette table de
routage. Ensuite tous les réseaux qui sont directement liés à une interface du routeur sont
indiqués comme tels : ils sont liés à l’interface en question et il n’y a pas de next hop. Les
réseaux qui ne sont pas directement joignables sont marqués comme tels (le flag G indique une
route dont le prochain saut est une gateway) et leurs métriques sont réduite (le maximum ici
est 4 sachant que le diamètre du réseau est de 6 pour joindre Pologne depuis Hongrie).
On peut aussi s’apercevoir que cette table de routage ne correspond pas à la RFC (paragraphe 6). Les champs qui n’apparaissent pas sont :
• Le type de destinataire vu que l’on a que des réseaux en destination (cela est spécifié
dans la RFC)
• Les capacités optionnelles pour les mêmes raisons
• Le type de chemin
• Le coût de type 2
• L’origine de l’état des liens
• Le routeur d’annonce
En fait, la table de routage est sous une forme classique où l’on a les information habituelles
: adresse destination, prochain saut, métrique, interface utilisée...
Nous avons maintenant coupé les liens C4 et C7 pour voir l’évolution de la table.
3.2.2
Sans les liens C4 et C7
Ici nous n’avons laissé que certaines routes car c’est la comparaison avec la table précédente
est intéressante. La table complète est disponible en annexe 2.5.
Kernel IPv6 routing table
Destination
Flags Metric Ref
1ffe::1:0/112
UG
3
0
1ffe::8:0/112
UG
4
0
Next Hop
Use Iface
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:e
0 eth0
Les routes que nous tenons à comparer sont celles qui partent d’Allemagne vers le réseau
1 (France-Espagne) et le réseau 8 (Suède-Pologne).
Lorsque le réseau était complet, Allemagne joignait le réseau 1 en passant par fe80::4:6ff:fe00:7
(France) et cela avec une métrique de 2. En fait, avec un traceroute, on s’aperçoit que cette
route part d’Allemagne et passe seulement par France pour joindre le réseau 1. En enlevant le
lien C4, cette route est modifiée. Allemagne envoie dorénavant les paquets à Italie et ce chemin
a une métrique de 3. Le traceroute nous donne la route Allemagne-Italie-Espagne-Réseau1.
On peut faire la même constatation sur la route Allemagne vers réseau 8 qui passe de
Allemagne-Suède-Réseau8 à Allemagne-PaysBas-Angleterre-Suède-Réseau8.
Le protocole OSPF a donc bien adapté la structure de la table de routage au changement
de la topologie du réseau.
4
Conclusion
Dans ce chapitre, nous nous sommes aperçu que l’implémentation d’OSPFv3 fonctionne
mais qu’elle n’est pas terminée. De plus, il arrive que certaines parties ne répondent pas
précisément à la RFC 5340[7]. C’est notamment le cas de la structure de la table de routage.
Parmis les parties non encore implémentées, on retrouve :
• la gestion de la qualité de service
• la gestion des aires de routage
Evaluation d’OSPFv2
La valeur ajoutée de cette partie par rapport à la précédente réside dans la gestion des aires
de routage. Il est question ici d’évaluer le fonctionnement du protocole OSPFv2 de Quagga.
Les tests sont effectués sur Renater qui possède un nombre de routeurs beaucoup plus important que Géant (30, Géant en possède 12). Il est donc nécessaire de définir des aires afin
d’optimiser le routage en divisant le réseau en sous-réseaux de plus petite taille plus faciles à
gérer.
La taille du réseau étant trop importante pour être raisonnablement supportée par une
seule machine, nous avons réparti les routeurs sur deux machines. Pour cela, nous avons
divisé la France en deux: une partie Ouest et une partie Est. La partie qui suit décrit plus
précisément la configuration du réseau sur Marionnet.
1
Plan d’adressage
1.1
Répartition du réseau sur deux machines
Le réseau est divisé en deux groupes:
36
Répartition des routeurs: partie OUEST
Répartition des routeurs: partie EST
Ces deux groupes sont reliés par des ponts. Le principe du pont est expliqué en annexe.
1.2
Attribution des adresses
A la différence d’OSPFv3, les adresses suivent le format d’ipv4: quatre octets. Les deux
premiers octets seront communs à toutes les interfaces: 192.168, il s’agit du préfixe utilisé pour
les sous-réseaux (ici Renater). L’octet suivant désigne le numéro du lien dont l’interface est
l’extremité. Le dernier octet aura la valeur 1 ou 2 pour désigner une des deux extrémités du
lien. Le masque sera en /24 qui est le masque de chaque sous-réseau représenté par un lien
entre deux noeuds.
Plan d’adressage de RENATER pour l’évaluation d’OSPFv2
1.3
Définition des aires
Nous avons défini 5 aires en procédant ainsi:
• Aire 0: représente le backbone, aire centrale qui contient le plus de noeuds (14 routeurs).
• Aires 1,2,3,4,5: ensembles de noeuds qui se raccrochent au backbone, regroupent chacune
entre 3 et 7 routeurs. Nous les avons rassemblés selon les groupes qui se sont formés
visuellement lors de la définition de la topologie sur Marionnet.
2
Mise en oeuvre
Nous avons rencontré quelques problèmes lors de la configuration des routeurs de la partie
OUEST: certains se bloquaient au démarrage. Ceci nous a contraint à redéfinir la répartition
en transférant Bordeaux, Pau, Toulouse, Clermont de la machine supportant l’OUEST à celle
qui supporte l’EST. Nous avons modifié en conséquence la configuration des ponts: br4 relie
Bordeaux à Nantes, br5 relie Clermont à Limoges et br6 Poitiers à Bordeaux. Ces changements
sont à appliquer au plan initial théorique donné ci-dessous:
Configuration des ponts
Lors de la configuration des ponts, nous avons:
1. créé les 5 interfaces eth0.X
2. créé les 5 ponts brX
3. donné une adresse à chaque pont
4. attaché chaque pont à une interface
5. attaché chaque pont à une prise virtuelle
Conclusion
L’ensemble des tests réalisés nous permettent de conclure que les fonctionnalités OSPF implémentées sur QUAGGA répondent dans l’ensemble aux exigences de la RFC. Notons quand
même que toutes les fonctionnalités d’OSPFv3 ne sont pas encore implémentées, QUAGGA
est encore en développement de ce côté-là.
Outre la découverte et l’évaluation d’un logiciel de routage, ce projet a été l’occasion pour
nous d’enrichir notre culture en réseau. Les recherches documentaires sur OSPF, l’exploration
de la technique du pontage logiciel et la définition des plans d’adressage nous ont permis
d’approfondir les connaissances acquises au cours de notre formation à l’ENAC.
Enfin, nous avons pu exploiter les possibilités offertes par l’outil logiciel Marionnet pour simuler
des réseaux réels de taille relativement importante. Ce travail a permis de produire des topologies et de définir les processus de configuration des routeurs. Une des possibilités intéressantes
exploitée a été la répartition du réseau sur deux machines. Le résultat produit pourra être
réutilisé à posteriori, ce qui peut s’avérer très intéressant dans le cadre de simulations sur des
réseaux réels.
41
Annexes
1
Utilisation d’un pont réseau avec Marionnet
Avec 12 routeurs, Marionnet met déjà plus de vingt minutes pour lancer le réseau GEANT.
RENATER comprenant 30 routeurs, nous voulions utiliser plusieurs ordinateurs pour simuler
ce réseau. Nous devions donc réussir à relier deux liens d’un réseau virtuel à travers un réseau
réelle. Pour cela, nous avons utilisé les sorties Ethernet de Marionnet ainsi qu’un pont pour
lier celle-ci à l’interface physique de la machine.
Sur cette image, nous avons aussi utilisé des VLANs afin de pouvoir faire passer plusieurs
liens virtuels à travers une seule interface physique. Pour des raisons de clarté, nous allons
commencé par détailler la procédure pour la création du pont.
1.1
Création d’un pont réseau
Le pont réseau permet d’attacher deux interfaces afin quelle n’en paraissent plus qu’une
vis-à-vis du réseau (i.e. tous les paquets à destination du pont seront diffusés sur toutes les
interfaces qui lui sont attachées). Ainsi, à partir d’une interface virtuelle de Marionnet, nous
pourrons attaquer l’interface physique de l’ordinateur. Voici la procédure que nous avons suivie
(Marionnet 1.2/ Ubuntu 9.10):
1. Configuration de l’interface eth0 :
ifconfig eth0 0.0.0.0 promisc up
42
Cette commande permet d’empêcher l’interface eth0 d’acquérir une adresse (cette interface ne doit pas être visible sur le réseau : seul le réseau Marionnet compte). La
commande promisc permet d’empêcher la résolution des adresses MAC. En effet, il ne
faut pas que eth0 filtre les messages qui arrivent sur le pont et qui n’ont pas son adresse
MAC (message à destination de Marionnet).
2. Création du pont br0 :
brctl addbr br0
ATTENTION : Au démarrage de ses prises Ethernet, Marionnet recherche un pont
du nom de br0 afin des les attacher dessus. Si vous utilisez plusieurs de ces prises
simultanément, il est déconseillé d’utiliser le nom br0. Il vaut mieux démarrer ces prises
une par une et les attacher à la main aux pont souhaité.
3. Attachement de l’interface physique au pont :
brctl addif br0 eth0
4. Configuration du pont br0 :
ifconfig br0 XXX.XXX.XXX.XXX/YY up
Donner au pont l’adresse voulue.
5. Démarrer les prises Marionnet et les attacher au pont (si l’on utilise pas br0)
brctl addif brX tapYYYY
De cette façon, la prise Ethernet de Marionnet sera liée à votre interface physique. En test,
vous pouvez essayer d’envoyer des messages sur le pont depuis Marionnet et vous les recevrez
sur votre interface physique.
1.2
Les virtual networks
Un autre problème s’est alors posé à nous. Pour diviser RENATER en deux, il fallait
couper plusieurs liens. Nous ne pouvions donc pas directement attacher une prise ethernet
de Marionnet à l’interface physique de l’ordinateur (ou alors il nous fallait plusieurs interfaces
physiques). La solution à ce problème est venue des VLANs. Nous avons scindé notre interface
physique en plusieurs interfaces virtuelles afin de créer plusieurs VLANs et ainsi disposer de
plusieurs réseaux virtuels sur un seul réseau physique. Ainsi nous pouvons ainsi avoir plusieurs
liens virtuels indépendants passant par un seul lien physique.
Pour créer nos VLANs sur Ubuntu 9.10, nous avons utilisé le package vconfig :
1. Il suffit alors d’une seule commande pour ajouter des interfaces virtuelles :
vconfig add eth0 2
Pour ajouter une interface qui s’appellera eth0.2.
ATTENTION : les réseaux virtuels doivent être les mêmes sur les deux machines. Si
vous choisissez d’utiliser le VLAN 2 (comme ici) d’un coté, il faudra aussi utiliser le
VLAN 2 de l’autre coté.
2. Créer les ponts avec ces interfaces virtuelles comme si c’était des interfaces réelles.
1.3
Plan des VLANs pour RENATER
Voici le plan d’adressage que nous avons utilisé pour diviser RENATER selon un axe
Nord-Sud :
ATTENTION : Marionnet configure les adresses MAC des machines virtuelles automatiquement et séquentiellement. Si vous essayer de relier les réseaux de deux machines physiques
en le laissant faire vous allez au devant de gros problèmes. En effet, dans ce cas l’unicité des
adresses MAC n’est plus assurée avec tous les problèmes qui en découlent. Avant de relier les
deux machines, il faut donc prendre garde à modifier les adresses MAC de l’une des machines
(dans l’onglet interface).
2
Configuration des routers Quagga
Pour que les routers fonctionnent de façon nomimale sous Marionnet, certaines modifications doivent être apportées quand à leur configuration.
2.1
Sauvegarde des fichiers de configuration Quagga
Lorsque l’on utilise le terminal vtysh pour configurer les routers quagga, la commande write
permet de sauvegarder cette configuration[2]. Cependant, les droits d’accès sur les fichiers de
configuration Quagga des routers ne permettent pas de faire cette sauvegarde. Il existe deux
méthodes pour palier à cela.
2.1.1
Téléchargement des fichiers de configuration
Cette méthode est la plus compliquée. Elle n’est pas conseillée car elle ne résout pas foncièrement le problème mais peut-être utilisée dans certains cas. Ici, on se base sur l’utilisation
des ponts réseau décrite dans la section 1.1. Une fois un pont installé, on peut communiquer
entre la machine physique et le réseau virtuel. Le principe est donc d’utiliser scp pour copier
des fichiers de configuration que l’on a préalablement écrits à la main (demande une bonne
connaissance de Quagga).
Voici la procédure à suivre :
1. Ecrire les fichiers de configuration et les organiser par dossier pour chaque router (dans
l’example on utilisera ~/router1/quagga/)
2. Démarer le réseau virtuel
3. Créer le pont réseau1.1
4. Télécharger les fichiers de configuration dans le router (le router a pour adresse 192.168.0.1).
spc -r ~/router1/quagga 192.168.0.1:/etc/
root (mot de passe du router)
Cette commande peut être inversée pour récupérer les fichiers de configuration du router
sur la machine physique.
2.1.2
Changement des droits d’accès
Pour commencer, il est conseillé de désactiver la commande service integrated-vtysh-config
du fichier vtysh.conf pour ne pas utiliser le fichier intégré Quagga.conf mais la méthode de
configuration classique de Quagga. Normalement, cette commande est désactivée par défaut.
Voici la procédure pour changer les droits d’accès des fichiers Quagga.
1. Démarer le router (identifiant : root, mot de passe : root)
2. Changer le propriétaire des fichiers Quagga
chown -R quagga.quaggavty /etc/quagga
L’option -R permet de modifier récursivement le propriétaire de tous les fichiers du
dossier Quagga. Dorénavant, les fichiers appartiennent à l’utilisateur quaggavty du
groupe quagga.
3. Changer les droits d’accès sur les fichiers
chmod -R 770 /etc/quagga
L’option -R permet de modifier récursivement le propriétaire de tous les fichiers du dossier
Quagga.
Cela doit être réaliser sur tout les routers du réseau. N’oubliez pas de sauvegarder le projet
Marionnet après sous peine de devoir tout recommencer.
2.2
En IPv6
L’option forwarding des routers n’est pas activée par défaut en IPv6, il faut donc le faire
manuellement sur chaque router. Cela se fait avec la commande :
echo ’1’ > /proc/sys/net/ipv6/conf/all/forwarding
Malheuresement, cette modification n’est pas conservée lors de l’enregistrement du projet
Marionnet. Il faut donc le refaire à chaque démarage.
3
Plan d’adressage de Geant
Avec IPv6, certaines adresses sont générées automatiquemant au lancement des interfaces.
C’est notamment le cas pour les adresses de lien local. OSPFv3 utilisant ces adresses pour
fonctionner, nous avons reporté sur le shéma ci-dessous le plan d’adresses constitué automatiquement pour une meilleur compréhension de l’évaluation d’OSPFv3.
Figure 9.1: Plan des adresses de lien local de GEANT
4
Trace des paquets capturés lors du démarage d’un réseau
Voici les paquets bruts capturés lors du lancement des routers Hongrie et Autriche sur le
réseau Géant. Les paquets concernant OSPF sont en rouge et les autres en vert.
09:23:58.413646 IP6 (hlim 64, next-header: OSPF (89), length: 36) fe80::4:6ff:fe00:2f >
ff02::5: OSPFv3-hello 36: rtrid 192.168.0.11 backbone V6/E/R ifid 0.0.0.3 pri 1 int 10 dead
40 dr 192.168.0.11 nbrs
09:23:59.558710 IP6 (hlim 64, next-header: OSPF (89), length: 36) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-hello 36: rtrid 192.168.0.12 backbone V6/E/R ifid 0.0.0.4 pri 1 int 10 dead
40 nbrs
09:23:59.718281 IP6 (hlim 1, next-header: Options (0), length: 36) fe80::4:6ff:fe00:34 >
ff02::16: HBH (rtalert: 0x0000) (padn)[icmp6 sum ok] ICMP6, multicast listener report v2,
length 28, 1 group record(s) [ga ddr ff02::5 to ex ]
09:23:59.905234 IP6 (hlim 1, next-header: Options (0), length: 36) fe80::4:6ff:fe00:34 >
ff02::16: HBH (rtalert: 0x0000) (padn)[icmp6 sum ok] ICMP6, multicast listener report v2,
length 28, 1 group record(s) [ga ddr ff02::5 to ex ]
09:24:08.418007 IP6 (hlim 64, next-header: OSPF (89), length: 40) fe80::4:6ff:fe00:2f >
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.11 backbone V6/E/R ifid 0.0.0.3 pri 1 int 10 dead
40 dr 192.168.0.11 nbrs 192.168.0.12
09:24:08.443180 IP6 (hlim 255, next-header: ICMPv6 (58), length: 32) fe80::4:6ff:fe00:34 >
ff02::1:ff00:2f: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::4:6ff:fe00:2f
source link-address option (1), length 8 (1): 02:04:06:00:00:34 0x0000: 0204 0600 0034
09:24:08.443300 IP6 (hlim 255, next-header: ICMPv6 (58), length: 32) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: [icmp6 sum ok] ICMP6, neighbor advertisement, length 32, tgt is fe80::4:6ff:fe00:2f,
Flags [router, solicited, override] destination link-address option (2), length 8 (1): 02:04:06:00:00:2f
0x0000: 0204 0600 002f
09:24:08.443189 IP6 (hlim 1, next-header: Options (0), length: 36) fe80::4:6ff:fe00:34 >
ff02::16: HBH (rtalert: 0x0000) (padn)[icmp6 sum ok] ICMP6, multicast listener report v2,
length 28, 1 group record(s) [ga ddr ff02::6 to ex ]
09:24:08.444681 IP6 (hlim 64, next-header: OSPF (89), length: 28) fe80::4:6ff:fe00:34 >
fe80::4:6ff:fe00:2f: OSPFv3-dd 28: rtrid 192.168.0.12 backbone V6/E/R I/M/MS mtu 1500 S
4B541AA8
09:24:08.468434 IP6 (hlim 64, next-header: OSPF (89), length: 988) fe80::4:6ff:fe00:2f
> fe80::4:6ff:fe00:34: OSPFv3-dd 988: rtrid 192.168.0.11 backbone V6/E/R mtu 1500 S
4B541AA8
09:24:08.476988 IP6 (hlim 64, next-header: OSPF (89), length: 580) fe80::4:6ff:fe00:34 >
fe80::4:6ff:fe00:2f: OSPFv3-ls req 580: rtrid 192.168.0.12 backbone linklocal-link 0.0.0.3 rtr
192.168.0.11 linkloca l-link 0.0.0.4 rtr 192.168.0.12 [|ospf]
09:24:08.477004 IP6 (hlim 64, next-header: OSPF (89), length: 68) fe80::4:6ff:fe00:34
> fe80::4:6ff:fe00:2f: OSPFv3-dd 68: rtrid 192.168.0.12 backbone V6/E/R MS mtu 1500 S
4B541AA9
09:24:08.486073 IP6 (hlim 64, next-header: Fragment (44), length: 1456) fe80::4:6ff:fe00:2f
> fe80::4:6ff:fe00:34: frag (0x00000002:0|1448) OSPFv3-ls upd 1448: [len 1484]
09:24:08.487226 IP6 (hlim 64, next-header: Fragment (44), length: 44) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: frag (0x00000002:1448|36)
09:24:08.489563 IP6 (hlim 64, next-header: OSPF (89), length: 852) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-ls upd 852: rtrid 192.168.0.11 backbone S 80000001 age 11:25
area-intra-area-prefix 0.0.0.2 rtr 192.168.0.2 [|ospf]
09:24:08.491382 IP6 (hlim 64, next-header: OSPF (89), length: 28) fe80::4:6ff:fe00:2f
> fe80::4:6ff:fe00:34: OSPFv3-ls req 28: rtrid 192.168.0.11 backbone area-intra-area-prefix
0.0.0.0 rtr 192.168.0.12
09:24:08.492949 IP6 (hlim 64, next-header: OSPF (89), length: 28) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-dd 28: rtrid 192.168.0.11 backbone V6/E/R mtu 1500 S 4B541AA9
09:24:08.510626 IP6 (hlim 64, next-header: OSPF (89), length: 208) fe80::4:6ff:fe00:34
> fe80::4:6ff:fe00:2f: OSPFv3-ls req 208: rtrid 192.168.0.12 backbone area-intra-area-prefix
0.0.0.2 rtr 192.168.0.2 a rea-intra-area-prefix 0.0.0.3 rtr 192.168.0.2 [|ospf]
09:24:08.510644 IP6 (hlim 64, next-header: OSPF (89), length: 156) fe80::4:6ff:fe00:34
> ff02::5: OSPFv3-ls upd 156: rtrid 192.168.0.12 backbone S 80000003 age 1 linklocal-link
0.0.0.4 rtr 192.168.0.12 [|osp f]
09:24:08.514562 IP6 (hlim 64, next-header: OSPF (89), length: 852) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-ls upd 852: rtrid 192.168.0.11 backbone S 80000001 age 11:25
area-intra-area-prefix 0.0.0.2 rtr 192.168.0.2 [|ospf]
09:24:08.530766 IP6 (hlim 64, next-header: OSPF (89), length: 72) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-ls upd 72: rtrid 192.168.0.12 backbone S 80000001 age 1:00:00 area-intraarea-prefix 0.0.0.4 rtr 192.168. 0.12 [|ospf]
09:24:08.530782 IP6 (hlim 64, next-header: OSPF (89), length: 156) fe80::4:6ff:fe00:34
> fe80::4:6ff:fe00:2f: OSPFv3-ls upd 156: rtrid 192.168.0.12 backbone S 80000002 age 10
area-intra-area-prefix 0.0.0.0 rtr 192.168.0.12 [|ospf]
09:24:08.558140 IP6 (hlim 64, next-header: OSPF (89), length: 36) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-ls ack 36: rtrid 192.168.0.11 backbone S 80000003 age 2 linklocallink 0.0.0.4 rtr 192.168.0. 12
09:24:08.595109 IP6 (hlim 64, next-header: OSPF (89), length: 212) fe80::4:6ff:fe00:2f >
ff02::5: OSPFv3-ls upd 212: rtrid 192.168.0.11 backbone S 80000004 age 1 area-rtr 192.168.0.11
[|ospf]
09:24:08.647455 IP6 (hlim 64, next-header: OSPF (89), length: 112) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-ls upd 112: rtrid 192.168.0.12 backbone S 80000002 age 1 area-rtr 192.168.0.12
[|ospf]
09:24:08.724491 IP6 (hlim 64, next-header: OSPF (89), length: 316) fe80::4:6ff:fe00:34
> fe80::4:6ff:fe00:2f: OSPFv3-ls ack 316: rtrid 192.168.0.12 backbone S 80000001 age 11:26
area-intra-area-prefix 0.0.0.2 rtr 192.168.0.2
09:24:08.724507 IP6 (hlim 64, next-header: OSPF (89), length: 72) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-ls upd 72: rtrid 192.168.0.12 backbone S 80000001 age 1:00:00 area-intraarea-prefix 0.0.0.4 rtr 192.168. 0.12 [|ospf]
09:24:08.724522 IP6 (hlim 1, next-header: Options (0), length: 36) fe80::4:6ff:fe00:34 >
ff02::16: HBH (rtalert: 0x0000) (padn)[icmp6 sum ok] ICMP6, multicast listener report v2,
length 28, 1 group record(s) [ga ddr ff02::6 to ex ]
09:24:08.731461 IP6 (hlim 64, next-header: OSPF (89), length: 36) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-ls ack 36: rtrid 192.168.0.11 backbone S 80000001 age 1:00:00
area-intra-area-prefix 0.0.0.4 rtr 192.168.0.12
09:24:09.560724 IP6 (hlim 64, next-header: OSPF (89), length: 40) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.12 backbone V6/E/R ifid 0.0.0.4 pri 1 int 10 dead
40 dr 192.168.0.11 bdr 192.168. 0.12 nbrs 192.168.0.11
09:24:11.502232 IP6 (hlim 64, next-header: OSPF (89), length: 996) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-ls ack 996: rtrid 192.168.0.12 backbone S 80000002 age 9:46 linklocal-link
0.0.0.3 rtr 192.168.0.11
09:24:11.526091 IP6 (hlim 64, next-header: OSPF (89), length: 116) fe80::4:6ff:fe00:2f >
ff02::5: OSPFv3-ls ack 116: rtrid 192.168.0.11 backbone S 80000003 age 5 linklocal-link 0.0.0.4
rtr 192.168.0.12
09:24:13.445801 IP6 (hlim 255, next-header: ICMPv6 (58), length: 32) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: [icmp6 sum ok] ICMP6, neighbor solicitation, length 32, who has fe80::4:6ff:fe00:34
source link-address option (1), length 8 (1): 02:04:06:00:00:2f 0x0000: 0204 0600 002f
09:24:13.448149 IP6 (hlim 255, next-header: ICMPv6 (58), length: 24) fe80::4:6ff:fe00:34 >
fe80::4:6ff:fe00:2f: [icmp6 sum ok] ICMP6, neighbor advertisement, length 24, tgt is fe80::4:6ff:fe00:34,
Flags [router, solicited]
09:24:13.527729 IP6 (hlim 64, next-header: OSPF (89), length: 112) fe80::4:6ff:fe00:34 >
fe80::4:6ff:fe00:2f: OSPFv3-ls upd 112: rtrid 192.168.0.12 backbone S 80000002 age 6 area-rtr
192.168.0.12 [|ospf]
09:24:13.576482 IP6 (hlim 64, next-header: OSPF (89), length: 76) fe80::4:6ff:fe00:2f >
fe80::4:6ff:fe00:34: OSPFv3-ls upd 76: rtrid 192.168.0.11 backbone S 80000004 age 6 area-rtr
192.168.0.11 [|ospf]
09:24:16.544107 IP6 (hlim 64, next-header: OSPF (89), length: 56) fe80::4:6ff:fe00:2f >
ff02::5: OSPFv3-ls ack 56: rtrid 192.168.0.11 backbone S 80000002 age 10 area-rtr 192.168.0.12
09:24:16.605932 IP6 (hlim 64, next-header: OSPF (89), length: 36) fe80::4:6ff:fe00:34 >
ff02::5: OSPFv3-ls ack 36: rtrid 192.168.0.12 backbone S 80000004 age 10 area-rtr 192.168.0.11
09:24:18.424566 IP6 (hlim 64, next-header: OSPF
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.11 backbone
40 dr 192.168.0.11 bdr 192.168. 0.12 nbrs 192.168.0.12
09:24:19.569803 IP6 (hlim 64, next-header: OSPF
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.12 backbone
40 dr 192.168.0.11 bdr 192.168. 0.12 nbrs 192.168.0.11
09:24:28.437296 IP6 (hlim 64, next-header: OSPF
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.11 backbone
40 dr 192.168.0.11 bdr 192.168. 0.12 nbrs 192.168.0.12
09:24:29.586726 IP6 (hlim 64, next-header: OSPF
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.12 backbone
40 dr 192.168.0.11 bdr 192.168. 0.12 nbrs 192.168.0.11
09:24:38.446371 IP6 (hlim 64, next-header: OSPF
ff02::5: OSPFv3-hello 40: rtrid 192.168.0.11 backbone
40 dr 192.168.0.11 bdr 192.168. 0.12 nbrs 192.168.0.12
(89), length: 40) fe80::4:6ff:fe00:2f >
V6/E/R ifid 0.0.0.3 pri 1 int 10 dead
(89), length: 40) fe80::4:6ff:fe00:34 >
V6/E/R ifid 0.0.0.4 pri 1 int 10 dead
(89), length: 40) fe80::4:6ff:fe00:2f >
V6/E/R ifid 0.0.0.3 pri 1 int 10 dead
(89), length: 40) fe80::4:6ff:fe00:34 >
V6/E/R ifid 0.0.0.4 pri 1 int 10 dead
(89), length: 40) fe80::4:6ff:fe00:2f >
V6/E/R ifid 0.0.0.3 pri 1 int 10 dead
5
Table de routage d’Italie
1er cas:
eth2 cout=1 et eth3 cout=1 et eth0 cout=1
Italie:~# route -A inet6
Kernel IPv6 routing table
Destination
Flags Metric Ref
Use Iface
::1/128
U
0
9
1 lo
1ffe::1:0/112
UG
2
0
0 eth2
1ffe::2:0/112
UG
3
0
0 eth3
1ffe::3:0/112
UG
3
0
0 eth3
1ffe::4:0/112
UG
2
0
0 eth3
1ffe::5:0/112
UG
2
0
0 eth3
1ffe::6:0/112
UG
3
0
0 eth3
1ffe::7:0/112
UG
2
0
0 eth3
1ffe::8:0/112
UG
3
0
0 eth3
1ffe::9:0/112
UG
2
0
0 eth3
1ffe::a:0/112
UG
2
0
0 eth0
1ffe::b:0/128
U
0
0
2 lo
1ffe::b:2/128
U
0
0
1 lo
1ffe::b:0/112
U
256
0
0 eth2
1ffe::c:0/128
U
0
0
2 lo
1ffe::c:2/128
U
0
0
1 lo
1ffe::c:0/112
U
256
0
0 eth3
1ffe::d:0/128
U
0
0
2 lo
1ffe::d:2/128
U
0
0
1 lo
Next Hop
::
fe80::4:6ff:fe00:2
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:28
::
::
::
::
::
::
::
::
1ffe::d:0/112
U
256
0
0 eth0
1ffe::e:0/112
UG
2
0
0 eth0
1ffe::f:0/112
UG
3
0
0 eth0
1ffe::10:0/112
UG
4
0
0 eth0
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::4:6ff:fe00:29/128
U
0
56
1 lo
fe80::4:6ff:fe00:2a/128
U
0
0
1 lo
fe80::4:6ff:fe00:2b/128
U
0
55
1 lo
fe80::4:6ff:fe00:2c/128
U
0
38
1 lo
fe80::4042:aff:fe74:edc0/128
U
0
0
1 lo
fe80::/64
U
256
0
0 eth0
fe80::/64
U
256
0
0 eth1
fe80::/64
U
256
0
0 eth2
fe80::/64
U
256
0
0 eth3
ff02::2/128
UC
0
3
3 eth3
ff02::5/128
UC
0
2557
0 eth0
ff02::5/128
UC
0
2605
0 eth2
ff02::5/128
UC
0
2562
0 eth3
ff00::/8
U
256
0
0 eth0
ff00::/8
::
fe80::4:6ff:fe00:28
fe80::4:6ff:fe00:28
fe80::4:6ff:fe00:28
::
::
::
::
::
::
::
::
::
::
::
::
::
::
ff02::2
ff02::5
ff02::5
ff02::5
::
::
U
256
ff00::/8
U
256
ff00::/8
U
256
0
0 eth1
0
0 eth2
::
::
0
0 eth3
Pour joindre le reseau 1, italie passe par espagne
2ème cas: eth2 cout=100 et eth3 cout=1 et eth0 cout=2}
Italie:~# route -A inet6
Kernel IPv6 routing table
Destination
Flags Metric Ref
Use Iface
::1/128
U
0
9
1 lo
1ffe::1:0/112
UG
3
0
0 eth3
1ffe::2:0/112
UG
3
0
0 eth3
1ffe::3:0/112
UG
3
0
0 eth3
1ffe::4:0/112
UG
2
0
0 eth3
1ffe::5:0/112
UG
2
0
0 eth3
1ffe::6:0/112
UG
3
0
0 eth3
1ffe::7:0/112
UG
2
0
0 eth3
1ffe::8:0/112
UG
3
0
0 eth3
1ffe::9:0/112
UG
2
0
0 eth3
1ffe::a:0/112
UG
3
0
0 eth3
1ffe::b:0/128
U
0
0
2 lo
1ffe::b:2/128
U
0
0
1 lo
1ffe::b:0/112
U
256
0
0 eth2
1ffe::c:0/128
U
0
0
2 lo
1ffe::c:2/128
U
0
0
1 lo
1ffe::c:0/112
Next Hop
::
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
::
::
::
::
::
::
U
256
0
0 eth3
1ffe::d:0/128
U
0
0
2 lo
1ffe::d:2/128
U
0
0
1 lo
1ffe::d:0/112
U
256
0
0 eth0
1ffe::e:0/112
UG
3
0
0 eth0
1ffe::f:0/112
UG
4
0
0 eth0
1ffe::10:0/112
UG
5
0
0 eth0
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::4:6ff:fe00:29/128
U
0
56
1 lo
fe80::4:6ff:fe00:2a/128
U
0
0
1 lo
fe80::4:6ff:fe00:2b/128
U
0
55
1 lo
fe80::4:6ff:fe00:2c/128
U
0
38
1 lo
fe80::4042:aff:fe74:edc0/128
U
0
0
1 lo
fe80::/64
U
256
0
0 eth0
fe80::/64
U
256
0
0 eth1
fe80::/64
U
256
0
0 eth2
fe80::/64
U
256
0
0 eth3
ff02::2/128
UC
0
3
3 eth3
ff02::5/128
UC
0
2597
0 eth0
ff02::5/128
UC
0
2647
0 eth2
::
::
::
fe80::4:6ff:fe00:28
fe80::4:6ff:fe00:28
fe80::4:6ff:fe00:28
::
::
::
::
::
::
::
::
::
::
::
::
::
::
ff02::2
ff02::5
ff02::5
ff02::5/128
UC
0
ff00::/8
U
256
ff00::/8
U
256
ff00::/8
U
256
ff00::/8
U
256
ff02::5
2603
0 eth3
::
0
0 eth0
::
0
0 eth1
::
0
0 eth2
0
0 eth3
::
Il passe par l’allemagne
3ème cas: eth2 cout=100 et eth3 cout=2 et eth0 cout=2
Italie:~# route -A inet6
Kernel IPv6 routing table
Destination
Flags Metric Ref
Use Iface
::1/128
U
0
9
1 lo
1ffe::1:0/112
UG
3
0
0 eth0
1ffe::2:0/112
UG
3
0
0 eth0
1ffe::3:0/112
UG
4
0
0 eth3
1ffe::4:0/112
UG
3
0
0 eth3
1ffe::5:0/112
UG
3
0
0 eth3
1ffe::6:0/112
UG
4
0
0 eth3
1ffe::7:0/112
UG
3
0
0 eth3
1ffe::8:0/112
UG
4
0
0 eth3
1ffe::9:0/112
UG
3
0
0 eth3
1ffe::a:0/112
UG
2
0
0 eth0
1ffe::b:0/128
U
0
0
2 lo
1ffe::b:2/128
U
0
0
1 lo
1ffe::b:0/112
U
256
0
0 eth2
Next Hop
::
fe80::4:6ff:fe00:28
fe80::4:6ff:fe00:28
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:15
fe80::4:6ff:fe00:28
::
::
::
1ffe::c:0/128
U
0
0
2 lo
1ffe::c:2/128
U
0
0
1 lo
1ffe::c:0/112
U
256
0
0 eth3
1ffe::d:0/128
U
0
0
2 lo
1ffe::d:2/128
U
0
0
1 lo
1ffe::d:0/112
U
256
0
0 eth0
1ffe::e:0/112
UG
2
0
0 eth0
1ffe::f:0/112
UG
3
0
0 eth0
1ffe::10:0/112
UG
4
0
0 eth0
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::/128
U
0
0
2 lo
fe80::4:6ff:fe00:29/128
U
0
56
1 lo
fe80::4:6ff:fe00:2a/128
U
0
0
1 lo
fe80::4:6ff:fe00:2b/128
U
0
55
1 lo
fe80::4:6ff:fe00:2c/128
U
0
38
1 lo
fe80::4042:aff:fe74:edc0/128
U
0
0
1 lo
fe80::/64
U
256
0
0 eth0
fe80::/64
U
256
0
0 eth1
fe80::/64
U
256
0
0 eth2
fe80::/64
U
256
0
0 eth3
ff02::2/128
::
::
::
::
::
::
fe80::4:6ff:fe00:28
fe80::4:6ff:fe00:28
fe80::4:6ff:fe00:28
::
::
::
::
::
::
::
::
::
::
::
::
::
::
ff02::2
UC
0
ff02::5/128
UC
0
ff02::5/128
UC
0
ff02::5/128
UC
0
ff00::/8
U
256
ff00::/8
U
256
ff00::/8
U
256
ff00::/8
U
256
3
3 eth3
ff02::5
2655
0 eth0
ff02::5
2711
0 eth2
2664
0 eth3
ff02::5
::
0
0 eth0
::
0
0 eth1
::
0
0 eth2
::
0
0 eth3
Il passe par la suisse
6
6.1
Tables de routage d’Allemagne
Réseau complet
Allemagne:~# route -A inet6
Kernel IPv6 routing table
Destination
Flags Metric Ref
Use
::1/128
U
0
9
1
1ffe::1:0/112
UG
2
0
0
1ffe::2:0/112
UG
2
0
0
1ffe::3:0/112
UG
2
0
0
1ffe::4:0/128
U
0
0
2
1ffe::4:2/128
U
0
0
1
1ffe::4:0/112
U
256
0
0
1ffe::5:0/128
U
0
0
2
1ffe::5:2/128
U
0
0
1
1ffe::5:0/112
U
256
0
0
1ffe::6:0/112
UG
2
0
0
1ffe::7:0/128
U
0
0
2
1ffe::7:1/128
U
0
0
1
1ffe::7:0/112
U
256
0
0
1ffe::8:0/112
UG
2
0
0
1ffe::9:0/128
U
0
0
2
1ffe::9:1/128
U
0
0
1
1ffe::9:0/112
U
256
0
0
1ffe::a:0/112
UG
2
0
0
1ffe::b:0/112
Next Hop
Iface
::
lo
fe80::4:6ff:fe00:7
eth2
fe80::4:6ff:fe00:7
eth2
fe80::4:6ff:fe00:e
eth0
::
lo
::
lo
::
eth2
::
lo
::
lo
::
eth0
fe80::4:6ff:fe00:19
eth1
::
lo
::
lo
::
eth1
fe80::4:6ff:fe00:19
eth1
::
lo
::
lo
::
eth3
fe80::4:6ff:fe00:7
eth2
fe80::4:6ff:fe00:2c
UG
2
0
1ffe::c:0/128
U
0
0
1ffe::c:1/128
U
0
0
1ffe::c:0/112
U
256
0
1ffe::d:0/112
UG
2
0
1ffe::e:0/112
UG
3
0
1ffe::f:0/112
UG
4
0
1ffe::10:0/112
UG
5
0
fe80::/128
U
0
0
fe80::/128
U
0
0
fe80::/128
U
0
0
fe80::/128
U
0
0
fe80::/128
U
0
0
fe80::/128
U
0
0
fe80::/128
U
0
0
fe80::/128
U
0
0
fe80::/128
U
0
0
fe80::4:6ff:fe00:11/128
U
0
114
fe80::4:6ff:fe00:12/128
U
0
112
fe80::4:6ff:fe00:13/128
U
0
31
fe80::4:6ff:fe00:14/128
U
0
73
fe80::4:6ff:fe00:15/128
U
0
41
fe80::4:6ff:fe00:16/128
U
0
0
fe80::4:6ff:fe00:17/128
U
0
0
0 eth4
::
2 lo
::
1 lo
::
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
fe80::4:6ff:fe00:18/128
U
0
0
1 lo
fe80::4042:a3ff:fe05:b381/128
U
0
0
1 lo
fe80::/64
U
256
0
0 eth0
fe80::/64
U
256
0
0 eth1
fe80::/64
U
256
0
0 eth2
fe80::/64
U
256
0
0 eth3
fe80::/64
U
256
0
0 eth4
fe80::/64
U
256
0
0 eth5
fe80::/64
U
256
0
0 eth6
fe80::/64
U
256
0
0 eth7
ff02::5/128
UC
0
1877
0 eth4
ff02::5/128
UC
0
1857
0 eth1
ff02::5/128
UC
0
1861
0 eth2
ff02::5/128
UC
0
1853
0 eth0
ff02::5/128
UC
0
1776
0 eth3
ff00::/8
U
256
0
0 eth3
ff00::/8
U
256
0
0 eth2
ff00::/8
U
256
0
0 eth0
ff00::/8
U
256
0
0 eth1
ff00::/8
U
256
0
0 eth4
ff00::/8
U
256
0
0 eth5
ff00::/8
U
256
0
0 eth6
ff00::/8
U
256
0
0 eth7
::
::
::
::
::
::
::
::
::
::
ff02::5
ff02::5
ff02::5
ff02::5
ff02::5
::
::
::
::
::
::
::
::
6.2
Sans C7 et C4
Allemagne:~# route -A inet6
Kernel IPv6 routing table
Destination
Flags Metric Ref
::1/128
U
0
9
1ffe::1:0/112
UG
3
0
1ffe::2:0/112
UG
3
0
1ffe::3:0/112
UG
2
0
1ffe::4:0/128
U
0
0
1ffe::4:2/128
U
0
0
1ffe::4:0/112
U
256
0
1ffe::5:0/128
U
0
0
1ffe::5:2/128
U
0
0
1ffe::5:0/112
U
256
0
1ffe::6:0/112
UG
3
0
1ffe::7:0/128
U
0
0
1ffe::7:1/128
U
0
0
1ffe::7:0/112
U
256
0
1ffe::8:0/112
UG
4
0
1ffe::9:0/128
U
0
0
1ffe::9:1/128
U
0
0
1ffe::9:0/112
U
256
0
1ffe::a:0/112
UG
3
0
1ffe::b:0/112
UG
2
0
1ffe::c:0/128
Next Hop
Use Iface
::
1 lo
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:e
0 eth0
fe80::4:6ff:fe00:e
0 eth0
::
2 lo
::
1 lo
::
0 eth2
::
2 lo
::
1 lo
::
0 eth0
fe80::4:6ff:fe00:e
0 eth0
::
2 lo
::
1 lo
::
0 eth1
fe80::4:6ff:fe00:e
0 eth0
::
2 lo
::
1 lo
::
0 eth3
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
::
U
0
0
U
0
0
U
256
0
UG
2
0
UG
3
0
UG
4
0
UG
5
0
U
0
0
U
0
0
U
0
0
U
0
0
U
0
0
1ffe::c:1/128
1ffe::c:0/112
1ffe::d:0/112
1ffe::e:0/112
1ffe::f:0/112
1ffe::10:0/112
fe80::/128
fe80::/128
fe80::/128
fe80::/128
fe80::/128
fe80::/128
U
0
0
fe80::/128
U
0
0
U
0
0
U
0
fe80::4:6ff:fe00:11/128
U
0
fe80::4:6ff:fe00:12/128
U
0
fe80::4:6ff:fe00:13/128
U
0
fe80::4:6ff:fe00:14/128
U
0
fe80::4:6ff:fe00:15/128
U
0
fe80::4:6ff:fe00:16/128
U
0
fe80::4:6ff:fe00:17/128
U
0
fe80::4:6ff:fe00:18/128
U
0
0
fe80::/128
fe80::/128
114
114
31
73
41
0
0
0
2 lo
::
1 lo
::
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
fe80::4:6ff:fe00:2c
0 eth4
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
2 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
::
1 lo
fe80::4042:a3ff:fe05:b381/128
U
0
0
fe80::/64
U
256
0
fe80::/64
U
256
0
fe80::/64
U
256
0
fe80::/64
U
256
0
fe80::/64
U
256
0
fe80::/64
U
256
0
fe80::/64
U
256
0
fe80::/64
U
256
0
ff02::5/128
UC
0
2106
ff02::5/128
UC
0
2045
ff02::5/128
UC
0
2045
ff02::5/128
UC
0
2086
ff02::5/128
UC
0
2003
ff00::/8
U
256
0
ff00::/8
U
256
0
ff00::/8
U
256
0
ff00::/8
U
256
0
ff00::/8
U
256
0
ff00::/8
U
256
0
ff00::/8
U
256
0
ff00::/8
U
256
0
::
1 lo
::
0 eth0
::
0 eth1
::
0 eth2
::
0 eth3
::
0 eth4
::
0 eth5
::
0 eth6
::
0 eth7
ff02::5
0 eth4
ff02::5
0 eth1
ff02::5
0 eth2
ff02::5
0 eth0
ff02::5
0 eth3
::
0 eth3
::
0 eth2
::
0 eth0
::
0 eth1
::
0 eth4
::
0 eth5
::
0 eth6
::
0 eth7
Bibliography
[1] Gisèle Cizault. IPV6. O’REILLY, 1998.
[2] Kunihiro Ishiguro et al. Quagga, juillet 2006.
[3] Christian HUITEMMA. Le routage dans l’internet. Eyrolles, 1995.
[4] John T. MOY. OSPF. Addison-Wesley, 1998.
[5] John T. MOY. Rfc2328-ospf version 2. Technical report, IETF, 1998.
[6] John T. MOY R. COLTUN, D. FERGUSON. Rfc2740-ospf for ipv6. Technical report,
IETF, 2008.
[7] John T. MOY A. LINDEM R. COLTUN, D. FERGUSON. Rfc5340-ospf for ipv6. Technical report, IETF, 2008.
[8] http://sprint.net, 16 décembre 2009.
[9] http://www.cesca.es/comunicacions/rediris.html, 16 décembre 2009.
[10] http://www.ces.net/doc/2003/research/geant.html, 16 décembre 2009.
[11] http://www.quagga.net.
[12] http://www.remip.prd.fr/doku.php?id=architecture_du_reseau, 16 décembre 2009.
[13] http://www.renater.fr/spip?article302, 16 décembre 2009.
[14] http://www.renater.fr/spip?article70, 16 décembre 2009.
[15] http://www.robtex.com/as/as2200.html#graph, 16 décembre 2009.
65