Association Bordelaise des Utilisateurs de Logiciels libres

Accueil ›› Utilisation de logiciels libres ›› Système ›› User Mode Linux (2) : on fait un réseau

User Mode Linux (2) : on fait un réseau

Posté le vendredi 14 novembre 2003 par MIB

Vous avez été nombreux à ne pas réclamer la suite sur User Mode Linux. Chose promise étant dûe, vous l’aurez quand même : on va maintenant constituer un réseau de deux machines virtuelles sur une même machine hôte.

Le choix des moyens et des objectifs

Il y a une demi-douzaine de moyens de "réseauter" avec les
machines virtuelles UML. Je vous montre celui qui me semble le plus simple [1] :
l’utilisation d’un commutateur (switch) virtuel.

Maintenant que j’ai imposé la solution, définissons bien le problème pour que la solution convienne. On veut un réseau de machines virtuelles
– hébergées sur la même machine hôte
– lancées par le même utilisateur
– qui causent entre-elles par TCP/IP
– mais qui ne communiquent pas avec la machine hôte ni
l’extérieur
Le dernier point sera pour l’article suivant.

Donc des applications raisonnables seraient, par exemple, de
– se faire la main sur le routage, des applis client-serveur
– simuler un réseau pour tester un firewall,
– tester "en condition" du client-serveur sur un réseau
plein de masquerading, firewall et autres pièges.
– etc.

Les ingrédients

Résumons. Il nous faut
– une machine virtuelle (vous savez faire)
– une deuxième machine virtuelle (idem)
– un switch virtuel.

Le switch virtuel uml_switch est fourni dans la boîte à outils
uml_utilities. Si on le lance comme ça, il reste en avant-plan en attendant un "EOF" (^D) qui mettra fin à sa misérable existence.
et si on le met en arrière plan, il se bloque. Contrariant ce truc.

J’ai trouvé deux solutions :
– lancement dans une autre fenêtre par

xterm -T "le switch virtuel" -e uml_switch &


– lancement en arrière-plan

(yes | uml_switch )&

Maintenant, y a plus qu’à lancer une machine virtuelle,
en précisant que son interface réseau "eth0" est reliée
à ce switch. C’est l’option eth0=daemon

En reprenant le script de la dernière fois, et en lançant
la machine virtuelle dans un xterm, ça donne

COW1=slack1.cow
xterm -T "Machine 1" -e \
   $KERNEL umid=$slack1 ubd0=$COW1,$ROOTFS eth0=daemon &

plusieurs switches ?

Ca se complique un peu si on veut faire tourner plusieurs switches

Ca se complique un peu si on veut faire tourner plusieurs switches sur le même hôte, ce qui arrive quand
– la machine hôte est partagée par plusieurs utilisateurs [2]
– on veut faire du routage entre plusieurs sous-réseaux [3]

Le fond du problème, c’est que par défaut, uml_switch utilise un "socket_unix" /tmp/uml.ctl pour discuter avec les machines virtuelles. La solution vient vite :

– primo : lancer uml_switch avec l’option qui va bien

uml_switch -unix /tmp/mon_switch.ctl

– secundo : pareil pour les interfaces

SWITCH=/tmp/mon_switch.ctl

$KERNEL umid=$slack1 ubd0=$COW1,$ROOTFS eth0=daemon,,,$SWITCH

La prochaine fois

Pour la prochaine fois, il ne nous restera plus qu’à raccorder une machine virtuelle au réseau.

Ce coup-ci il faudra avoir quelques connaissances de base en réseau (routage) et on utilisera
quelques trucs peu habituels pour les gens normaux
(les tun/tap, le proxy-arp...) qui méritent au moins quelques semblants d’explication.

Notes

[1] et qui a eu le bon goût de marcher du premier coup

[2] cas des TP d’administration réseau sur un serveur commun

[3] il faut un switch par sous-réseau physique virtuel

Répondre à cet article