Le VLAN Stacking sur Proxmox VE

Découvrons ensemble le VLAN Stacking ou plus communément appelé QinQ (IEEE 802.1ad) et comment s'en servir sur Proxmox VE.

Le VLAN Stacking sur Proxmox VE
pve proxmox proxmoxve vlan stacking qinq

Au sommaire :

  • 1-Qu'est-ce que le QinQ ?
  • 2-Cas d'utilisation
  • 3-Création des ponts
  • 4-Test d'isolation

1-Qu'est-ce que le QinQ ?

Le QinQ ou Q-in-Q (standardisé IEEE 802.1ad) est un format standard de trame Ethernet mis en place en 2011.

Le QinQ est venu combler les lacunes du IEEE 802.1q (1999) qui permet la propagation de plusieurs VLAN sur un même lien physique (trunk). Il est possible d'en propager jusqu'à 4096 VLAN mais sur des réseaux métropolitains, cette technologie à ses limites.

Contrairement au IEEE 802.1q qui permet de créer un seul tag VLAN, le IEE 802.1ad permet d'insérer plusieurs tags VLAN dans une seule trame Ethernet jusqu'à 4096×4096 soit 16,760,836 de VLAN.

Pourquoi QinQ (Q-in-Q) ? Parce qu'un paquet avec entête 802.1Q est encapsulés dans un autre paquet avec entête 802.1q d'ou le Q-in-Q ou le terme "VLAN Stacking"(empilement de VLANs).

Pour mieux comprendre l'utilité des deux tags :

  • Le premier tag (privé) est le VLAN qui est utilisé dans le Vnet,
  • Le deuxième tag (publique) est le service VLAN (S-VLAN) qui défini la zone,

2-Cas d'utilisation

Le QinQ permet une connexion Ethernet de couche 2 entre deux sites clients. Imaginez qu'un FAI (Orange Pro par exemple) propose à une entreprise un lien de niveau 2 (tunnel QinQ) pour qu'il puisse véhiculer ses VLAN entre deux sites distants (Paris et Lyon).

Le switch dit "PE" (Provider Edge) va ajouter un entête "802.1q" supplémentaire et le FAI va pouvoir le taguer dans un VLAN spécifique (exemple : VLAN publique "1000") dans la limite des 4096 disponible.

À première vue, c'est similaire au VXLAN qui propose un nombre identique de VLAN (16 millions) mais contrairement au QinQ, le VXLAN encapsule les trames de niveau 2 dans des trames UDP de niveau 4, ce qui permet de créer un réseau VXLAN IPv4 dans l'internet publique.

Dans un cadre domestique, soyons clair c'est inutile mais pour en apprendre davantage sur les réseaux et comprendre comment tout ça fonctionne en entreprise, je vous conseille de suivre ce tutoriel.

On va faire simple. Le but est de créer deux zones distinctes avec comme tag VLAN publique "20" et "30" puis d'inclure un tag VLAN privé identique (100) sur chacune des interfaces réseaux pour tester l'isolation entre les zones.

3-Création des ponts

  • Créez deux ponts Linux Bridge que vous nommerez "vmbr20" et "vmbr30",
  • Dans "Bridge ports", indiquez l'interface réseau physique que vous souhaitez utiliser. Pour ma part, j'utilise celle du pont "vmbr0" (eno1) auquel j'ajoute pour l'isolation entre les zones un tag VLAN publique (.20 et .30),

Ensuite, vous allez créer 4 conteneurs LXC:

  • 2 conteneurs (ct1-20-100 et ct2-20-100) avec comme pont "vmbr20" et le tag vlan 100,
  • 2 conteneurs (ct1-30-100 et ct1-30-100) avec comme pont "vmbr30" et le tag vlan 100,

L'avantage c'est que vous pouvez changer l'adresse IP directement dans l'interface web Proxmox VE et c'est plus léger que 4 machines virtuelles.

Puis vous allez indiquer une adresse IP statique pour chaque conteneur :

  • ct1-20-100 : 10.0.1.100/24,
  • ct2-20-100 : 10.0.1.101/24,
  • ct1-30-100 : 10.0.1.102/24
  • ct2-30-100 : 10.0.1.103/24.

4-Test d'isolation

Ping sur le conteneur "ct1-20-100"

Je peut ping le "ct2-20-100" qui se trouve dans la même zone (VLAN publique 20) mais pas les conteneurs "ct2-30-100" et "ct2-30-100" qui ont le même VLAN mais dans une zone différente (VLAN publique 30)

Ping sur le conteneur "ct1-30-100"

Je peux pas ping les conteneurs "ct1-20-100" et "ct2-20-100" qui se trouvent dans une zone différente (VLAN publique 20) malgré un VLAN publique identique mais je peux ping le "ct2-30-100" qui se trouve dans la même zone (VLAN publique 30).

Donc si nous récapitulons, malgré un VLAN privé identique :

  • "ct1-20-100" et "ct2-20-100" peuvent communiqué ensemble mais ne peuvent pas communiqués avec "ct1-30-100" et "ct2-30-100"
  • "ct1-30-100" et "ct2-30-100" peuvent communiqué ensemble mais ne peuvent pas communiqués avec "ct1-20-100" et "ct2-20-100"