MOOC:Compagnon Act24-s7
From Livre IPv6
Activité 23: Les principes du routage en IPv6
Introduction : Qu'est ce que le routage ?
Le routage est la fonction permettant au réseau d'acheminer un paquet vers sa destination[1]. C'est donc une fonction cruciale pour le bon fonctionnement du réseau. Le routage s'effectue au niveau IP, indépendamment des couches physique et liaison sous-jacentes. Grâce au routage, un même paquet IP pourra être relayé entre des réseaux utilisant des couches basses différentes, d'un réseau LTE vers un réseau local Ethernet par exemple. L'acheminement d'un paquet au sein d'un réseau utilisant les même couches basses (un même réseau local Ethernet par exemple) d'effectue sur les informations présentes dans les en-tête de l'unité protocolaire de la couche liaison. On parle alors de commutation et non de routage.
La fonction de routage est distribuée sur les différents équipements actifs au niveau réseau, c'est-à-dire comportant une pile IP. Lorsqu'un paquet IP arrive sur un équipement, celui-ci décide si ce paquet lui est destiné ou s'il doit le retransmettre. Dans ce dernier cas, la fonction de routage doit décider vers quel réseau faire suivre le paquet afin qu'il atteigne sa destination. Cette décision se base sur les informations contenues dans l'en-tête IP du paquet (i.e. l'adresse destination) et des informations sur la position relative de la destination par rapport à l'équipement qui doit relayer le paquet. Ces informations constituent la connaissance locale à l'équipement de la topologie du réseau. Grâce à ces informations, l'équipement déterminera vers quel réseau faire suivre le paquet, qui arrivera alors sur un nouvel équipement. Ainsi, de proche en proche, le paquet sera relayer depuis l'émetteur jusqu'à sa destination.
Cette connaissance de la topologie du réseau au niveau de chaque équipement peut être communiquée de plusieurs façons. L'administrateur peut configurer manuellement cette topologie au niveau des différents équipements. Mais ce mode de configuration est peu adapté lorsque le réseau évolue (lorsqu'un nouveau réseau apparait par exemple). On parle alors de routage statique. Une autre méthode consiste, pour chaque équipement concerné par la fonction de routage, à propager sa connaissance locale du réseau et à intégrer les informations fournies par d'autres équipements. Ces échanges s'effectuent grâce à des protocoles de routage. Ce mécanisme permet d'envisager une prise en compte automatique des évolutions du réseau par les équipements. On parle alors de routage dynamique.
Cette activité présente les différents éléments de configuration du routage IPv6 sur un équipement. Le fonctionnement du mécanisme de routage se base sur ces configurations ainsi que sur les protocoles de routage disponibles en IPv6. Les algorithmes de routage permettant de calculer une représentation de la topologie du réseau ne seront pas détaillés dans ce MOOC.
Routage d'un paquet au niveau d'un équipement
Cette section décrit les mécanismes permettant à un équipement de retransmettre un paquet vers sa destination afin d'effectuer la fonction de routage. Lorsqu'un paquet IP arrive sur un équipement et que l'adresse destination de ce paquet ne concerne aucune interface de cet équipement, celui-ci doit le retransmettre si la fonction de routage est activée.
Plusieurs cas sont alors possibles :
- La destination est sur un des réseaux sur lequel l'équipement est directement connecté. Le paquet doit alors être retransmis vers la destination.
- La destination n'est sur aucun des réseaux directement connectés, mais sur un réseau connecté à un autre équipement. Le paquet doit alors être retransmis vers cet autre équipement qui prendra en charge le routage du paquet.
- La destination est inconnue. L'équipement ne peut décider vers où le paquet doit être retransmis. Le paquet doit donc être éliminé et un message d'erreur ICMP (ICMPv4 ou ICMPv6 selon la version du protocole IP utilisé) sera retransmis vers la source du paquet pour lui indiquer le problème de routage.
La détermination du cas approprié se fait à partir des informations connues par l'équipement contenues dans sa table de routage.
La table de routage
La table de routage d'un équipement contient la liste des réseaux accessibles depuis l'équipement. À chacun de ces réseaux est associé le prochain saut (Next Hop) pour atteindre ce réseau depuis l'équipement ; information qui va servir à la retransmission du paquet.
Parmi les réseaux connus dans la table de routage, on retrouve les réseaux directement connectés à l'équipement ; c'est-à-dire que l'équipement possède une interface connectée sur l'un de ces réseaux. Lorsque l'interface de l'équipement est configurée sur un réseau, elle obtient une adresse IPv6 à laquelle s'ajoute la longueur du préfixe ; c'est-à-dire le nombre de bits communs aux adresses de toutes les interfaces connectées au même réseau. À la table de routage IPv6 s'ajoute alors automatiquement le préfixe du réseau connecté, défini par les bits communs de l'adresse. Le prochain saut pour ce réseau est alors défini par l'identifiant de l'interface connectée à ce réseau. Cela signifie à l'équipement que les paquets destinés à ce réseau doivent être envoyés sur cette interface.
Voici un exemple de configuration d'une interface réseau et l'entrée correspondante dans la table de routage sur un système Linux. Notez bien la correspondance entre le préfixe de l'adresse de l'interface eth0 et l'entrée correspondante dans la table de routage.
$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 00:18:73:68:21:20 inet6 addr: 2001:db8:1:1:218:73ff:fe68:2120/64 Scope:Global inet6 addr: fe80::218:73ff:fe68:2120/64 Scope:Link (...) $ netstat -rn -A inet6 Kernel IPv6 routing table Destination Next Hop Flag Met Ref Use If 2001:db8:1:1::/64 :: UAe 256 0345733 eth0 (...) $ ip -6 route 2001:db8:1:1::/64 dev eth0 proto kernel metric 256 expires 2592155sec mtu 1500 advmss 1440 hoplimit 0 (...)
La table de routage peut aussi comporter des préfixes de réseaux auxquels l'équipement n'est pas directement connecté. Ces préfixes peuvent être statiquement configurés par l'administrateur réseau ou alors, appris dynamiquement à travers des protocoles de routage. Ces préfixes peuvent être spécifiques à un réseau local (généralement de longueur 64 bits) mais peuvent être plus larges pour désigner un ensemble de réseaux. Le prochain saut est alors configuré avec l'adresse d'un équipement qui va prendre en charge la suite du routage du paquet.
L'exemple suivant montre une table de routage d'un équipement routeur VyOS comportant un préfixe plus large que celui connecté sur son interface. Notez que l'adresse du prochain saut est une adresse lien-local ; ce qui signifie que l'équipement vers lequel transmettre le paquet est sur le réseau connecté à l'interface eth0.
vyos(config)# do show ipv6 route C>* 2001:db8:1:1::/64 is directly connected, eth0 S>* 2001:db8:1::/48 [110/1] via fe80::290:bff:fe1e:c4fe, eth0, 1d09h16m
Un dernier type d'entrée de la table de routage permet à l'équipement de retransmettre les paquets pour tous les réseaux qu'il ne connait pas, évitant ainsi de les éliminer parce qu'il n'a pas une connaissance suffisante du réseau. Cette entrée s'appelle la route par défaut. Le préfixe utilisé pour désigner ainsi tous les réseaux ne doit comporter aucun bit spécifié. En IPv6, ce préfixe se note ::/0 ; la longueur du préfixe à 0 signifiant bien qu'aucun bit n'est spécifié comme commun. La route par défaut possède comme prochain saut l'adresse de l'équipement qui prendra en charge le routage des paquets vers les réseaux non connus localement. Cet équipement est communément appelé passerelle par défaut. Dans un réseau local domestique, par exemple, la passerelle par défaut des hôtes, comme un ordinateur portable, est généralement le boitier de l'opérateur, car c'est lui qui sait comment joindre des différents réseaux de l'Internet.
L'exemple suivant montre l'entrée correspondant à la route par défaut d'un équipement sous Windows 7 avec l'outil en ligne de commande netsh.
netsh> interface ipv6 netsh interface ipv6> show routes Recherche du statut actif... Type Mét Préfixe Idx Nom passerelle/interface -------- --- ------------------------ --- ------------------------ Auto 8 2001:db8:1:1::/64 4 Connexion au réseau local 4 Auto 256 ::/0 4 fe80::290:bff:fe1e:c4fe
Le test d'adjacence
Le test d’adjacence permet de vérifier si le destinataire partage un même réseau qui est accessible directement en utilisant les interfaces directement connectées :
- Pour cela, la machine va comparer le préfixe de la destination avec les préfixes des réseaux directement connectés. En cas d'égalité, la machine peut réaliser un routage direct. Le dispositif ICMPv6 découverte des voisins va permettre aux machines connectées sur le même réseau de se découvrir les unes les autres et de déterminer l'adresse physique d'un équipement à partir de son adresse IPv6. (Plus de détails sur cette fonction en Séquence n°3).
- Dans le cas présenté Figure 1, les deux postes A et B peuvent directement communiquer car ils sont connectés sur le même réseau à l’aide d’un commutateur qui relaie de manière transparente les trames au niveau 2. Le préfixe IPv6 2001:db8:0001::/64 est paramétré sur chaque machine. Donc, les échanges sont possibles directement.
Dans le cas contraire, un routage indirect s’impose. La machine doit confier les paquets vers cette destination à une autre machine qui s’occupera de leur acheminement. C’est le principe du routage indirect. Dans le cas présenté Figure 2, le poste A peut atteindre les deux postes B et C. Par contre, B et C ne peuvent pas directement communiquer car ils sont connectés sur des réseaux avec des préfixes IPv6 différents :
- Donc, dans la table de routage de B, il faudra introduire une entrée vers le préfixe distant 2001:db8:0002::/64 en précisant l’adresse de A, 2001:db8:0001::1/64, qui, elle, est directement accessible par B (cf. Figure 3). Les paquets émis depuis B vers C seront dès lors retransmis.
- Ensuite, il conviendra de ne pas omettre la même opération dans la table de routage de C ; sans quoi, aucune réponse vers B ne sera possible. Il faudra introduire une entrée vers le préfixe distant 2001:db8:0001::/64 en précisant l’adresse de A, 2001:db8:0002::1/64, qui, elle, est directement accessible par C (cf. Figure 3). Les paquets émis depuis C vers B seront dès lors retransmis par A.
Entrées d'une table de routage statique
La constitution d’une table de routage statique impose une configuration manuelle afin de déterminer vers quelle passerelle l’équipement pourra se délester des paquets des destinations non directement connectées.
- Cas simple : une passerelle par défaut est spécifiée et tous les paquets qui visent des destinations externes lui seront retransmis. En quelque sorte, on fait confiance aux capacités et à la connectivité de cette passerelle. Une entrée de ce type est visible dans la table de routage de l’équipement. L'exemple de la figure 4 montre comment configurer une route statique par défaut sur un routeur IPv6 :
- Sur les postes de travail, il est donc simple de confier tous les paquets à destination de réseaux distants, à la passerelle par défaut représentée par le routeur connecté à un fournisseur d’accès à Internet. Une simple route par défaut est ajoutée à chaque poste de travail (cf. Figure 5).
- Des routes spécifiques peuvent être définies dès lors que l’on dispose d’une connectivité bien adaptée pour certains préfixes. Dans ce cas, une configuration manuelle de la table de routage est nécessaire.
- Les routes les plus spécifiques, c’est-à-dire celles avec un long préfixe, seront traitées en premier ; puis, les routes moins spécifiques ; et enfin, la route par défaut en dernier ressort.
Pour aller plus loin : Le routage dynamique
Comme dans IPv4, il faut faire la distinction entre deux grandes familles de protocoles de routage : les protocoles de routage interne (IGP : Interior Gateway Protocols') et externe (EGP : Exterior Gateway Protocols). C'est la notion de système autonome qui permet de faire la différence, en définissant la portée des échanges d'informations de routage effectués par ces protocoles de routage. Ainsi, la propagation des préfixes internes à un AS se fait par un IGP, alors que les annonces de préfixes entre AS se fait par un EGP.
Pour connecter un site à l'Internet, il faut donc mettre oeuvre des protocoles de routage interne et des protocoles de routage externe. Ce chapitre traite des trois protocoles IGP suivants : RIPng (équivalent de RIPv2 pour IPv4), ISIS et OSPFv3 (équivalent d’OSPFv2 pour IPv4), ainsi que du protocole de routage externe BGP.
Les protocoles de routage interne permettent une configuration automatique des tables de routage des routeurs à l'intérieur d'un même système autonome. Les routeurs déterminent le plus court chemin pour atteindre un réseau distant. Les protocoles de routage internes nécessitent une configuration minimale du routeur, notamment en ce qui concerne les annonces de routes initiées par ce routeur (ex. : réseaux directement accessibles par une interface du routeur, annonces statiques...).
Deux types de protocoles de routage interne existent : les protocoles à état de lien (link state) et les protocoles à vecteur de distance (distance vector). Les premiers calculent le chemin le plus court en comptant le nombre de sauts pour atteindre le préfixe de destination, tandis que les seconds attribuent un coût à chaque lien en fonction de divers paramètres (type du lien...).
RIPng ou RIP IPv6
Les algorithmes appelés distance vector sont utilisés par le protocole de routage RIPv2 (RFC 2453). Ils sont basés sur l'algorithme de Bellman-Ford et figurent parmi les premiers algorithmes de routage interne utilisés dans l'Internet.
Les routeurs diffusent leurs tables de routage sur les liens auxquels ils sont connectés. Les autres routeurs modifient une route dans leur table si la métrique (le nombre de routeurs à traverser pour atteindre une destination) reçue est plus petite que celle déjà stockée dans la table. Si une annonce de route n'est pas présente dans la table, le routeur la rajoute. Ces modifications sont à leur tour diffusées sur les autres réseaux auxquels sont connectés les routeurs. Elles se propagent donc sur l'ensemble du réseau à l'intérieur du système autonome. On montre que cet algorithme converge et, qu'en condition stable, aucune boucle n'est créée sur le réseau ; c'est-à-dire qu'un paquet ne sera pas transmis indéfiniment de routeur en routeur sans jamais pouvoir atteindre sa destination.
Les tables sont émises périodiquement. Si un routeur tombe en panne, ou si le lien est coupé, les autres routeurs ne recevant plus l'information suppriment l'entrée correspondante de leur table de routage. RIPng est le premier protocole de routage dynamique proposé pour IPv6 (RFC 2080). RIPng est une simple extension à IPv6 du protocole RIPv2 d'IPv4. Il en hérite les mêmes limitations d'utilisation (maximum de 15 sauts par exemple).
ISIS
IS-IS (Intermediate System to Intermediate System) est un protocole de routage interne à état de lien. Il a été standardisé par l'ISO (ISO 10589). C'est un protocole de niveau 3 (contrairement à OSPF et RIP qui sont de niveau 4) qui s'appuie sur une couche 2 de type Ethernet 802.2. Cet élément mérite d'être signalé car cela rend ce protocole indépendant d'IP, que ce soit IPv4 ou IPv6. Ce protocole travaille sur deux niveaux de hiérarchie : les aires (niveau 1) et le backbone (niveau 2).
Un routeur IS-IS peut être :
- level-1 (routage intra aire),
- level-2 (routage inter aire),
- ou level-1-2 (routage intra et inter aire).
Un routeur de niveau 1 n'a de voisins que dans son aire alors qu'un routeur de niveau 2 peut avoir des voisins dans une autre aire. Il n'y a pas d'aire de backbone (contrairement à OSPF). Le backbone est constitué de la réunion de tous les routeurs de level-2. Sur un réseau de type LAN, il y a élection d'un routeur désigné (DIS) qui a la charge de produire les annonces.
Afin de construire sa topologie, IS-IS utilise 3 types de messages :
- les messages HELLO permettant de construire les adjacences ;
- les messages LSP (Link State Protocol) permettant d'échanger les informations sur l'état des liens ;
- les messages SNP (Sequence Number Packet) permettant de confirmer la topologie.
Pour élaborer ces messages, IS-IS se base sur l'utilisation d'éléments d'informations indépendants appelés TLV (Type, Longueur, Valeur). Le message est ainsi constitué d'un en-tête suivi d'une liste de TLV. Chaque TLV véhicule une information propre, et est donc standardisée. L'exemple ci-dessous montre une TLV Protocoles supportés faisant partie d'un message HELLO, informant les voisins des protocoles supportés par l'émetteur du paquet :
- 0x81 0x02 0xcc 0x8e
- Le premier octet donne le type de la TLV. Il s'agit ici du type 0x81, c'est-à-dire Protocoles supportés.
- Le second octet donne la longueur en octets de la TLV : ici, les deux octets qui suivent.
- Les autres octets composent la valeur de la TLV. Ici, nous avons deux octets indiquant des numéros de protocoles supportés (NLPID : Network Layer Protocol IDentifier): 0xCC pour IPv4 et 0x8E pour IPv6.
OSPFv3
Le troisième protocole de routage interne, basé sur l'algorithme du plus court chemin, s'appelle OSPF (Open Shortest Path First). Relativement plus difficile à mettre en oeuvre que RIPng, il est beaucoup plus efficace dans les détections et la suppression des boucles dans les phases transitoires. Ce protocole est basé sur plusieurs sous-protocoles, dont un qui permet une inondation fiable du réseau. Les routeurs possèdent alors chacun une copie des configurations de tous les routeurs présents sur le réseau, et peuvent calculer simultanément le plus court chemin pour aller vers l'ensemble des destinations.
Pour réduire la durée des calculs, et surtout pour éviter un recalcul complet des routes à chaque changement de configuration, OSPF offre la possibilité de découper le réseau en aires. Une aire principale appelée backbone relie toutes les autres aires. Les réseaux trouvés dans une aire donnée sont envoyés aux autres aires par les routeurs qui sont en frontière d'aire.
OSPF a été adapté à IPv6 (RFC 2740) ; la version est passée de 2 à 3. La plupart des algorithmes implémentés dans OSPFv2 ont été réutilisés en OSPFv3. Bien évidemment, certains changements ont été nécessaires en vue de l'adaptation aux fonctionnalités d'IPv6.
BGP
BGP4 est le protocole de routage externe actuellement utilisé pour le routage global de l'Internet IPv4 (la version 4, identique pour BGP et IP, est une pure coïncidence)[2]. Compte tenu de sa criticité, ce protocole est l'objet d'évolutions constantes. L'une d'entre elles est le RFC 2858 qui rend BGP4 "multi-protocole" en introduisant la notion de famille d'adresses (ex. IPv4, IPv6, IPX...) et de sous-famille d'adresses (ex. unicast, multicast). Le RFC 2545 précise l'usage des extensions multi-protocoles pour le cas d'IPv6.
L'adaptation multi-protocole de BGP4 est assez simple car elle ne concerne que les trois attributs dont le format dépend de l'adresse, soit :
- NLRI : Network Layer Reachability Information (suite de préfixes) ;
- NEXT_HOP : Adresse IP où il faut router les NLRI ;
- AGGREGATOR : Adresse IP du routeur qui a fait une agrégation de préfixes.
Pour réaliser pratiquement cette adaptation, BGP4+ introduit deux nouveaux attributs :
- MP_REACH_NLRI : Multiprotocol Reachable NLRI,
- MP_UNREACH_NLRI : Multiprotocol Unreachable NLRI,
qui indiquent que l'on annonce des informations de routage autres que les routes unicast IPv4. Ces attributs codent en premier le type de famille et de sous-famille d'adresses, puis les attributs dont le format est spécifique. Les autres attributs (comme le chemin d'AS Autonomous System) sont codés et annoncés sans changement.
Les implémentations du RFC 2858 sont souvent appelées MBGP (pour faire référence à leur capacité de traitement des routes multicast) ou BGP4+ (pour faire référence à leur capacité de traitement de routes IPv6). Pour l'anecdote, le numéro de version du protocole n'a pas été modifié (en BGP5 par exemple) car le passage de BGP3 à BGP4 rappelle trop de souvenirs douloureux à ceux qui l'ont mis en oeuvre. Les numéros d'AS utilisés pour IPv4 servent aussi pour IPv6.
Conclusion
Cette activité vous a présenté le principe de la table de routage. Cet élément essentiel de la pile réseau permet à un équipement de savoir par quelle interface et vers quel autre équipement envoyer un paquet pour qu'il arrive correctement à sa destination. La configuration correcte de la table de routage est donc importante aussi bien sur les routeurs du coeur de réseau comme sur les équipements terminaux.
Cette configuration peut se faire manuellement par l'administrateur du réseau; on parle alors de routage statique. Afin de pouvoir s'adapter à l'évolution du réseau, les tables de routage peuvent être mise à jour par des protocoles de routage dynamique permettant de propager les modifications de la topologie du réseau.
Références bibliographiques
- ↑ Rubino, G. et Toutain, L. (2000). Techniques de l'ingénieur. Routage dans les réseaux Internet
- ↑ Balakrishnan, H. et Feamster, N. (2005), Lecture notes. Interdomain Internet Routing.
Vous pouvez approfondir vos connaissances sur les protocoles de routage en consultant les liens suivants :
RIPng :
- Article dans le livre "IPv6, Théorie et Pratique"
- RFC 2453 : RIP Version 2
- RFC 4822 : RIPv2 Cryptographic Authentication
ISIS :
- Article dans le livre "IPv6, Théorie et Pratique"
- ISO-IEC 8473 Information technology — Protocol for providing the connectionless-mode network service: Protocol specification
OSPF :
- Article dans le livre "IPv6, Théorie et Pratique"
- RFC 5340 : OSPF for IPv6 (Analyse par S.Bortzmeyer)
- RFC 7503 : OSPFv3 Autoconfiguration (Analyse par S.Bortzmeyer)
BGP :
- Article dans le livre "IPv6, Théorie et Pratique"
- RFC 2545 : Use of BGP-4 Multiprotocol Extensions for IPv6 Inter-Domain Routing
- RFC 3849 : IPv6 Address Prefix Reserved for Documentation
- RFC 4760 : Multiprotocol Extensions for BGP-4 (Analyse par S.Bortzmeyer)
- RFC 5963: IPv6 Deployment in Internet Exchange Points (IXPs) (Analyse par S.Bortzmeyer)