En Linux, les VLAN et les ponts sont des concepts complètement séparés, et les ponts Linux ne sont pas "conscients des VLAN".
Lorsque vous créez une interface VLAN, Linux étiquette/détiquette les paquets sur cette interface avant de les transmettre de/vers l'interface physique sous-jacente ("trunk"). Cependant, vous pouvez toujours utiliser l'interface physique sous-jacente pour envoyer des paquets non étiquetés ("VLAN natif").
Lorsque vous créez un pont, Linux commute les paquets entre les interfaces associées sans se soucier des étiquettes VLAN (ou du manque d'étiquettes) sur les paquets. Si vous attachez une interface trunk à un pont, le pont commute joyeusement les paquets étiquetés VLAN sans se soucier des étiquettes. Lorsque vous activez STP sur un pont, Linux génère des paquets STP non étiquetés et les dépose sur le pont.
Lorsqu'un pont est attaché à une interface physique qui a également des interfaces VLAN associées, ces interfaces VLAN cesseront de voir tout trafic qui n'est pas destiné à l'adresse MAC de l'interface physique. Ce comportement est dû à l'ordre dans lequel le commutage et le marquage VLAN sont traités, et peut être modifié en utilisant ebtables comme décrit à http://blog.rackspace.com/vms-vlans-and-bridges-oh-my-part-2. Cependant, en ce qui concerne l'Arbre de recouvrement, attacher des ponts à la fois à une interface physique et aux interfaces VLAN associées ne fonctionnera correctement que si vous utilisez de toute façon PVST+ (car le blocage de port STP est géré indépendamment pour chaque pont), donc ce n'est pas vraiment pertinent ici.
Mais vous pouvez également créer des interfaces VLAN sur un pont qui transmet des paquets étiquetés VLAN, puis ajouter ces interfaces VLAN à d'autres ponts.
Donc, pour accomplir ce que vous voulez, essayez :
ip link set dev hdlc0 up
ip link set dev hdlc1 up
brctl addbr br_native
brctl addif br_native hdlc0
brctl addif br_native hdlc1
brctl stp br_native on
ip link set dev br_native up
ip link add link br_native name br_native.42 type vlan id 42
ip link set dev br_native.42 up
ip link set dev eth0 up
brctl addbr br_42
brctl addif br_42 br_native.42
brctl addif br_42 eth0
ip link set dev br_42 up
Remarquez que le code de commutation de pont Linux prend en charge nativement uniquement le STP traditionnel 802.1D. Pour ajouter la prise en charge de RSTP et PVST+, utilisez https://github.com/mstpd/mstpd (Certains documents pertinents pour mstpd peuvent également être trouvés sur : https://docs.cumulusnetworks.com/display/DOCS/Spanning+Tree+and+Rapid+Spanning+Tree). Mstpd est également capable de parler MSTP, mais en raison de la manière dont Linux implémente ses FIB, il est actuellement impossible de mapper les topologies MSTP sur les ponts Linux, donc MSTP n'est pas réellement fonctionnel.
Pour répondre à votre deuxième question, je ne crois pas qu'il soit possible (sur un commutateur, pas seulement en utilisant Linux) d'utiliser STP ou RSTP pour diriger chacun des deux VLAN différents sur un seul trunk à travers deux autres troncs. Cela ne peut être accompli qu'en utilisant PVST+ ou MSTP, bien que comme mentionné ci-dessus, MSTP n'est pas supporté sur Linux.
0 votes
Il me semble que vous pouvez trouver de l'inspiration dans ce post: serverfault.com/questions/295652/…