Open vSwitch / Debian 11

Mémento 5.11 - Commutateur virtuel

Open vSwitch (OVS) se comportera comme un véritable switch physique en proposant la gestion des adresses MAC tel un switch L2 ainsi que celle des adresses IP pour le routage des paquets IP tel un switch L3.

Le switch virtuel sera, contrairement à une architecture standard, installé sur une VM et non sur le PC hôte de l'hyperviseur VirtualBox.

Le moyen d'approcher l'architecture standard sera de créer un conteneur LXC à l'intérieur de la VM et de connecter celui-ci sur OVS avec une interface réseau virtuelle Veth (Mémento futur).

La gestion possible de VLAN ne sera pas traitée ici.

1 - Construction de la VM depuis VirtualBox

L'utilisation de VirtualBox est considérée acquise.

A défaut, référez-vous aux mémentos suivants :
VirtualBox - Installation
VirtualBox - Mode d’accès réseau par pont

1.1 - Création et configuration

Le PC hôte doit être un PC 64 bits, courant de nos jours.

Téléchargez l'ISO debian-11.x.y-amd64-netinst.iso :
https://cdimage.debian.org/.../current/amd64/iso-cd/

Démarrez ensuite l'application VirtualBox, puis :

Menu Nouvelle de VirtualBox :
- Nom ovs - Type Linux - Version Debian (64-bit)
- Taille de la mémoire > 1024 Mo
- Disque dur > Créer un disque dur virtuel maintenant
- Type de fichier de disque dur > VDI
- Stockage sur disque dur ... > Dynamiquement alloué
- Emplacement du fichier et taille > 12 Go > Créer

La VM est créée dans le panneau gauche de VirtualBox.

Sélectionnez la nouvelle VM, puis :

Menu Configuration de VirtualBox :
- - - Onglet Système
> Carte mère > Ordre d'amorçage > Décochez Disquette
> Carte mère > Fonctions avancées > Cochez IO-APIC
> Processeur > 2 CPU et cochez PAE/NX

- - - Onglet Affichage
> Ecran > Contrôleur graphique > VMSVGA

- - - Onglet Stockage
> Zone Unités de stockage > Sélectionnez Vide
> Zone Attributs > Cliquez sur l'icône CD
> Sélectionnez Choisissez un fichier de disque ...
> Entrez le chemin de l'image ISO Debian > Ouvrir

> OK

Les autres paramètres peuvent rester inchangés.

1.2 - Installation de la distribution Debian

Conseil pratique avant de démarrer la nouvelle VM :
Si le curseur de la souris disparait lors d'un clic dans la fenêtre de la VM, celui-ci peut être récupéré par le PC hôte à l'aide de la touche CTRL située à droite de la barre d'espace du clavier.

Menu Démarrer de VirtualBox :
La VM créée s'exécute.

Sélectionnez Graphical Install et appliquez ce qui suit :
- Language > Français
- Pays (territoire ou région) > France
- Disposition de clavier à utiliser > Français
- Nom de machine > ovs
- Domaine > Laissez le champ vide
- MDP du super utilisateur root > Votre MDP root
- Confirmation du MDP > Votre MDP root
- Nom complet du nouvel utilisateur > Ex: switch
- Identifiant pour le compte utilisateur > switch
- MDP pour le nouvel utilisateur > Votre MDP switch
- Confirmation du MDP > Votre MDP switch
- Méthode de partitionnement > Assisté - utili... entier
- Disque à partitionner > Celui proposé de 12 Go
- Schéma de partitionnement > Tout ... seule partition
- Table des partitions > Terminer le partitionnement ...
- Faut-il appliquer les changements … disques ? > Oui

L'installation de base commence :
- Faut-il analyser d'autres supports ... ? > Non
- Pays du miroir de l'archive Debian > France
- Miroir de l'archive Debian > deb.debian.org
- Mandataire HTTP (lais...) > Laissez vide

L'installation continue :
- Souhaitez-vous participer à l'étude statistique... > Non
- Logiciels à installer
> Décochez environnement de bureau Debian
> Décochez ... GNOME
> Conservez utilitaires usuels du système

L'installation se termine :
- Installer ... de démarrage GRUB sur le secteur ... > Oui
- Périphérique ... programme de démarrage > /dev/sda
- Installation terminée > Continuer (sans retrait du CD)

Le système reboot :
- ovs login : switch
- Password : Votre MDP switch
Si tout est OK, affichage du prompt [switch@ovs:~$]

Capture - Open vSwitch : Premier démarrage de la VM ovs
Connexion de l'utilisateur switch sur la VM ovs

Donnez à présent les droits d'administrateur système à l'utilisateur switch :

[switch@ovs:~$] su root
Mot de passe : Votre MDP root

[root@ovs:~#] apt install sudo
[root@ovs:~#] sudo usermod -aG sudo switch
[root@ovs:~#] sudo reboot

et reconnectez-vous en tant qu'utilisateur switch.

Pour info, la VM peut être arrêtée de 2 façons :

[switch@ovs:~$] sudo poweroff
[switch@ovs:~$] sudo shutdown -h now

2 - Installation et configuration d'Open vSwitch

Au préalable, observez la configuration réseau active :

Capture - VM ovs : Configuration réseau de base
Configuration réseau de base : Interfaces lo et enp0s3

2.1 - Installation

Installez le paquet openvswitch-switch :

[switch@ovs:~$] sudo apt install openvswitch-switch

Les paquets concernant les dépendances manquantes sont ajoutés automatiquement.

Contrôlez maintenant la version d'Open vSwitch (OVS) :

[switch@ovs:~$] sudo ovs-vsctl show 
Capture - Open vSwitch : Affichage de la version
Version Open vSwitch 2.15

et l'intégration de son module dans le noyau linux :

[switch@ovs:~$] sudo modinfo openvswitch 
Capture - Open vSwitch : Informations sur le module noyau openvswitch.ko
Informations sur le module noyau openvswitch.ko

Contrôlez également le bon chargement de celui-ci :

[switch@ovs:~$] lsmod | grep openvswitch
Capture - Open vSwitch : Module noyau openvswitch.ko chargé
Module noyau openvswitch.ko chargé

- - Liste des principaux composants OVS installés - -

- /usr/sbin/ovs-vswitchd :
Le service de commutation (compatible OpenFlow).

- /usr/bin/ovs-appctl :
Dialogue CLI (Command Line Interface) avec le service.

- /usr/bin/ovs-vsctl :
Configuration CLI du service via le serveur de Bdd.

- /usr/sbin/ovsdb-server :
Le serveur de Bdd contenant la configuration du service.

- /usr/bin/ovsdb-client :
Dialogue CLI avec le serveur de Bdd (backup, etc...).

- /usr/bin/ovsdb-tool :
Configuration CLI des fichiers de la Bdd (création, etc...).

- /usr/bin/ovs-dpctl :
Configuration CLI des datapaths du noyau d'OVS.

- /usr/bin/ovs-ofctl :
Configuration CLI de la partie OpenFlow d'OVS.

La Bdd conf.db se situe dans /etc/openvswitch/.
Les logs se situent dans /var/log/openvswitch/.

Contrôlez l'activation du service openvswitch-switch :

[switch@ovs:~$] sudo systemctl status openvswitch-switch
Capture - Open vSwitch : Vue activation du service openvswitch-switch
Service openvswitch-switch activé

ainsi que celle des 2 services suivants :

[switch@ovs:~$] sudo systemctl status ovsdb-server
[switch@ovs:~$] sudo systemctl status ovs-vswitchd

2.2 - Configuration

Commencez par créer un bridge (switch) de nom br0 :

[switch@ovs:~$] sudo ovs-vsctl add-br br0 
[switch@ovs:~$] sudo ovs-vsctl show
Capture - Open vSwitch : Vue création bridge br0
Création du bridge br0

Un port et une interface virtuels de même nom ont été associés au bridge.

Utilisez la Cde del-br pour détruire un bridge existant.

Observez les infos détaillées du bridge br0 comme suit :

[switch@ovs:~$] sudo ovs-vsctl list br br0      

et la création de l'interface br0 avec la Cde ip address :

Capture - VM osv : Capture - Open vSwitch : Premier démarrage de la VM ovs
Cde ip address montrant l'interface br0 créée

Testez l'interface enp0s3 avec un ping vers yahoo.fr, celui-ci doit recevoir une réponse positive.

Rattachez à présent l'interface enp0s3 au bridge br0 :

[switch@ovs:~$] sudo ovs-vsctl add-port br0 enp0s3
[switch@ovs:~$] sudo ovs-vsctl show
Capture - Open vSwitch : Vue affectation port et interface enp0s3 sur br0
Ajout du port enp0s3 sur br0

Le port virtuel enp0s3 et l'interface virtuelle enp0s3 ne font qu'un.

Utilisez la Cde del-port pour détruire un port existant.

Observez de nouveau le retour de la Cde ip address :

Capture - Open vSwitch : Vue adresses MAC enp0s3 et br0 identiques
Les adresses MAC de enp0s3 et br0 sont identiques

La carte virtuelle br0 possède à présent la même adresse MAC que la carte virtuelle enp0s3.

3 - Intégration de la VM ovs dans le réseau virtuel

3.1 - Configuration réseau depuis VirtualBox

Stoppez la VM :

[switch@ovs:~$] sudo poweroff

Accédez au menu Configuration de VirtualBox, puis :
- - - Onglet Réseau
> Interface 1
> Mode d'accès réseau > Réseau interne
> Nom > Sélectionnez switch_interne
> Avancé > Mode Promiscuité
> Sélectionnez Autoriser les VMs

> Interface 2
> Cochez Activer l'interface réseau
> Mode d'accès réseau > Réseau interne
> Nom > Entrez liaison_vm1
> Avancé > Mode Promiscuité
> Sélectionnez Autoriser les VMs

> Interface 3
> Cochez Activer l'interface réseau
> Mode d'accès réseau > Réseau interne
> Nom > Entrez liaison_vm2
> Avancé > Mode Promiscuité
> Sélectionnez Autoriser les VMs

> OK

Redémarrez la VM.

Il est impossible, OVS n'étant pas installé sur le PC hôte de VirtualBox, d'attribuer aux interfaces 2 et 3 un mode d'accès réseau généralement utilisé avec OVS soit un mode de type Accès par pont au travers d'une interface réseau virtuelle TAP (Voir le § 4).

C'est donc le type Réseau interne qui sera utilisé.

Le mode promiscuité Allow VMs permettra à la VM ovs de travailler tel un switch et traiter ainsi tout le trafic réseau à destination et en provenance d'autres VM.

Il est nécessaire, dans une infrastructure virtualisée telle Open vSwitch installé sur une VM, d'appliquer le mode promiscuité à une interface réseau devant agir comme un pont (bridge).

3.2 - Modification du fichier réseau de Debian

Vous allez à présent configurer OVS au boot de la VM.

Editez pour cela le fichier réseau interfaces :

[switch@ovs:~$] sudo nano /etc/network/interfaces

et modifiez le comme suit :

# This file describes the network interfaces available on ...
# and how to activate them. For more information, see ...

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# Mettre un # devant les 2 lignes ci-dessous
#allow-hotplug enp0s3
#iface enp0s3 inet dhcp

## Configuration Open vSwitch
# Activation de l'interface br0
auto br0
allow-ovs br0

# Configuration IP de l'interface br0
iface br0 inet static
address 192.168.3.15
netmask 255.255.255.0
gateway 192.168.3.1
ovs_type OVSBridge
ovs_ports enp0s3

# Attachement du port/interface enp0s3 au bridge br0
allow-br0 enp0s3
iface enp0s3 inet manual
ovs_bridge br0
ovs_type OVSPort

Redémarrez ensuite le service réseau :

[switch@ovs:~$] sudo systemctl restart networking

et contrôlez le résultat avec la Cde ip address :

Capture - Open vSwitch : Vue adresse IP sur interface réseau br0
Contrôle des interfaces réseau

Constat :
- 2 nouvelles interfaces réseau enp0s8 et enp0s9
- L'interface br0 a la même adresse MAC que enp0s3
- L'interface br0 possède l'adresse IP 192.168.3.15
- Le ping vers l'adresse lP 192.168.3.1 fonctionne

L'adresse IP 192.168.3.15 sera utilisée plus tard pour administrer Open vSwitch à distance.

4 - Raccordement des 2 clients Debian sur OVS

Open vSwitch est généralement installé sur le PC hôte de l'hyperviseur. Un bridge tel br0 utilise alors les interfaces réseau physiques du PC hôte pour l'accès à Internet et des interfaces réseau virtuelles TAP de niveau L2 pour l'accès aux VM.

Dans le cas présent, Open vSwitch est installé sur une VM de VirtualBox.

Vous allez donc raccorder les 2 clients Debian sur les interfaces réseau enp0s8/9 de la VM ovs, interfaces qui seront rattachées à des bridges de nom br1/2.

Vous lierez les 3 bridges à l'aide de ports patch :

Image - Open vSwitch : Bridges en cascade
Schéma : Bridges br0, br1 et br2 montés en cascade

L'ensemble ainsi raccordé (ports patch) peut être vu comme un seul pont.

La création de VLAN et le routage de paquets IP entre ceux-ci restent possibles.

4.1 - Création des bridges et des ports patch

Créez les bridges br1 et br2 :

[switch@ovs:~$] sudo ovs-vsctl add-br br1
[switch@ovs:~$] sudo ovs-vsctl add-br br2

Rattachez les interfaces enp0s8/9 aux bridges br1/2 :

[switch@ovs:~$] sudo ovs-vsctl add-port br1 enp0s8
[switch@ovs:~$] sudo ovs-vsctl add-port br2 enp0s9

Reliez maintenant br0 avec br1 :

[switch@ovs:~$] sudo ovs-vsctl -- add-port br0 br0-patch0 \
-- set interface br0-patch0 type=patch options:peer=br1-patch0
 
[switch@ovs:~$] sudo ovs-vsctl -- add-port br1 br1-patch0 \
-- set interface br1-patch0 type=patch options:peer=br0-patch0  

Le caractère \ indique d'écrire le tout sur une seule ligne.

puis br1 avec br2 :

[switch@ovs:~$] sudo ovs-vsctl -- add-port br1 br1-patch1 \
-- set interface br1-patch1 type=patch options:peer=br2-patch0 
 
[switch@ovs:~$] sudo ovs-vsctl -- add-port br2 br2-patch0 \
-- set interface br2-patch0 type=patch options:peer=br1-patch1  

Contrôlez la prise en compte de la configuration :

[switch@ovs:~$] sudo ovs-vsctl  show
Capture - Open vSwitch : Contrôle configuration
Open vSwitch : Contrôle de la configuration

4.2 - Modification du fichier réseau de Debian

Editez la configuration OVS du fichier interfaces :

[switch@ovs:~$] sudo nano /etc/network/interfaces

et modifiez celle-ci comme suit :

# This file describes the network interfaces available on ...
# and how to activate them. For more information, see ...

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# Mettre un # devant les 2 lignes ci-dessous
#allow-hotplug enp0s3
#iface enp0s3 inet dhcp

## Configuration Open vSwitch
# Activation de l'interface br0
auto br0
allow-ovs br0

# Configuration IP de l'interface br0
iface br0 inet static
address 192.168.3.15
netmask 255.255.255.0
gateway 192.168.3.1
ovs_type OVSBridge
ovs_ports enp0s3 br0-patch0

# Attachement du port/interface enp0s3 au bridge br0
allow-br0 enp0s3
iface enp0s3 inet manual
ovs_bridge br0
ovs_type OVSPort

# Liaison patch br0 vers br1
allow-br0 br0-patch0
iface br0-patch0 inet manual
ovs_bridge br0
ovs_type OVSPatchPort
ovs_patch_peer br1-patch0  
  
# Configuration du bridge br1
auto br1
allow-ovs br1
iface br1 inet manual
ovs_type OVSBridge
ovs_ports enp0s8 br1-patch0 br1-patch1
  
allow-br1 enp0s8
iface enp0s8 inet manual
ovs_bridge br1
ovs_type OVSPort
 
allow-br1 br1-patch0
iface br1-patch0 inet manual
ovs_bridge br1
ovs_type OVSPatchPort
ovs_patch_peer br0-patch0
 
allow-br1 br1-patch1
iface br1-patch1 inet manual
ovs_bridge br1
ovs_type OVSPatchPort
ovs_patch_peer br2-patch0

# Configuration du bridge br2
auto br2
allow-ovs br2
iface br2 inet manual
ovs_type OVSBridge
ovs_ports enp0s9 br2-patch0
  
allow-br2 enp0s9
iface enp0s9 inet manual
ovs_bridge br2
ovs_type OVSPort
  
allow-br2 br2-patch0
iface br2-patch0 inet manual
ovs_bridge br2
ovs_type OVSPatchPort
ovs_patch_peer br1-patch1 

Redémarrez la VM pour appliquer la configuration :

[switch@ovs:~$] sudo reboot

puis contrôlez le statut du service réseau :

[switch@ovs:~$] sudo systemctl status networking

ainsi que le contenu de la Bdd d'Open vSwitch :

 [switch@ovs:~$] sudo ovs-vsctl show

4.3 - Configuration réseau depuis VirtualBox

Sans stopper les VM, modifiez l'onglet réseau des 2 clients debian11-vm* comme suit :
> Interface 1
> Mode d'accès réseau > Réseau interne
> Nom > Sélectionnez liaison_vm* selon la VM

5 - Test de bon fonctionnement du switch virtuel

Vérifiez à l'aide de la Cde ping la conformité des résultats avec ceux indiqués sur la maquette réseau local virtuel.

Stoppez ensuite la VM ovs support d'Open vSwitch et assurez-vous que les 2 clients Debian ne peuvent plus communiquer entre eux.

Image - Rédacteur satisfait


Voilà, c'est terminé !
Le réseau virtuel de base est créé.
Le mémento 5.21 vous attend pour
découvrir les conteneurs LXC.

6 réflexions au sujet de “Open vSwitch / Debian 11”

  1. Bonjour,
    J’ai voulu installer xfce avec OVS afin de pouvoir agrandir le terminal ainsi que de bénéficier du copie/coller
    J ai donc désinstaller NetworkManager qui me semble incompatible avec OVS par
    systemctl stop et disable Networkmanager et remis en DCHP enps03 dans le fichier /etc/network/interfaces
    Mais
    Petit soucis lorsque je lance cette commande à la fin du tutoriel:
    sudo systemctl status networking
    [sudo] Mot de passe de switch :
    ● networking.service – Raise network interfaces
    Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor pr>
    Active: failed (Result: exit-code) since Mon 2022-06-06 20:01:44 CEST; 8mi>
    Docs: man:interfaces(5)
    Process: 585 ExecStart=/sbin/ifup -a –read-environment (code=exited, statu>
    Main PID: 585 (code=exited, status=1/FAILURE)
    CPU: 608us

    juin 06 20:01:44 ovs systemd[1]: Starting Raise network interfaces…
    juin 06 20:01:44 ovs ifup[585]: ifup: /etc/network/interfaces:8: unknown or no >
    juin 06 20:01:44 ovs ifup[585]: ifup: couldn’t read interfaces file « /etc/netwo>
    juin 06 20:01:44 ovs systemd[1]: networking.service: Main process exited, code=>
    juin 06 20:01:44 ovs systemd[1]: networking.service: Failed with result ‘exit-c>
    juin 06 20:01:44 ovs systemd[1]: Failed to start Raise network interfaces.
    lines 1-14/14 (END)
    Une solution à me proposer ? ou devoir réinstaller debian 11 sans GUI..
    Merci encore pour cet excellent travail sur la découverte de l administration reseau

  2. Bonjour,

    Je vous conseille de réinstaller Debian 11 sans GUI.

    Le mémento qui suit celui d’Open vSwitch traite notamment des connexions en protocole SSH.

    Le paragraphe 5 de ce mémento concerne Open vSwitch.

    Le SSH réglera le problème de taille de terminal et le copier/coller fonctionnera correctement par la suite.

    Bon courage.

    InfoLoup

  3. Bonjour,
    Petite parenthèse en trop au point 4.2?
    Dans ce fichier Editez la configuration OVS du fichier interfaces :
    The loopback network interface
    auto lo
    iface lo inet loopback) <———

  4. Bonjour,

    Merci d’avoir fait attention à la parenthèse.

    C’est une erreur de frappe non repérée à la relecture.
    Il faut l’enlever et après vérification c’est certainement à l’origine du manque d’adresse IP sur le conteneur ctn1.

    Vous auriez normalement du, toujours au paragraphe 4.2, observer une erreur lors de l’exécution de la Cde :
    $ sudo systemctl status networking

    J’ai corrigé le mémento.

    Merci

    InfoLoup

  5. Bonjour,
    j’ai rajouté une VM Windows 10 sur un pont br3 avec une interface enp0s10 cela fonctionne plutôt bien, toutes les VM se ‘pingue’ entre elles …
    Est-il possible d’ajouter les deux containers ctn1 et ctn2 dans le memento suivant ou atteint la limite du switch virtuelle (vu 5 ports ?) et dans ce cas devoir supprimer par exemple debian vm2-client
    Remerciements

Laisser un commentaire