Open vSwitch

De Wiki doc

ATTENTION

L'article est en cours de rédaction et d’expérimentation

Open vSwitch, dont son abréviation est OVS, permet de créer des commutateurs virtuels au sein du système d'exploitation. Celui-ci gère les VLANs et les liens Trucks. Ce programme est utile dans plusieurs cas:

  • Créer un switch supportant les VLANs a moindre coût (un Raspberry Pi avec des ports Ethernet USB)
  • Gérer le réseau de chaque VMs ou conteneurs comme des machines physiques
  • Communiquer de façon transparente entre un commutateur virtuel et physique

Mon projet personnel consiste a gérer mon réseau de machines virtuelles après un pare-feu qui lui-même est virtualisé.

Installation

Open vSwitch est disponible dans les dépôts Debian

# apt install openvswitch-switch

Configuration OVS

Open vSwitch stock sa configuration dans le fichier <source lang="bash" inline>/etc/openvswitch/conf.db</source>. Nous allons voir deux façons de le configurer. Dans les deux cas, c'est ce fichier qui viendra se remplir (et c'est celui-ci qu'il faudra supprimer si vous voulez repartir de zéro). Modèle:Note

Via le fichier interfaces

ATTENTION

Cette partie n'est pas au point. Faites plutôt la méthode en ligne de commande.

Nous allons enregistrer la configuration actuel des interfaces réseaux

# cp /etc/network/interfaces /etc/network/interfaces.old

ASTUCE

Effacer le contenu du fichier /etc/network/interface pour éviter toutes confusions.

Créer un switch virtuel

Dans le fichier /etc/network/interface ajouter :

<source lang="bash">

  1. Création d'un switch ovs

allow-ovs br0 iface br0 inet manual ovs_type OVSBridge </source>

Pour appliquer les changements, il faut redémarrer le PC.

ATTENTION

Si vous redémarrez votre machine vous perdez la connexion!

Ajouter un port virtuel au switch

Toujours dans le fichier /etc/network/interface ajouter :

<source lang="bash">

  1. Ajouter un port virtuel au switch

allow-ovs vport0 iface vport0 inet manual ovs_bridge br0 ovs_type OVSPort </source>

Ajouter une ligne a la configuration du switch pour associer le port:

<source lang="bash">

  1. Création d'un switch ovs

allow-ovs br0 iface br0 inet manual ovs_type OVSBridge ovs_ports vport0 </source>

Ajouter un port physique au switch

Toujours dans le fichier /etc/network/interface ajouter :

<source lang="bash">

  1. Ajouter un port virtuel au switch

allow-ovs eth0 iface eth0 inet manual ovs_bridge br0 ovs_type OVSPort </source>

Modifier une ligne a la configuration du switch pour associer le port:

<source lang="bash">

  1. Création d'un switch ovs

allow-ovs br0 iface br0 inet manual ovs_type OVSBridge ovs_ports vport0 eth0 </source>

Si vous voulez avoir une ip pour votre machine :

DHCP: <source lang="bash">

  1. Création d'un switch ovs

allow-ovs br0 iface br0 inet dhcp ovs_type OVSBridge ovs_ports vport0 eth0 </source>

IP statique : <source lang="bash">

  1. Création d'un switch ovs

allow-ovs br0 iface br0 inet static ovs_type OVSBridge ovs_ports vport0 eth0 address 10.50.10.44 netmask 255.255.255.0 gateway 10.50.10.1 </source>

Dans ce cas vous pouvez redémarrer votre machine sans perdre la connexion.

Via la ligne de commande

Création du commutateur virtuel

Nous allons créer un pont br0 et configurer l'interface eth0 (notre lien physique vers l’extérieur) pour devenir un port trunk. Le port trunk transportera uniquement le trafic venant du VLAN 1,10,11 et 100.

ovs-vsctl add-br br0
ovs-vsctl add-port br0 eth0 trunks=1,10,11,100

Création des ports virtuels

ovs-vsctl add-port br0 vlan1 tag=1 -- set interface vlan1 type=internal
ovs-vsctl add-port br0 vlan10 tag=10 -- set interface vlan10 type=internal
ovs-vsctl add-port br0 vlan11 tag=11 -- set interface vlan11 type=internal
ovs-vsctl add-port br0 vlan100 tag=100 -- set interface vlan100 type=internal

Assignation d'une IP aux interfaces de VLAN

Temporaire

ifconfig vlan1 192.168.1.253 netmask 255.255.255.0 up
ifconfig vlan10 192.168.10.253 netmask 255.255.255.0 up
ifconfig vlan11 192.168.11.253 netmask 255.255.255.0 up
ifconfig vlan100 192.168.100.253 netmask 255.255.255.0 up

Permanent

Pour mettre une IP permanente aux interfaces de VLAN, il suffit de les configurer dans le fichier <source lang="bash" inline">/etc/network/interfaces</source> les interfaces de VLAN comme n'importe quelle interface.

Script de la section

Voici un script sans fioriture et facile à lire qui reprend les commandes vu dans cette section pour tester cette procédure sans vous prendre la tête. Prenez l'habitude de lire le code source d'un script avant de l’exécuter pour éviter toute compromission involontaire.

Télécharger le script depuis nos fichiers.

Configuration Cisco

Configuration

<source lang="bash"> Switch#conf t Switch(config)#hostname 3550-I

3550-I(config)#vlan 10 3550-I(config-vlan)#vlan 11 3550-I(config-vlan)#vlan 100

3550-I(config-vlan)#interface g 1/0/1 3550-I(config-if)#description --- vers Openvswitch --- 3550-I(config-if)#switchport trunk allowed vlan 1,10,11,100 3550-I(config-if)#switchport mode trunk 3550-I(config-if)#no shutdown 3550-I(config-if)#exit

3550-I(config)#interface vlan 1 3550-I(config-if)#ip address 192.168.1.254 255.255.255.0 3550-I(config-if)#no shutdown

3550-I(config)#interface vlan 10 3550-I(config-if)#ip address 192.168.10.254 255.255.255.0 3550-I(config-if)#no shutdown

3550-I(config-if)#interface vlan 11 3550-I(config-if)#ip address 192.168.11.254 255.255.255.00 3550-I(config-if)#no shutdown

3550-I(config-if)#int vlan 100 3550-I(config-if)#ip address 192.168.100.254 255.255.255.0 3550-I(config-if)#no shutdown 3550-I(config-if)#do write </source>

Script de la section

Fichier contenant l'ensemble des commandes de la section sans le prompt afin de faire un bête copier/coller.

À télécharger depuis nos fichiers.

Test de fonctionnement

Pour tester le bon transport des VLAN sur notre lien trunk, nous allons effectuer des pings successifs depuis le commutateur vers les différentes interfaces VLAN d'OVS. <source lang="bash"> 3550-I#ping 192.168.1.254

Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.1.254, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms 3550-I#ping 192.168.10.254

Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.10.254, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms 3550-I#ping 192.168.11.254

Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.11.254, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms 3550-I#ping 192.168.100.254

Type escape sequence to abort. Sending 5, 100-byte ICMP Echos to 192.168.100.254, timeout is 2 seconds: !!!!! Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms </source>

Sources