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

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

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

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

Répondre à cet article