Xen 4 sur Debian Squeeze : avoir des domU avec 2 interfaces « bridgées »

Le
Francois Lafont
Bonjour à tous,

Le titre explique assez bien ce que je souhaite faire, sachant que j'y
arrive mais d'une manière qui me semble un peu compliquée. Du coup, j'ai
quelques questions.

Mon serveur (pour l'instant c'est une machine virtuelle de test mais peu
importe je pense) est sous Debian Squeeze et il possède deux ports
réseau. Après avoir installé le paquet bridge-utils, j'ai opté pour
cette configuration réseau :

--
# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

# Un bridge sur lequel eth0 est branchée.
auto xenbr0
iface xenbr0 inet static
address 192.168.0.250
netmask 255.255.255.0
gateway 192.168.0.254
bridge_ports eth0
bridge_stp off
bridge_fd 2
bridge_maxwait 0

auto eth1
iface eth1 inet manual

# Un autre bridge sur lequel eth0 est branchée.
auto xenbr1
iface xenbr1 inet static
address 192.168.71.250
netmask 255.255.255.0
bridge_ports eth1
bridge_stp off
bridge_fd 2
bridge_maxwait 0
--

Dans l'esprit xenbr0 et xenbr1 correspondent à deux vlans différents
(qu'on pourrait appeler le vlan0 et le vlan71).

J'ai une grande partition LVM qui correspond à un volume-groupe vg1.
Ensuite j'ai installé le paquet xen-linux-system et je me suis arrangé
pour que le noyau Xen soit le choix de Grub2 par défaut. Ensuite j'ai
installé le paquet xen-tools et j'ai modifié le fichier
/etc/xen-tools/xen-tools.conf afin (entre autres) que le disque des
machines invitées (les domU) soit un volume logique de vg1. Ensuite, je
crée une machine domU de type Debian Squeeze comme ceci :

# xen-create-image --hostname=test-1 --vcpus=1 --pygrub --dist=squeeze

Et ça fonctionne pas mal. J'ai un fichier /etc/xen/test-1.cfg généré
automatiquement qui ressemble à ça (je vire les commentaires) :

--
# cat /etc/xen/test-1.cfg
bootloader = '/usr/lib/xen-default/bin/pygrub'
vcpus = '1'
memory = '256'
root = '/dev/xvda2 ro'
disk = [
'phy:/dev/vg1/test-1-disk,xvda2,w',
'phy:/dev/vg1/test-1-swap,xvda1,w',
]
name = 'test-1'
vif = [ 'mac:16:3E:E3:65:A9' ]
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
--

À ce stade, si je démarre ma machine test-1 via « xm create test-1.cfg
», j'ai une machine qui fonctionne et qui possède une carte (virtuelle)
eth0 qui est reliée à la carte vif10.0 de mon dom0, cette dernière étant
bridgée sur xenbr0. Dans mon esprit, tout se passe comme si xenbr0 était
un switch sur lequel est branché eth0 de mon dom0 et eth0 de mon domU.

Le problème, c'est qu'à ce stade, mon domU a une seule interface et moi
je voudrais qu'il en ai une deuxième bridgée sur xenbr1.

Voici comment je m'y prends. J'éteins mon domU et j'édite à la main le
fichier /etc/xen/test-1.cfg afin qu'il devienne :

--
# cat /etc/xen/test-1.cfg
bootloader = '/usr/lib/xen-default/bin/pygrub'
vcpus = '1'
memory = '256'
root = '/dev/xvda2 ro'
disk = [
'phy:/dev/vg1/test-1-disk,xvda2,w',
'phy:/dev/vg1/test-1-swap,xvda1,w',
]
name = 'test-1'

# C'est là les modifs !!!
vif = [
'mac:16:3E:E3:65:A9,bridge=xenbr0',
'mac:16:3E:E3:66:A9,bridge=xenbr1'
]
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
--

J'ai ajouté une nouvelle adresse MAC à la main.

Ensuite, si je redémarre le domU et que je configure son fichier
/etc/network/interfaces pour que la deuxième interface soit bien
paramétrée, alors je me retrouve bien avec mon domU sur les deux vlans
(celui de xenbr0 et celui de xenbr1).


Q1 : mon problème est que cela me paraît un peu compliqué tout ça : je
dois éditer à la main le fichier /etc/xen/test-1.cfg, fichier généré
automatiquement par xen-tools et je dois m'amuser à saisir moi-même une
nouvelle adresse MAC. Je préférerais que ce soit xen-tools qui le fasse
à ma place (c'est bien sûr hautement improbable mais si j'ai plusieurs
domU et que je n'ai pas de chance, à ce petit jeux là, je pourrais
peut-être attribuer deux fois la même adresse MAC). Y a-t-il une manière
plus simple (ou plus automatisée sans doute) de faire tout ça ?

Je suis tombé sur ça par exemple :

http://www.developpez.net/forums/d903219/systemes/virtualisation/monter-2-cartes-reseaux-sous-xen/#post5121428

qui consiste à modifier le fichier /etc/xen/xend-config.sxp afin de
faire appel à un script « maison » qui paramètre la config réseau. Mais
chez moi, ça ne marche pas du tout, dès que je redémarre le daemon xend,
il y a blocage et je finis par me prendre un message d'erreur. J'ai
l'impression que c'est une technique valable pour Xen 3 mais plus pour
Xen 4.


Q2 : une autre chose me laisse perplexe. Sur mon domU, j'ai ça :

--
cat /etc/udev/rules.d/70-persistent-net.rules
# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{address}=="08:00:27:0f:83:b0", ATTR{dev_id}=="0x0",
ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

# PCI device 0x1022:0x2000 (pcnet32)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*",
ATTR{address}=="08:00:27:d8:5a:89", ATTR{dev_id}=="0x0",
ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
--

Et là surprise ! Les adresses MAC n'ont rien à voir avec les adresses
MAC de eth0 et eth1 du domU (qui sont spécifiées dans
/etc/xen/test-1.cfg). Il s'avère que ce sont les adresses MAC de xenbr0
et de xenbr1 du dom0 ! Pourquoi donc ?

De plus si je supprime le fichier
/etc/udev/rules.d/70-persistent-net.rules du domU et que je le
redémarre, le fichier n'est pas re-généré ensuite, alors que sur un
machine « physique » ça a toujours fonctionné. Pourquoi donc ? Du coup,
je me retrouve avec un répertoire /etc/udev/rules.d/ complètement vide
ce qui n'empêche d'ailleurs pas mon domU de fonctionner toujours
parfaitement au niveau réseau ?

Voilà. Je suis désolé d'avoir été si long.
Merci d'avance pour votre aide.

--
François Lafont
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Francois Lafont
Le #24915152
Oups ! Petite rectification.

Le 30/10/2012 02:00, Francois Lafont a écrit :

--------------------------------------------
# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

# Un bridge sur lequel eth0 est branchée.
auto xenbr0
iface xenbr0 inet static
address 192.168.0.250
netmask 255.255.255.0
gateway 192.168.0.254
bridge_ports eth0
bridge_stp off
bridge_fd 2
bridge_maxwait 0

auto eth1
iface eth1 inet manual

# Un autre bridge sur lequel *eth0* est branchée.
auto xenbr1
iface xenbr1 inet static
address 192.168.71.250
netmask 255.255.255.0
bridge_ports eth1
bridge_stp off
bridge_fd 2
bridge_maxwait 0
--------------------------------------------



Sur le bridge xenbr1, c'est bien eth1 qui est branchée dessus. Dans le
dernier commentaire, il faut donc lire :

# Un autre bridge sur lequel eth1 est branchée.

--
François Lafont
Publicité
Poster une réponse
Anonyme