Avant de commencer : la faute d’orthographe dans le titre est volontaire en référence à un fait d’actualité bien connu .. Est ce qu’il y a un rapport ? Aucun !
STP (Spanning Tree Protocol) est un protocole réseau de niveau 2 conçu pour être exécuté sur les commutateurs (switchs) afin de garantir que l’architecture ne présente pas de boucles souvent très nuisible pour le réseau (network loop-free), ce protocole est un standard décrit dans IEEE 802.1D et qui implémente l’algorithme découvert par Radia Perlman (en 1985) qui calcule un arbre sur n’importe quel graphe.
Ce protocole est encore implémenté dans beaucoup de réseaux d’entreprise, son fonctionnement est souvent mal compris et aussi mal configuré : beaucoup d’incidents réseaux auquel j’ai pu assister sont souvent liés à une mauvaise implémentation de ce protocole.
Le troubleshooting aussi de ce protocole n’est pas mission facile : en cas de présence de boucle, il est souvent nécessaire de désactiver des liens afin de la stopper.
Dans cet article, nous allons donner les bonnes pratiques à suivre pour l’implémentation des fonctionnalités avancées qui permettent de mieux sécuriser l’implémentation du protocole spanning-tree, ces fonctionnalités ont été rajouté par les constructeurs pour apporter plus de sécurité et stabilité sur le réseau.
Ces bonnes pratiques s’appliquent sur les réseaux de sites (ex campus) ainsi que sur les réseaux Datacenter (DC), elles sont résumées dans le diagramme ci-après :
Portfast Edge : Cette fonctionnalité permet d’optimiser la convergence réseau d’une interface sur le commutateur par la suppression du spanning-tree forwarding delay, en effet, les paquets TCN (Topology Change Notification) signalant un changement de topologie spanning-tree ne sont pas générés. Par conséquent, cette fonctionnalité doit être implémenté uniquement vers les équipements qui ne participent pas aux échanges Spanning-Tree (ex routeurs, serveurs, Firewalls, ..) : l’interface est immédiatement activée dès réception du signal réseau, cependant elle doit toujours être accompagnée de la fonctionnalité BPDU Guard pour éviter des évènements indésirables (ex réception de paquet de type BPDU).
BPDU Guard : Cette fonctionnalité est implémentée à l’accès sur les interfaces qui raccordent les utilisateurs, elle permet de renforcer la sécurité de l’architecture par l’interdiction de réception de paquets de type BPDU utilisés par le protocole spanning-tree, en cas d’interception d’un flux non conforme, l’interface est désactivée. Le temps d’inactivité peut être défini sur une période de temps donné.
Root Guard : Cette fonctionnalité est souvent implémentée sur les équipements de distribution, elle permet de sécuriser l’élection du ROOT et de se prémunir qu’un autre équipement tiers de l’infrastructure de s’annoncer comme ROOT STP de la topologie spanning-tree. Dans ce cas, en cas de réception de BPDU supérieur, le port est suspendu et passe en état ROOT_INCONSISTANT_STATE jusqu’à ce que l’équipement tiers arrête de s’annoncer comme ROOT.
BPDU Filter : Cette fonctionnalité permet de filtrer l’envoi et la réception de tous les paquets de type BPDU utilisés par le protocole spanning-tree. Elle doit être utilisée avec prudence car elle inhibe le fonctionnement natif du protocole spanning-tree. Elle peut dans certains cas créer des boucles réseau et son usage doit strictement être réservé à certains cas d’architecture.
Uplink Fast : Cette fonctionnalité est implémentée sur les liaisons montantes des équipements d’accès et permet d’accélérer la convergence du protocole Spanning Tree en cas de panne de liaison directe.
Loop Guard : Cette fonctionnalité permet d’empêcher la création de boucles de niveau 2 créés par des liaisons unidirectionnelle (exemple : fibre optique avec TX UP, RX DOWN) : sur ces liaisons, en cas de non réception de BPDU sur un port alternatif (blocked) ou racine (ROOT), le port est suspendu et passe en état LOOP_INCONSISTANT_STATE jusqu’à ce que la liaison soit rétablie.
UDLD (Unidirectional Link Detection) : ce protocole de niveau 2 permet de déterminer l’état physique d’une liaison : des messages sont échangés en multicast (destination mac address 0100.0CCC.CCCC) entre les voisins d’une liaison et permettent de détecter la présence d’un lien unidirectionnel. Dans ce cas, le port est suspendu et un message de log est généré sur l’équipement.
En conclusion, l’implémentation de ces bonnes pratiques est indispensable sur les architectures qui utilisent le protocole spanning-tree, elles permettent d’apporter plus de sécurité et de stabilité à votre réseau et vous éviterons des sueurs froides pour trouver l’origine d’une boucle sur un réseau constitué de plusieurs centaines de switchs (sauf si vous êtes passionnés par les boucles réseaux :)).
Maintenant, il est temps de vous faire participer à cet échange, j’ai deux questions pour vous (votre réponse en commentaire de l’article) :
- Quelle est la différence entre UDLD et Loop Guard ? Faut-il implémenter les deux ?
- Dans quel cas d’architecture doit on utiliser la fonctionnalité BPDU Filter ?
Si vous avez des questions, des remarques ou vous avez besoin d’un complément d’informations, n’hésitez pas à laisser un message en commentaire de la page ou nous contacter directement à l’adresse : contact@mhd-experts.com.
asit
mai 26, 2020Il faut implémenter les deux features STP loopguard et UDLD pour un maximim de protection car elles offrent des protections différentes à des problèmes différents : si les 2 protègent une boucle L2 en cas de lien qui devient unidirectionnel, UDLD ne protège pas en cas de panne/mauvais comportement du protocole STP (alors que loopguard peut couvrir) et loopguard ne protège pas en cas de mauvais câblage from scratch (alors que c’est le cas pour UDLD)
Pierre Paluche
mai 27, 2020Quant à bpdufilter il peut être utilisé sur les portfast interface en compagnie avec bpduguard si l’on veut arrêter l’émission des bpdu vers les endpoint (i.e. non switch) car elle est inutile, le switch arrête d’envoyer les bpdu au bout des 11 bdpu si pas de réception de bpdu sur ce point.
Activer bpdufilter sur un port vers autre chose qu’un portfast est soit jouer bêtement avec le feu, soit expres dans des topologies très spécifiques sans boucle L2 mais avec boucle L1 : par exemple lorsque l’on utilise un même switch pour transporter 2 vlans différents sur la même boucle L1 (avec translation de vlan au milieu par un autre noeud) dans ce cas sans bpdufilter le switch mettra le port en err-disabled car il reçoit des bpdu de vlanID différent que le vlanID du port donc il n’aime pas, ça reste des topologies spécifiques de geeks CCIE qui s’ennuient le dimanche 😂
Oli
juin 4, 2020Merci pour l’article. Vous m’avez éclairé sur le sujet, et je vais pouvoir revoir la sécurité STP de mon infra.
Pouvez-vous préciser la commande Spanning-tree link-type point-to-point ? Faut-il l’utiliser à chaque interconnexion entre switch?
Hicham TAHRI
juin 4, 2020Bonjour,
Par défaut, le spanning tree découvre automatiquement le link-type à partir de l’état de l’interface (la valeur duplex), en full-duplex c’est le mode point-to-point et half-duplex c’est le shared.
La commande spanning-tree link-type se configure sur les liens inter-switch, comme aujourd’hui ces liens sont souvent full-duplex, le mode est point-to-point.
pour répondre à la question, si les switchs appartiennent au même constructeur et que la fonctionnalité est supportée, il est préférable de l’implémenter pour accélérer (un peu) la convergence : dans ce cas, on n’attend pas l’état du duplex de l’interface pour connaitre le mode spanning-tree.