I - Architecture traditionnelle Core, Aggregation, Access
9. Qu'est-ce que IS-IS ?
Créé en 1987 et défini dans l'ISO 10589 IS-IS (Intermediate System to Intermediate System), il sera par
la suite standardisé pour TCP/IP en 1990 dans la RCF 1195 actualisé par le RFC-5308 en 2008, dans
l’objectif de prendre en charge l’IPV6 et le concept de double pile.
IS-IS est un protocole de routage dynamique de la famille des IGP (Interior Gateway Protocol), tout
comme OSPF et EIGRP. C'est-à-dire qu’il est utilisé pour le routage à l’intérieur d’une même AS, mais
également pour le routage des très grandes infrastructures réseaux. Ce protocole dispose de
fonctionnalités de routage avancées comme l’intégration au sein d’un MPLS, une vitesse de convergence
élevée et la gestion de la double pile IPV4/IPV6. Il est donc particulièrement efficace et capable de
maintenir une cohérence des tables de routage dans des infrastructures soumises à de fortes
modifications. Il est à noter que IS-IS est également bien souvent plus performant qu’OSPF pour les
infrastructures multi-zones très étendues. Cela en fait un protocole particulièrement apprécié par les
opérateurs internet, mobiles et fournisseurs de services Cloud.
Les zones IS-IS sont une classification hiérarchique dans le routage des très grandes topologies. Elles
permettent de diviser la topologie en sous-ensembles afin d’optimiser la gestion avec une réduction du
trafic de mise à jour, l’augmentation de la vitesse de convergence, sans oublier la réduction de la taille
de la LSDB (concept expliqué plus tard dans ce cours) et de la table de routage. Cela se traduit par un
allégement important de l’utilisation des ressources de calculs. Les routeurs d’une zone forment une
sous-topologie qui limite les informations échangées sur la topologie entre les zones. En l’absence de
nécessité d’un routage inter-zones, les routeurs se contentent de communiquer uniquement au sein de
leur zone.
Il existe deux niveaux de zones :
Zone niveau 1 : Elle ne connaît que l'information topologique interne à la zone, mais également
les préfixes IP internes en vue de ne gérer que le routage interne à cette zone. En cas de routage
inter-zones, le trafic sera routé vers les routeurs niveau 1 et 2.
Zone niveau 2 :Elle relie plusieurs zones entre elles et assure uniquement le routage interzones
afin de constituer une Backbone . Elle n’interagit qu’avec des routeurs de niveau 2.
Les routeurs peuvent donc agir de trois manières différentes :
Routeur niveau 1 : Ces routeurs ont une visibilité uniquement sur la zone interne, les routes
construites sont exclusivement à destination locale. Le trafic à destination d’une autre zone sera
confié à un routeur niveau 1 et 2.
Routeur niveau 2 : Il a la visibilité d'accès à toutes les zones sans en connaître les détails
internes, dans l’objectif de constituer la Backbone . Il effectue uniquement le transit des flux
d’une zone à une autre, sans connaissance du chemin interne à la zone de destination.
Routeur niveau 1 et 2 : Ils sont connectés à des routeurs de niveau 1 et des routeurs de niveau
2, dans l’objectif de jouer le rôle de passerelle de zone. Pour cela, ces routeurs disposent de deux
bases de données distinctes, une par niveau. Cela leur permet de connecter les routeurs niveau
1 d’une zone à une autre.
Les routeurs IS-IS vont passer par les 4 états suivants durant leur mise en fonction :
1. Down : Le protocole de routage est en cours de configuration, aucune adjacence n’est établie.
2. Initializing : Les paquets HELLO sont échangés pour établir des adjacences.
3. Up (ou Two-Way) : La relation d’adjacence bidirectionnelle est établie.
4. Full : Les LSDB sont échangées et synchronisées entre les voisins.
IS-IS est un protocole dit à état de lien , c’est-à-dire qu’il envoie des messages à chaque fois qu’un
changement de topologie se produit. Il utilise l’algorithme de Dijkstra tout comme OSPF, en vue de
choisir la route avec le chemin le plus court en tenant compte de la topologie du réseau. Une fois
configuré, IS-IS va échanger différents messages pour construire et mettre à jour sa topologie. Ces
messages sont les suivants :
HELLO PDU : Ce message périodique est utilisé pour créer et maintenir les relations de voisinage au sein de la topologie IS-IS, tout en vérifiant les paramètres de connectivité. Le message comporte plusieurs informations comme les timer d’actualisation. Il existe trois types de messages HELLO PDU en fonction des types de réseaux :
P2P HELLO PDU : Message HELLO PDU est utilisé spécifiquement sur les relations points à points, qui connectent directement deux routeurs ensemble. C'est le message HELLO PDU le plus courant.
LAN HELLO PDU : Ce message est envoyé en multicast sur le segment réseau qui connecte plus de deux routeurs, cela permet à tous les routeurs de se connaître. Une fois que tous les routeurs se connaissent, ils vont procéder à l’élection du DIS Designated Intermediate System en fonction de la priorité la plus haute, en cas d’égalité l'identifiant de système le plus élevé sera préféré. Le DIS sera responsable de l’envoi des messages Link State PDU, afin de centraliser la LSDB.
Level-1 et Level-2 HELLO : Ces deux types de messages HELLO fonctionnent de la même manière, pour établir et maintenir les relations de voisinage dans leurs zones respectives.
Link State PDU : Les messages LSP contiennent les informations détaillées de la topologie comme l’état des liens, les métriques associées et les informations de routage des réseaux connus du routeur. Ces messages permettent de construire la Link State Database (LSDB) contenant l’intégralité de la topologie réseaux.
Complete Sequence Number PDU : Les messages CSNP sont envoyés périodiquement pour synchroniser la LSDB entre les routeurs.
Partial Sequence Number PDU : Ces messages sont utilisés comme accusés de réception des messages LSP, mais également pour solliciter un message LSP manquant, afin de compléter la LSDB.
Intéressons-nous maintenant à la composition des paquets des différents messages IS-IS :
Le paquet HELLO PDU est composé des éléments suivants :
Intradomain Routeing Protocol Discriminator : Indique sur 1 octet le protocole de routage utilisé, la valeur est 0x83 pour IS-IS.
Length Indicator : Indique sur 1 octet la taille de l’en-tête IS-IS, cela permet de différencier l’en-tête du champ TLV.
Version/Protocol ID Extension : Indique sur 1 octet la version du protocole.
ID Length : Indique sur 1 octet la taille de l’identifiant de l’IS, une valeur à 0 signifie implicitement que la taille aura la valeur par défaut, soit 6 octets.
PDU Type : Indique sur 1 octet le type de paquet, pour les paquets HELLO les valeurs peuvent être :
1 : LAN Hello niveau 1
2 : LAN Hello niveau 2
3 : P2P Hello
17 : P2P Hello (ancien format)
Version : Indique sur 1 octet la version du protocole.
Maximum Area Address(es) : Indique sur 1 octet le nombre maximal d’adresses de zone supporté (la valeur 0 signifie ce champ est ignoré).
Circuit Type : Indique sur 1 octet les niveaux des routeurs traversés, niveau 1, niveau 2 et multi-niveau.
Source ID : Indique sur 6 octets l’ID du routeur émetteur du paquet.
Holding Time : Indique sur 2 octets le temps maximal admissible entre deux paquets, une fois ce temps dépassé la relation de voisinage est abandonnée.
PDU Length : Indique sur 2 octets la longueur totale du paquet HELLO (en-tête et TLV).
Local Circuit ID : Indique sur 1 octet l’identifiant unique de l’interface.
Authentication : Indique la méthode d’authentification des communications du protocole.
Point-to-Point Adjacency State : Indique l’état sur une interface P2P.
Protocols Supported : Indique le ou les protocoles réseaux pris en charge, IPv4 et/ou IPv6.
Area Address(es) : Indique l’ID de la zone à laquelle appartient l’émetteur.
IP Interface Address(es) : Indique l’adresse IPv4 configurée sur l’interface.
IPv6 Interface Address(es) : Indique l’adresse IPv6 configurée sur l’interface.
Le paquet Link State PDU est composé des éléments suivants :
Intradomain Routeing Protocol Discriminator : Indique sur 1 octet le protocole de routage utilisé, la valeur est 0x83 pour IS-IS.
Length Indicator : Indique sur 1 octet la taille de l’en-tête IS-IS, cela permet de différencier l’en-tête du champ TLV.
Version/Protocol ID Extension : Indique sur 1 octet la version du protocole.
ID Length : Indique sur 1 octet la taille de l’identifiant de l’IS, une valeur à 0 signifie implicitement que la taille aura la valeur par défaut, soit 6 octets.
PDU Type : Indique sur 1 octet le type de paquet, pour les paquets LSP les valeurs peuvent être:
5 : LSP niveau 1
6 : LSP niveau 2
Version : Indique sur 1 octet la version du protocole.
Maximum Area Address(es) : Indique sur 1 octet le nombre maximal d’adresses de zone supporté (la valeur “0” signifie que ce champ est ignoré).
PDU Length : Indique sur 2 octets la longueur totale du paquet LSP (en-tête et TLV).
Remaining Lifetime : Indique sur 8 octets la durée de validité du paquet LSP.
LSP ID : Indique sur 2 octets l’identifiant unique du paquet LSP, qui est constitué de l’ID du routeur émetteur et du l’ID de l’instance LSP.
Sequence Number : Indique sur 4 octets un ID unique, permettant de déterminer le LSP le plus récent.
Checksum : Champ de contrôle d’intégrité.
Attachment : Indique si le routeur émetteur est connecté à plusieurs zones.
Overload : Indique si le routeur émetteur est surchargé.
Type of Intermediate System : Indique le type du routeur émetteur.
Authentication : Indique la méthode d’authentification des communications du protocole.
Area Address : Indique l’ID de la zone à laquelle appartient l’émetteur.
Protocols Supported : Indique le ou les protocoles réseaux pris en charge, IPv4 et/ou IPv6.
Hostname : Indique le nom du routeur émetteur.
Extended IS Reachability : Indique la liste des voisins IS-IS atteignables via le routeur émetteur.
IP Interface Address(es) : Indique l’adresse IPv4 de l’interface du routeur émetteur.
Extended IP Reachability : Indique les réseaux IPv4 joignables via le routeur émetteur.
IPv6 Interface Address(es) : Indique l’adresse IPv6 de l’interface du routeur émetteur.
IPv6 Reachability : Indique les réseaux IPv6 joignables via le routeur émetteur.
Le paquet Complete Sequence Number PDU est composé des éléments suivants :
Intradomain Routeing Protocol Discriminator : Indique sur 1 octet le protocole de routage utilisé, la valeur est 0x83 pour IS-IS.
Length Indicator : Indique sur 1 octet la taille de l’en-tête IS-IS, cela permet de différencier l’en-tête du champ TLV.
Version/Protocol ID Extension : Indique sur 1 octet la version du protocole.
ID Length : Indique sur 1 octet la taille de l’identifiant de l’IS, une valeur à 0 signifie implicitement que la taille aura la valeur par défaut, soit 6 octets.
PDU Type : Indique sur 1 octet le type de paquet, pour les paquets CNSP les valeurs peuvent être :
7 :CSNP niveau 1
8 :CSNP niveau 2
Version :Indique sur 1 octet la version du protocole.
Maximum Area Address(es) : Indique sur 1 octet le nombre maximal d’adresses de zone supporté (la valeur 0 signifie que ce champ est ignoré).
PDU Length : Indique sur 2 octets la longueur totale du paquet CNSP (en-tête et TLV).
Source ID : Indique sur 6 octets l’ID du routeur émetteur du paquet.
Start LSP ID : Indique sur 6 octets l’identifiant unique du premier Link State de la plage synchronisée.
End LSP ID : Indique sur 6 octets l’identifiant unique du dernier Link State de la plage synchronisée.
Authentication : Indique la méthode d’authentification des communications du protocole.
LSP Entries : Indique la liste de chaque paquet Link State accompagnée des différentes valeurs : LSP ID (sur 6 octets), Sequence Number (sur 4 octets), Lifetime (sur 2 octets) et Checksum (sur 2 octets).
Le paquet Partial Sequence Number PDU est composé des éléments suivants :
Intradomain Routeing Protocol Discriminator : Indique sur 1 octet le protocole de routage utilisé, la valeur est 0x83 pour IS-IS.
Length Indicator : Indique sur 1 octet la taille de l’en-tête IS-IS, cela permet de différencier l’en-tête du champ TLV.
Version/Protocol ID Extension : Indique sur 1 octet la version du protocole.
ID Length : Indique sur 1 octet la taille de l’identifiant de l’IS, une valeur à 0 signifie implicitement que la taille aura la valeur par défaut, soit 6 octets.
PDU Type : Indique sur 1 octet le type de paquet, pour les paquets PSNP les valeurs peuvent être :
9 : PSNP niveau 1
10 : PSNP niveau 2
Version : Indique sur 1 octet la version du protocole.
Maximum Area Address(es) : Indique sur 1 octet le nombre maximal d’adresses de zone supporté (la valeur 0 signifie que ce champ est ignoré).
PDU Length : Indique sur 2 octets la longueur totale du paquet PNSP (en-tête et TLV).
Source ID : Indique sur 6 octets l’ID du routeur émetteur du paquet.
Authentication : Indique la méthode d’authentification des communications du protocole.
LSP Entries : Indique la liste de chaque paquet Link State accompagnée des différentes valeurs : LSP ID (sur 6 octets), Sequence Number (sur 4 octets), Lifetime (sur 2 octets) et Checksum (sur 2 octets).
Ces messages nous assurent de maintenir une LSDB à jour, qui à travers l’algorithme SPF, détermine
les routes les plus courtes pour chaque destination en partant des routeurs. Bien que chaque routeur
calcule ses routes de manière indépendante, la synchronisation périodique de la LSDB garantit leur
cohérence.
Maintenant que la LSDB est constituée, le routeur doit procéder à la sélection des routes de la manière suivante :
1. Hiérarchie des niveaux : La route annoncée par un routeur de niveau 1 sera préférée à la route annoncée par un routeur de niveau 2.
2. Métrique : Le second critère de sélection est le coût du chemin le plus faible. Le coup du chemin est incrémenté avec la métrique de chacune des interfaces traversées. A noter que la métrique d’une interface est par défaut égale à 10, cependant elle peut être personnalisée par l’administrateur.
3. Route de secours : En cas d’égalité entre deux routes, un équilibrage de charge natif sera effectué par le protocole de routage.
4. Routes externes : Les routes internes IS-IS sont préférées aux routes externes provenant d’un autre protocole. A noter qu’il existe deux types de routes externes :
E1 : Route incluant la métrique du protocole de routage externe, mais également la métrique interne à IS-IS.
E2 : Ne tient compte que de la métrique du protocole de routage externe.
5. Tiebreakers : Si toutes les valeurs précédentes sont identiques, l’IP de l’interface de sortie et l’ID du routeur peuvent être utilisés pour départager deux routes.
En tant qu’IGP, IS-IS est moins exposé aux attaques que les EGP, cependant sa sécurisation reste
indispensable. Pour cela, il est possible d’intégrer des sécurités pour empêcher l’injection de routes
malveillantes.
La première sécurité pouvant être implémentée, est l’authentification des messages IS-IS afin
d’empêcher l’injection de routes malveillantes. Cette authentification peut être assurée par divers
moyens :
L’authentification par mot de passe en clair est la méthode d’authentification la plus facile à mettre en oeuvre mais considérée comme obsolète de nos jours.
L’authentification par hachage MD5, qui repose sur un hachage des messages basé sur une clé préalablement pré-partagée.
L’authentification par hachage SHA256 (voir SHA512 si compatible) ; ces niveaux de hachage ne sont généralement pas nativement pris en charge directement dans IS-IS. Cependant, un moyen détourné de mise en oeuvre existe qui consiste en la génération préalable d’une clé hachée en SHA256, avant de la configurer comme clé d’authentification au sein ISIS.
Ces authentifications simples à mettre en oeuvre présentent des limites. Notamment le fait que le hachage
en MD5 est de nos jours facilement réversible, mais également qu'en cas de fuite du mot passe, tous les
routeurs de la topologie seront exposés. L'authentification via SHA256 est considérée comme
acceptable.
TTL Security Check, consiste à limiter le nombre de sauts acceptables afin de réduire le risque
d’injection de paquets en provenance d’un routeur extérieur aux réseaux légitimes. Bien que cette
méthode puisse être efficace, elle présente des limites dues à la complexité en cas d’extension du réseau,
le TTL devra être reconfiguré sur tous les routeurs. De plus, cette méthode ne doit pas être utilisée seule,
mais en complément d’une authentification des messages IS-IS.
L’implémentation d’IS-IS au sein d’un tunnel IPSEC au-delà d’une authentification forte, permet de
chiffrer les paquets au niveau de la couche transport. Cette méthode de sécurisation bien que très lourde
à mettre en oeuvre permet de se prémunir de bon nombre d’attaques, comme la reconnaissance,
l’injection de données erronées, etc...
IS-IS peut être implémenté à différents niveaux dans l’architecture à trois couches. L’utilisation, la plus
courante, est l’interconnexion de la couche Aggregation et Core dans les infrastructures utilisant
la double pile IPV4 et IPV6 ou nécessitant une grande vitesse de convergence. Dans le cadre d’un
fournisseur de service Cloud multi-sites, IS-IS peut être utilisé pour l'interconnexion des différentes
couches Core des sites via la mise en place d’un MPLS.
Au sein de l’architecture que nous mettrons en oeuvre durant les travaux pratiques de ce cours, nous
utiliserons IS-IS pour l’interconnexion de la couche Aggregation et Core afin de bénéficier de la
vitesse de convergence. IS-IS nous permettra également de profiter de la double pile IPv4/IPv6. Nous
procéderons également à l’implémentation d’une authentification par hachage SHA256.