11. Effectuer les manipulations sur machines virtuelles

Il est possible de réaliser l'ensemble des manipulations de ce support à l'aide de trois machines virtuelles et du commutateur Open vSwitch. Dans la figure ci-dessous, le routeur baptisé ISP correspond au système hôte sur lequel les systèmes virtuels sont exécutés.

Topologie logique machines virtuelles

Tableau 12. Affectation des rôles, des numéros de VLANs et des adresses IP

Routeur OSPF router-id VLAN Interface Réseau
R1 OSPFv2 -> 0.0.1.4
OSPFv3 -> 0.0.1.6
0 eth0 192.0.2.9/27
2001:678:3fc:a::9/64
12 eth0.12 10.0.12.1/26
2001:678:3fc:c::1/64
13 eth0.13 10.0.13.1/26
2001:678:3fc:d::1/64
- dummy0 10.1.1.1/29
2001:678:3fc:b::1/64
R2 OSPFv2 -> 0.0.2.4
OSPFv3 -> 0.0.2.6
12 eth0.12 10.1.21.2/26
2001:678:3fc:c::2/64
23 eth0.23 10.1.23.2/26
2001:678:3fc:17::2/64
- veth0:veth1 10.1.2.1/30 -> 10.1.2.2/30
2001:678:3fc:e::1/64 -> 2001:678:3fc:e::2/64
R3 OSPFv2 -> 0.0.3.4
OSPFv3 -> 0.0.3.6
13 eth0.13 10.1.13.3/26
2001:678:3fc:d::3/64
23 eth0.23 10.1.23.3/26
2001:678:3fc:17::3/64
- veth0:veth1 10.1.3.1/30 -> 10.1.3.2/30
2001:678:3fc:f::1/64 -> 2001:678:3fc:f::2/64

11.1. Préparation du commutateur Open vSwitch

Vu du système hôte, on met en place la structure du graphique suivant.

Synoptique système

On se réfère au guide Virtualisation système et enseignement dans lequel le lancement du commutateur virtuel Open vSwitch est intégré à la configuration du système hôte. Voici un extrait du fichier /etc/network/interfaces relatif à la configuration du commutateur dsw-host.

# The primary network interface
allow-ovs dsw-host
iface dsw-host inet manual
        ovs_type OVSBridge
        ovs_ports eth0 vlan1

allow-dsw-host vlan1
iface vlan1 inet static
        address 192.0.2.11/26
        gateway 192.0.2.1
        ovs_type OVSIntPort
        ovs_bridge dsw-host
        dns-nameservers 192.0.2.1

allow-dsw-host eth0
iface eth0 inet manual
        up ip link set dev $IFACE up
        down ip link set dev $IFACE down
        ovs_bridge dsw-host
        ovs_type OVSPort
        ovs_options vlan_mode=access

Dans cette configuration, vlan1 est l'interface principale du système hôte. Elle sert à la fois au routage et à l'accès aux instances de machines virtuelles depuis les autres réseaux.

La configuration de départ du commutateur sur le système hôte est la suivante :

$ sudo ovs-vsctl show
0fb1e80b-37cf-4dce-9a19-17b9fb989610
    Bridge dsw-host
        Port "eth0"
            Interface "eth0"
        Port "vlan1"
            Interface "vlan1"
                type: internal
        Port dsw-host
            Interface dsw-host
                type: internal
    ovs_version: "2.3.0"

Partant de cette configuration de départ, on créé 3 cordons de brassage ; un par routeur. On dispose d'un script pour répéter les opérations de base.

#!/bin/bash

for patchtap in $*
do
        if [ -z "$(ip link ls | grep $patchtap)" ]; then
                echo setting $patchtap up
                sudo ip tuntap add mode tap dev $patchtap group kvm multi_queue
                sudo ip link set dev $patchtap up
        else
                echo $patchtap is already there!
        fi
done

Avec cet outil, la création des cordons s'effectue comme suit :

$ sh ./patchcables.sh tap1 tap2 tap3

Maintenant que les cordons sont disponibles, il faut les brasser sur le commutateur dsw-host. L'opération ci-dessous créé trois nouveaux ports sur le commutateur.

$ for port in tap1 tap2 tap3; do sudo ovs-vsctl add-port dsw-host $port; done

Pour respecter la topologie physique proposée dans l'énoncé, ces trois ports doivent être configurés en mode trunkde façon à ce que chaque routeur puisse router les VLANs qui le concernent. Avec Open vSwitch, les paramètres de configuration sont les suivants :

$ sudo ovs-vsctl set port tap1 vlan_mode=trunk trunks=0,12,13
$ sudo ovs-vsctl set port tap2 vlan_mode=trunk trunks=12,23
$ sudo ovs-vsctl set port tap3 vlan_mode=trunk trunks=13,23
[Note] Note

La particularité du commutateur Open vSwitch est d'utiliser le numéro 0 comme VLAN par défaut. Dans notre cas, ce VLAN 0 devient le VLAN natif dans lequel circulent les trames sans étiquettes IEEE802.1Q.

On aboutit à la représentation graphique suivante :

Brassage des machines virtuelles

La table de correspondance entre VLAN et liaison devient :

VLAN numéro 0 Liaison R1 <-> ISP
VLAN numéro 12 Liaison R1 <-> R2
VLAN numéro 13 Liaison R1 <-> R3
VLAN numéro 23 Liaison R2 <-> R3

Une fois que les opérations des sections suivantes auront été effectuées, la consultation de la table CAM du commutateur donnera les informations suivantes :

$ sudo ovs-appctl fdb/show dsw-host
[sudo] password for latu: 
 port  VLAN  MAC                Age
   11    12  ba:ad:ca:fe:00:02   10
   12    23  ba:ad:ca:fe:00:03    9
   12    13  ba:ad:ca:fe:00:03    9
   10    13  ba:ad:ca:fe:0d:01    9
   10    12  ba:ad:ca:fe:0c:01    4
   11    23  ba:ad:ca:fe:00:02    1
    1     0  de:56:80:40:1d:ed    0
    2     0  42:d9:5d:6c:89:d8    0

11.2. Préparation des routeurs

Sachant que l'on dispose d'une image master sur laquelle est installée un système Debian GNU/Linux de base, on créé 3 images différentielles qui vont correspondre aux instances de routeurs. Voici un exemple de suite de commandes pour la mise en place des images.

:~$ mkdir -p ~/vm/ospf
:~$ cd vm
:~/vm$ wget http://www.stri/vm/vm0-debian-testing-i386-base.qed
<snipped/>
:~/vm$ cd ospf
:~/vm/ospf$ ../scripts/diff-img.sh ../vm0-debian-testing-i386-base.qed r1.qed
:~/vm/ospf$ ../scripts/diff-img.sh ../vm0-debian-testing-i386-base.qed r2.qed
:~/vm/ospf$ ../scripts/diff-img.sh ../vm0-debian-testing-i386-base.qed r3.qed

Le code du script de création de fichier image différentiel est fourni dans le guide Virtualisation système et enseignement.

Ensuite, on créé un nouveau script shell de lancement des instances de «routeurs» dans lequel on fixe les paramètres d'initialisation de ces mêmes «routeurs».

[Avertissement] Avertissement

Ce script ne doit être lancé qu'après l'initialisation du commutateur virtuel pour que le brassage des routeurs sur les ports du commutateur puisse se faire correctement.

$ cd ~/vm/ospf
$ cat ospf-startup.sh 
#!/bin/bash

../scripts/ovs-startup.sh r1.qed 512 1

../scripts/ovs-startup.sh r2.qed 512 2

../scripts/ovs-startup.sh r3.qed 512 3

11.3. Table de routage du système hôte

Pour que les réseaux de l'aire OSPF puissent communiquer avec le système hôte et l'Internet, il est nécessaire de compléter la table de routage du système hôte. La technique usuelle employée pour répondre au besoin consiste à implanter une route statique avec un «super réseau» qui rassemble tous les réseaux de l'aire en une seule entrée.

L'aire OSPF étudiée contient tous les réseaux du Tableau 12, « Affectation des rôles, des numéros de VLANs et des adresses IP ». L'utilisation de l'outil ipcalc permet de vérifier qu'un masque de 19 bits permet d'englober ces réseaux en une seule entrée.

$ ipcalc 10.1.0.0/19
Address:   10.1.0.0             00001010.00000001.000 00000.00000000
Netmask:   255.255.224.0 = 19   11111111.11111111.111 00000.00000000
Wildcard:  0.0.31.255           00000000.00000000.000 11111.11111111
=>
Network:   10.1.0.0/19          00001010.00000001.000 00000.00000000
HostMin:   10.1.0.1             00001010.00000001.000 00000.00000001
HostMax:   10.1.31.254          00001010.00000001.000 11111.11111110
Broadcast: 10.1.31.255          00001010.00000001.000 11111.11111111
Hosts/Net: 8190                  Class A, Private Internet

On complète donc la table de routage du système hôte avec l'instruction suivante :

# ip route add 10.1.0.0/19 via 192.0.2.10