Dans ce contexte, l'objectif est de faire communiquer les machines
virtuelles entre elles. Pour ce faire, on utilise un commutateur virtuel lui
aussi :
Virtual Distributed Ethernet. Ce commutateur est un processus utilisateur appelé
vde_switch. Il est fourni par le paquet
vde2. Voici un exemple de topologie réseau utilisant
vde_switch.
|
Note |
|---|---|
|
C'est cette topologie de base que j'utilise systématiquement pour les travaux pratiques de la série Administration système en réseau. En effet, on retrouve une machine virtuelle de type serveur et une autre de type client. Le système hôte joue le rôle de passerelle donnant accès à l'Internet (et|ou) à un système distant. |
On trouve ci-dessous les attributions d'adresses IPv4 en fonction des types d'interfaces. Bien entendu, ces adresses ne sont que des exemples utiles à l'interprétation des étapes de mise en place de la topologie illustrée.
Tableau 2. Plan d'adressage IPv4 pour les communications point à point
| Système | Interface | Adresse IPv4 |
|---|---|---|
| hôte | eth0 |
192.168.1.1/24
|
| hôte | tap0 |
192.200.0.1/24
|
| machine virtuelle «serveur» | eth0 |
192.200.0.2/24
|
| machine virtuelle «client» | eth0 |
192.200.0.3/24
|
| distant | eth0 |
192.168.1.7/24
|
La configuration de l'interface TAP sur le système hôte reprend les éléments présentés précédemment Section 10.2, « Configuration d'une interface TAP ».
$./scripts/tap-up.sh tap0 192.200.0.1/24$/sbin/ifconfig tap0 tap0 Link encap:Ethernet HWaddr 00:ff:8c:db:de:99 inet adr:192.200.0.1 Bcast:192.200.0.255 Masque:255.255.255.0 adr inet6: fe80::2ff:8cff:fedb:de99/64 Scope:Lien UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:47 overruns:0 carrier:0 collisions:0 lg file transmission:100 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
L'objectif principal des opérations présentées ici est de «préserver» la table de routage du système hôte. En effet, ce système correspond le plus souvent à un ordinateur portable utilisé pour les enseignements. La connexion au réseau public de ce portable peut utiliser plusieurs types d'interfaces différentes : Ethernet filaire, Wifi (et|ou) VPN. Il faut donc que les instances de machines virtuelles puissent avoir accès aux réseaux réels externes via n'importe laquelle de ces différentes interfaces.
On commence donc par activer le routage des paquets IPv4 au niveau du noyau Linux.
# echo 1 >/proc/sys/net/ipv4/ip_forward
Ensuite, on utilise les fonctions de traduction d'adresses IP sources (S-NAT) dynamiques du noyau Linux à l'aide de l'outil de configuration ipatbles.
# iptables -t nat -A POSTROUTING -s 192.200.0.0/24 -j MASQUERADE
La cible MASQUERADE permet l'utilisation dynamique de
n'importe quelle interface de sortie du système hôte vers le réseau
public. Ensuite, la traduction d'adresses se fait sur la base des adresses IP
sources du réseau des instances de machines virtuelles desservi par le
commutateur vde_switch. Ces adresses sources sont
désignées à l'aide de l'option -s 192.200.0.0/24.
On valide le fonctionnement de la traduction d'adresses en consultant l'état des chaînes correspondantes.
# iptables -vL -t nat Chain PREROUTING (policy ACCEPT 56 packets, 4650 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 220 packets, 20710 bytes) pkts bytes target prot opt in out source destination 32 1966 MASQUERADE all -- any any 192.200.0.0/24 anywhere Chain OUTPUT (policy ACCEPT 220 packets, 20710 bytes) pkts bytes target prot opt in out source destination
Il est aussi possible, avec des outils comme
iptsate, de visualiser en temps réel l'état des
tables de suivi de communication du système de filtrage
netfilter/iptables.
Le commutateur virtuel vde_switch doit être lancé avant les instances de machines virtuelles pour que le brassage des connexions puisse se faire. Voici un exemple de commande de lancement du commutateur suivi de la visualisation du socket et du processus correspondant.
$vde_switch -d --tap tap0-s /tmp/vde.ctl
-M /tmp/vde.mgmt
![]()
$$ ll /tmp/vde*srw------- 1 phil phil 0 jun 1 17:29 /tmp/vde.mgmt /tmp/vde.ctl: total 0 srwx------ 1 phil phil 0 jun 1 17:29 ctl
$pgrep -l -u phil vde11198 vde_switch
|
Avec l'option # route -n Table de routage IP du noyau Destination Passerelle Genmask Indic Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1 192.200.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tap0 0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1 |
|
|
L'option |
|
|
L'option |
|
|
On observe que l'utilisateur normal |
Il est possible de combiner le script d'initialisation de l'interface TAP (voir Section 10.2, « Configuration d'une interface TAP ») et le lancement du commutateur virtuel à l'aide du script suivant :
#!/bin/bash
# $Id: vde-up.sh 1305 2008-06-08 20:59:09Z latu $
# Run this virtual ethernet switch setup script before KVM/QEMU launch
# These scripts should be located in ~/bin as they are run at normal user level
if [ -z $1 ] || [ -z $2 ]; then
echo "Usage: vde-up.sh {tap interface} {IP address}"
exit 1
fi
~/bin/tap-up.sh $1 $2
vde_switch -d --tap $1 -s /tmp/vde.ctl -M /tmp/vde.mgmt
Avec cette combinaison de scripts, la séquence d'initialisation de l'interface TAP et du commutateur virtuel associé devient :
$ vde-up.sh tap0 192.200.0.1/2
Le lancement des machines virtuelles sur le système hôte se fait en fonction du brassage à réaliser. Il faut désigner le socket de communication avec le commutateur virtuel et l'interface de réseau local utilisée par la machine virtuelle.
$vdeq qemu -hda vm0-debian-i386.qcow \ -m 128 \ -net vde,sock=/tmp/vde.ctl\ -net nic,vlan=0,macaddr=52:54:00:12:34:62
&
$vdeq qemu -hda vm1-debian-i386.qcow \ -m 128 \ -net vde,sock=/tmp/vde.ctl\ -net nic,vlan=0,macaddr=52:54:00:12:34:63
&
|
Quelque soit l'instance de machine virtuelle initialisée, on utilise
le socket unique de communication avec le
commutateur virtuel. Dans cet exemple, le brassage des ports du commutateur
virtuel se fait dynamiquement dans l'ordre des connexions libres. Les
informations de brassage sont visualisées dans la Section 12.5, « Configuration du commutateur virtuel » et les deux instances
lancées occupent les ports numérotés Ces informations se retrouvent aussi au niveau de l'arborescence des sockets utilisateur. $ ll /tmp/vde* srwx------ 1 phil phil 0 jun 1 17:53 /tmp/vde.ctl.19747-00000 srwx------ 1 phil phil 0 jun 1 18:03 /tmp/vde.ctl.21781-00000 srw------- 1 phil phil 0 jun 1 17:29 /tmp/vde.mgmt /tmp/vde.ctl: total 0 srwx------ 1 phil phil 0 jun 1 17:53 002 srwx------ 1 phil phil 0 jun 1 18:03 003 srwx------ 1 phil phil 0 jun 1 17:29 ctl Dans l'exemple ci-dessus, les valeurs |
|
|
Si les interfaces Ethernet des machines virtuelles sont configurées au niveau du système d'exploitation invité, il est malgré tout nécessaire de préciser le paramétrage matériel de ces interfaces au lancement d'une instance. En effet, l'adresse physique MAC d'une machine virtuelle est toujours la même par défaut. C'est la raison pour laquelle chaque machine virtuelle est lancée avec une adresse MAC distincte. Il faut se rappeler que la commutation Ethernet réelle ou virtuelle est basée sur la constitution d'une table de correspondance entre adresses MAC et numéro de port. L'état de cette table de correspondance est disponible via l'interface de gestion du commutateur vde_switch. Voir Section 12.5, « Configuration du commutateur virtuel ». De plus, il est possible d'utiliser des réseaux locaux virtuels
(VLANs) en constituant des groupes logiques de ports de
commutateur. Ici, les deux instances de machines virtuelles appartiennent
au même groupe logique : le VLAN numéro
|
La visualisation et la gestion de la configuration du commutateur virtuel sur le système hôte se fait à l'aide d'un socket dédié présenté lors du lancement du processus vde_switch (Section 12.3, « Commutateur virtuel »).
On accède à l'interface de gestion du commutateur virtuel via
unixterm, un outil fourni avec le paquet
vde2.
Le jeu des commandes disponibles sur la configuration du commutateur
est disponible à partir de la commande help. Voici
quelques exemples basiques de commandes de visualisation de l'état des
connexions.
$unixterm /tmp/vde.mgmt VDE switch V.2.2.0-pre2 (C) Virtual Square Team (coord. R. Davoli) 2005,2006,2007 - GPLv2 vde$ showinfo0000 DATA END WITH '.' VDE switch V.2.2.0-pre2 (C) Virtual Square Team (coord. R. Davoli) 2005,2006,2007 - GPLv2 pid 14433 MAC 00:ff:c6:46:c5:14 uptime 2079 mgmt /tmp/vde.mgmt perm 0600 unsent_pktq_len 0 . 1000 Success vde$ port/allprint
0000 DATA END WITH '.' Port 0001 untagged_vlan=0000 ACTIVE - Unnamed Allocatable IN: pkts 2218 bytes 2966493 OUT: pkts 1480 bytes 106042 -- endpoint ID 0008 module tuntap : tap0 Port 0002 untagged_vlan=0000 ACTIVE - Unnamed Allocatable IN: pkts 1518 bytes 109167 OUT: pkts 2292 bytes 2972334 -- endpoint ID 0009 module unix prog : vdeqemu user=phil PID=19747\ SOCK=/tmp/vde.ctl.19747-00000 Port 0003 untagged_vlan=0000 ACTIVE - Unnamed Allocatable IN: pkts 73 bytes 5788 OUT: pkts 48 bytes 3893 -- endpoint ID 0011 module unix prog : vdeqemu user=phil PID=21781\ SOCK=/tmp/vde.ctl.21781-00000 . 1000 Success vde$ hash/print
0000 DATA END WITH '.' Hash: 0048 Addr: 52:54:00:12:34:63 VLAN 0000 to port: 003 age 1 secs Hash: 0088 Addr: 52:54:00:12:34:62 VLAN 0000 to port: 002 age 1 secs . 1000 Success
|
La commande |
|
|
La commande |
|
|
La commande On retrouve ici les deux adresses MAC données lors du lancement des instances de machines virtuelles Section 12.4, « Instances de machines virtuelles ». |
Vous êtes ici :