Les fonctionnalités de Linux Bridge sur Proxmox VE

Découvrons Linux Bridge, le SDN par défaut de Proxmox VE.

Les fonctionnalités de Linux Bridge sur Proxmox VE
proxmox proxmoxve pve linux bridge bond

Au sommaire :

  • 1-Prérequis
  • 2-Qu'est-ce que Linux Bridge ?
  • 3-Qu'est-ce qu'un vNIC ?
  • 4-Qu'est qu'un VLAN ?
  • 5-Le VLAN-aware
  • 6-Le pont + VLAN
  • 7-Le pont sans VLAN
  • 8-Agréger avec Linux Bond
  • 9-Présentation des modes
  • 10-Linux Bond + VLAN-Aware
  • 11-Linux Bond + Pont + VLAN
  • 12-Linux Bond + Pont sans VLAN

1-Prérequis

Préparez une machine virtuelle Proxmox VE à des fins de test, cela vous évitera de devoir toucher à votre serveur physique qui pour la plupart n'ont qu'un seul port ethernet physique.

Avec une machine virtuelle, vous allez pouvoir ajouter autant d'interfaces virtuelles que vous le souhaité.

2-Qu'est-ce que Linux Bridge ?

Linux Bridge est un SDN (Software Defined Network) qui permet de créer comme son nom l'indique des ponts (Linux Bridge), des réseaux virtuels (Linux VLAN) ainsi que d'agréger des interfaces réseaux (Linux Bond).

C'est ni plus, ni moins qu'un switch virtuel et c'est l'un des plus utilisés avec OVS (Open vSwitch) ainsi que le plus simple à mettre en place (par défaut sur PVE).

Un pont Linux Bridge permet de connecter le réseau virtuel de Proxmox VE au réseau local physique, comme un pont qui relierait deux rives dans la vrais vie (c'est beau, je le note).

Lorsque vous installer PVE pour la première fois, ce dernier va créer le pont "vmbr0" en utilisant le port réseau par défaut.

Si vous regardez la configuration du pont "vmbr0", vous pouvez observer 3 éléments :

  • IPV4/CIDR : l'adresse IP est celle de l'interface d'administration web,
  • Gateway (IPv4) : la passerelle de votre réseau local,
  • Bridge ports : le ou les ports réseaux utilisé par le pont (ens18),

Voici quelques points à retenir :

  • 4094 ponts par nœud maximum (vous avez de la marge).
  • Lorsque la configuration d'un pont est configuré sur l'ensemble des nœuds d'un cluster (par exemple, vmbr1 sur un cluster à 3 nœuds), cela permet la migration en direct sans interruption de la connectivité réseau.
  • Un pont par port physique (impossible d'en créer plusieurs par port physique).
  • Un pont par port physique avec passerelle sinon voici le message d'erreur qui indique que le pont "vmbr0" en a déjà une de configuré (voir capture ci-dessous).

Dans un cas concret, vous avez ajouter une carte dual NIC gigabit ethernet. Vous souhaitez que vos machines virtuelles puissent accéder au réseau local à partir de cette carte. Donc vous allez créer un pont pour chaque port (ens19 et ens20).

Vous allez pouvoir ajouter comme interface réseau à vos machines virtuelles soit celui par défaut (vmbr0), soit les deux interfaces réseaux de la carte dual NIC (vmbr1 et vmbr2).

Nous allons voir également avant d'aller plus loin :

  • Qu'est-ce qu'un vNIC ?
  • Qu'est-ce qu'un VLAN ?

3-Qu'est-ce qu'un vNIC ?

Un vNIC (Virtual Network Interface Cards) est une interface réseau virtuelle qu'on trouve communément dans les machines virtuelles. Pour en ajouter une dans Proxmox VE, il suffit simplement d'aller dans Hardware/Add/Network Device.

Il peut-être connecté et déconnecté sans redémarrage si la fonction hotplug est activé dans la machine virtuelle (activé par défaut).

Pour votre culture personnelle, il existe quatre modèles de vNIC :

  • Intel e1000,
  • Realtek RTL8139,
  • VMware vmxnet3,
  • VirtIO,

Intel e1000 et Realtek RTL8139 sont des modèles émulés avec des performances moindres mais une compatibilité plus large souvent utilisé pour les machines virtuelles Windows en virtualisation complète (full virtualization).

VMware vmxnet3 est utilisé lorsqu'on a une machine virtuelle au format .vmdk avec les open-vm-tools d'installés.

Enfin, les pilotes de para-virtualisation VirtIO (Virtual Input Output) conçu par Red Hat sont ceux qui propose les meilleures performances. Ils sont installés d'office sur les distributions Linux et BSD mais nécessite une installation manuelle sur Windows.

4-Qu'est-ce qu'un VLAN ?

Un VLAN est un réseau local virtuel (Virtual Local Area Network), une représentation "logique" d'un réseau traditionnel, une abstraction comme peut l'être la virtualisation. Elle est définie par la norme IEEE 802.1Q.

Cette norme permet en modifiant la trame Ethernet au niveau de la couche de niveau 2 de transporter plusieurs réseaux logiques (VLAN) au sein d'un même lien physique qu'on appelle dans le jargon le trunk.

Cela permet de séparer les flux, de segmenter le réseau (réduire la taille d'un domaine de diffusion "Broadcast") et d'améliorer la sécurité.

La norme 802.1Q permet de créer jusqu'à 4094 VLANs simultanément tandis que le VXLAN (VLAN au niveau d'un centre de données) permet quant à lui de créer jusqu'à 16 millions de VLAN.

Maintenant que vous savez ce qu'est un VLAN, il faut savoir qu'il y a 3 manière d'en créer un sur PVE.

5-Le VLAN-aware

Plus récent, le VLAN-aware permet de faire circuler plusieurs VLANs au sein d'un pont. C'est également la méthode utilisé dans OVS (Open vSwitch) qui est utilisé dans toute les solutions de virtualisation (KVM, Xen, Hyper-V, ESXi) donc autant dire que c'est la norme en production.

C'est très utile car au sein d'un centre de données, vous aurez à gérer des centaines voir des milliers de VLANs donc l'administration en sera d'autant plus simplifié.

L'inconvénient c'est qu'on perd en isolation et qu'à la moindre erreur de configuration, c'est l'ensemble des VLANs qui seront inaccessibles.....

À manipuler avec précautions en production si vous voulez pas finir

Pour faire du VLAN-aware :

  • Ajoutez un vNIC sur votre machine virtuelle Proxmox VE,
  • Vous verrez une nouvelle interface réseau apparaître sous le nom "ens19"
  • Créez un pont et donnez lui un nom, le port de l'interface (ens19 dans l'exemple) et surtout, cochez la case "VLAN aware".

Cliquez sur "Apply Configuration"

Cela donne ceci via le CLI.

auto vmbr1
iface vmbr1 inet manual
        bridge-ports ens19
        bridge-stp off
        bridge-fd 0
        bridge-vlan-aware yes
        bridge-vids 2-4094

Détaillons les options suivantes :

  • bridge-ports : le port utilisé (ens19),
  • bridge-stp (Spanning Tree Protocol) : permet d'activer ou non la découverte de ponts pour éviter les boucles, ce qui permet de fournir un meilleur routage mais peut poser des problèmes de sécurité si un ou plusieurs ponts sont isolés du réseau donc il est désactivé par défaut,
  • bridge-fd (forwarding delay) : définit le délai avant que l'interface ne soit prête (0 par défaut),
  • bridge-vlan-aware : active ou non la fonction (yes ou no),
  • bridge-vids : indique la plage de vlans autorisés (de 1 à 4094 si vous le souhaitez),

Pour cette dernière option, commencez par définit une plage de 5 VLANs (1-5).

Voilà le résultat final.

auto vmbr1
iface vmbr1 inet manual
        bridge-ports ens19
        bridge-stp off
        bridge-fd 0
        bridge-vlan-aware yes
        bridge-vids 1-5

Mettez à jour via le CLI ou le GUI en cliquant sur "Apply Configuration".

Ou bien avec la commande "ifup + le nom du pont".

ifup vmbr1

Pour en savoir plus sur le VLAN-aware :

VLAN-aware Bridge Mode | Cumulus Linux 4.2

Maintenant au pont + VLAN.

6-Le pont + VLAN

C'était l'ancienne méthode. En comparaison du VLAN-aware, vous obtiendrez une meilleure isolation car en cas de mauvaise configuration, seul le VLAN concerné sera impacté et pas l'ensemble des VLANs.

L'inconvénient c'est que c'est extrêmement compliqué à gérer dans des centres de données contenant des centaines voir des milliers de serveurs. N'oubliez pas, vous pouvez créer 4094 ponts Linux Bridge par nœud et si un de ces ponts saute, bonne chance pour le trouver du premier coup (ce sera un peu plus long qu'avec le VLAN-aware).

Pour créer une combinaison pont+VLAN :

  • Créez un VLAN que vous nommerez "vlan11" en choisissant votre interface réseau (ens19),
  • Supprimez le pont précédent,
  • Puis créez un nouveau pont que vous nommerez "vmbr11" qui se basera sur la configuration du "vlan11" (ne pas cocher la case "VLAN aware" bien sûr),
  • Cliquez sur "Apply Configuration"

Et le tour est joué!!! Voici la configuration à ajouter en CLI dans le fichier /etc/network/interfaces.

auto vmbr11
iface vmbr11 inet manual
        bridge-ports vlan11
        bridge-stp off
        bridge-fd 0

auto vlan11
iface vlan11 inet manual
        vlan-raw-device ens19

Pour en savoir plus sur les ponts dis "Traditional Bridge Mode" :

Traditional Bridge Mode | Cumulus Linux 4.2

7-Le pont sans VLAN

Cette méthode vous évitera de créer un VLAN à chaque reprise.

Pour en créer un :

  • Supprimez le pont précédent,
  • Créez un pont "vmbr11" (pour vlan11),
  • Indiquez dans l'interface réseau "ens19",
  • Juste après "ens19", ajoutez un point et le numéro du VLAN (ens19.11 pour VLAN 11),

Vous avez crû que c'était terminer ? Grossière erreur!!!!

Vous pouvez utiliser ces 3 méthodes en agrégeant les interfaces réseaux avec Linux Bond.

Après avoir passé en revue Linux Bridge et les 3 façons de gérer les VLANs, nous allons voir plus en détail le bonding et ses différents modes.

8-Agréger avec Linux Bond

Linux Bond permet d'agréger plusieurs interfaces réseaux physiques en utilisant la technique du "bonding".

Les avantages sont nombreux :

  • Aucun SPOF (Single Point of Failure ou Point de Défaillance Unique).
  • Haute disponibilité (High Availability) en cas de défaillance d'une des interfaces réseaux.
  • Augmentation de la bande passante.
  • Équilibrage de charge (Load Balancing).

Il respecte le standard IEEE 802.3ad.

C'est énormément utilisé dans les centres de données où les ralentissements et les coupures de réseau doivent être évité du mieux possible.

9-Présentation des modes

Linux Bond supporte 7 modes au total.

Prenez en compte que les modes les plus utilisés en production selon Wasim Ahmed, auteur du livre "Mastering Proxmox VE" sont :

  • balance-rr.
  • active-backup.
  • LACP (802.3ad).

Faisons un tour d'horizon de ces 7 nuances de G....d’agrégation!!! d'agrégation (je m'égare, je m'égare).

mode 1 : balance-rr (round robin)

La transmission des paquets s'effectue de manière séquentielle de la première interface réseau à la dernière.

Par exemple :

  • Paquet 1 vers le vNIC 1.
  • Paquet 2 vers le vNIC 2.
  • Paquet 3 vers le vNIC 3.

Et ainsi de suite.

Si une interface réseau ne répond pas, elle sera ignoré et les paquets seront transmis à la suivante.

Les avantages sont l'augmentation de la bande passante globale, la tolérance aux pannes et l'équilibrage de charges.

De plus, il ne nécessite aucun switch spécifique.

Le seul inconvénient, c'est la perte de paquets.

mode 2 : active-backup

Une seule interface réseau participante est active. L'interface suivante devient active lorsque l'interface précédente tombe en panne.

Elle permet la tolérance aux pannes mais n'apporte aucun équilibrage de charge.

mode 3 : balance-xor

Ce mode sélectionne la même interface réseau pour chaque adresse MAC de destination.

Exemple : si la VM A (adresse MAC A) souhaite communiqué avec la VM B (adresse MAC B), l’algorithme xor va calculer et déterminer le vNIC de destination définitif de l'adresse MAC A et vice versa.

Ce mode assure à la fois la tolérance aux pannes et l'équilibrage de charge.

mode 4 : broadcast

Le mode "Broadcast" comme son nom l'indique va transmettre les paquets à l'ensemble des interfaces réseaux.

Il apporte donc la tolérance aux pannes au prix d'un traitement plus lourd pour les interfaces réseaux.

Toute les interfaces sont utilisés et partagent les mêmes paramètres de vitesse et de duplex.

Par exemple, si vous avez 4 interfaces réseaux gigabit ethernet, au lieu d'avoir 4 gbit/s en cumulé, vous aurez seulement 1 gbit/s mais de manière plus constante que si vous utilisez une seule interface avec la même vitesse.

Pour que ce mode soit fonctionnel, il nécessite un switch spécifique compatible avec la norme 802.3d ou la fonction LACP.

mode 6 : balance-tlb (Transmit Load balancing)

Les paquets sortants sont distribués selon la charge de chaque interface réseau.

Les paquets entrants sont reçu par l'interface courante.

Il permet à la fois la tolérance aux pannes et l'équilibrage de charge.

mode 7 : balance-alb (Adaptive Transmit Load balancing)

Balance-alb est l'exact inverse de balance-tlb.

Ce sont les paquets entrants qui sont distribués selon la charge de chaque interface réseau

Les paquets sortants sont reçu par l'interface courante.

Idem, il permet à la fois la tolérance aux pannes et l'équilibrage de charge.

Maintenant, voyons comment configurer un VLAN avec Linux Bond.

10-Linux Bond + VLAN-Aware

Pour créer un Linux Bond + VLAN-Aware :

  • Supprimez la configuration précédente,
  • Agréger deux ports réseaux (ens19 et ens20) et nommé le bond "bond0",
  • Supprimez le Linux Bridge précédent,
  • Et enfin, créer un pont "vmbr1" en cochant la case "VLAN-aware" et en indiquant l'agrégation des ports avec "bond0",

11-Linux Bond + Pont + VLAN

Pour créer un Linux Bond + Pont + VLAN :

  • Supprimez la configuration précédente,
  • Ajoutez une deuxième interface réseau à votre machine virtuelle Proxmox VE (ens20),
  • Agréger deux ports réseaux (ens19 et ens20) et nommé le bond "bond0" (on remarque que le mode "balance-rr" est proposé par défaut),
  • Créez un VLAN (VLAN 11) à partir de "bond0",
  • Et enfin, créez un pont "vmbr1" à partir du VLAN 11,

Voici la configuration via le CLI

auto ens19
iface ens19 inet manual

auto ens20
iface ens20 inet manual

auto bond0
iface bond0 inet manual
        bond-slaves ens19 ens20
        bond-miimon 100
        bond-mode balance-rr

auto vmbr1
iface vmbr1 inet manual
        bridge-ports vlan11
        bridge-stp off
        bridge-fd 0

auto vlan11
iface vlan11 inet manual
        vlan-raw-device bond0

Ainsi, lorsque vous indiquerez le Linux Bridge à votre machine virtuelle, nul besoin d'indiquer le VLAN. Le pont se base sur le VLAN 11 qui lui même est basé sur une agrégation de deux ports réseaux (bond0).

12-Linux Bond + pont sans VLAN

Pour créer un Linux Bond + pont sans VLAN :

  • Supprimez la configuration précédente,
  • Agréger deux ports réseaux (ens19 et ens20) et nommé le bond "bond0",
  • Créez un pont "vmbr11" (pour vlan11),
  • Indiquez dans l'interface réseau "bond0",
  • Juste après "bond0", ajoutez un point et le numéro du VLAN (bond0.11 pour VLAN 11),

Si vous avez tout suivi, vous serez "successful", vous serez une histoire de succès comme dirait "the mussels from brussels".

Si vous avez des difficultés, je ne saurait trop vous conseiller réviser en profondeurs vos bases en réseau, d'apprendre par cœur les protocoles et les norme puis lorsque vous serez prêt, validez vos acquis avec une certification comme la CCNA.

En bonus, je vous conseille de visionner cette vidéo de Landry H. Ahouansou qui a de nombreuses vidéos sur PVE à son actif donc abonnez-vous à sa chaîne. Il faut savoir saluer le travail de ses confrères et soutenir leur démarche de partage de la connaissance.