5 août 2021

Tuto Virtualisation : Partie II, OpenVswitch

EDIT 2018 : Retrouvez cette série de tuto dans une grosse mise à jour ici : Xen et OpenVswitch sont dans une Debian 9 – V.2018

Seconde partie du tutoriel sur la virtualisation « Xen et OpenVswitch sont dans une Debian« .
Dans la première partie, nous avons installé Xen sur notre machine.
Maintenant,  occupons nous du réseau !
Dans mon premier tutoriel sur la virtualisation, j’utilisais le système de bridge de linux (bridge-utils). Le fonctionnement est OK, pas de soucis, mais cela fait un bout de temps que je voulais tester OpenVswitch . Et cela s’avère même plus simple à l’usage à mon avis.
De plus, OpenVswitch gère les vlans, la QoS, le bonding, le mirroring, bref, un vrai jouet !

I – Installation

Toujours dans notre machine hôte Dom0, nous installons le paquet :

# apt-get install openvswitch-switch

On vérifie que tout est ok :

# ovs-vsctl show
051fd463-96f5-4529-a55a-ff0b03004ffc
    ovs_version: "2.3.0"

Rien de plus, y’a pas à dire, les paquets, c’est fichtrement pratique 😉

II – Création du premier switch

Nous allons maintenant créer le premier switch: br0. Celui ci servira a faire le lien entre eth0 (la connexion physique) et les machines que nous brancherons dessus. En l’occurrence, une fois tout en place, nous aurons deux machines dessus, le Dom0 et la VM Routeur.

# ovs-vsctl add-br br0

Regardons ce que cela a fait :

# ovs-vsctl show
051fd463-96f5-4529-a55a-ff0b03004ffc
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
    ovs_version: "2.3.0"

On voit le bridge br0 et un port bro de type interne (port sur lequel branché le dom0). En effet :

# ifconfig br0
br0       Link encap:Ethernet  HWaddr 42:1e:59:f4:5c:49
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Le dom0 a bien un brin br0 de type ethernet.
Nous allons modifier le fichier interfaces /etc/network/interfaces :

auto lo
iface lo inet loopback
# The primary network interface
#allow-hotplug eth0
#iface eth0 inet dhcp
allow-ovs br0
 iface br0 inet static
 address IP_PUBLIQUE
 netmask 255.255.255.0
 gateway GATEWAY
 ovs_type OVSBridge
 ovs_ports eth0
allow-br0 eth0
 iface eth0 inet manual
 ovs_bridge br0
 ovs_type OVSPort

Ici, l’ip publique correspond à l’ip principale de ma Dédibox et la gateway que mon Dom0 utilise déjà. Oui, en gros, c’est la config d’eth0 qu’on retrouve la.
Pour résumer,le noyau linux du Dom0 ne sera plus connecté a eth0. Eth0 sera branché a un switch, et sur ce switch, on connectera le noyau linux sur le lien br0.
On reboot la machine, on croise les doigts, et quelques instants après on doit pouvoir se connecter dessus.
On regarde :

# ovs-vsctl show
051fd463-96f5-4529-a55a-ff0b03004ffc
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
        Port "eth0"
            Interface "eth0"
    ovs_version: "2.3.0"

On voit bien le switch, le port eth0 et le port br0.
Puis :

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0c:29:58:fd:1e
          adr inet6: fe80::20c:29ff:fe58:fd1e/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1911 errors:0 dropped:0 overruns:0 frame:0
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:1040132 (1015.7 KiB)  TX bytes:8649 (8.4 KiB)
# ifconfig br0
br0       Link encap:Ethernet  HWaddr 00:0c:29:58:fd:1e
          inet adr:IP_PUBLIQUE  Bcast:BCASTPUBLIQUE  Masque:255.255.255.0
          adr inet6: fe80::20c:29ff:fe58:fd1e/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:112 errors:0 dropped:0 overruns:0 frame:0
          TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:0
          RX bytes:11919 (11.6 KiB)  TX bytes:9559 (9.3 KiB)

On a bien l’IP affectée à br0.

III – Création du bridge interne.

On va maintenant créer le bridge sur lequel les VMs seront connectées :

# ovs-vsctl add-br brint

Puis :

# ovs-vsctl show
051fd463-96f5-4529-a55a-ff0b03004ffc
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
        Port "eth0"
            Interface "eth0"
    Bridge brint
        Port brint
            Interface brint
                type: internal
    ovs_version: "2.3.0"

On voit notre nouveau bridge avec un port brint qui est branché sur l’hyperviseur.

IV – Création des vlans

Pour le vlan, on va utiliser des fakebridge (des bridges dans un bridge).

# ovs-vsctl add-br vlan2 brint 2
# ovs-vsctl add-br vlan10 brint 10
# ovs-vsctl add-br vlansys brint 99

Cela ajoute trois vlans, vlan 2, taggué 2, vlan10, taggé 10 et un vlansys taggé 99.

# ovs-vsctl show
051fd463-96f5-4529-a55a-ff0b03004ffc
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
        Port "eth0"
            Interface "eth0"
    Bridge brint
        Port vlansys
            tag: 99
            Interface vlansys
                type: internal
        Port brint
            Interface brint
                type: internal
        Port "vlan2"
            tag: 2
            Interface "vlan2"
                type: internal
        Port "vlan10"
            tag: 10
            Interface "vlan10"
                type: internal
    ovs_version: "2.3.0"

Sur le même principe qu’avant, on trouve trois ports branchés sur trois interfaces de l’hyperviseur. On peut par exemple affecter une ip sur une de ces interfaces :

# ifconfig vlan99 10.99.1.1 netmask 255.255.255.0 broadcast 10.99.1.255

Et paf, tout est préparé pour notre tutoriel.
On a un Xen et un début de réseau virtuel.
Ne reste qu’a faire beaucoup de café et à se donner rendez vous dans la partie III : Mise en œuvre.

Une réflexion sur « Tuto Virtualisation : Partie II, OpenVswitch »

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *