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

3 commentaire(s)
  • Posté le 23 janvier 2004 à 15:40, par Martin BRAURE DE CALIGNON (lien)

    Merci

    j’adore vraiment votre style :) (le fait qu’on ait été nombreux et tout et tout ...).
    Quoiqu’il en soit, merci beaucoup pour ces 3 tutoriaux, ils me seront d’une grande utilité.

    Voir en ligne : Site de référence

    repondre message

  • Posté le 3 mars 2004 à 18:43, par kenz (lien)

    salut , je suis entrain de mettre en place une machine uml dans mon redhat9 , j’ai utiliser les informations et ceux d’autre sites pour arriver a ma fin , ca m’a beaucoup aider et ca a tres bien marcher . par la suite j’ai essayer de relier deux uml via un bridge on utilisant tun/tap , ca aussi ca a tres bien marcher . en essayant de rendre ma machine uml accecible au reste d’un reseau LAN , j’ai trouvé quelques difficultés , j’ai trouvé que a chaque fois ou je met le port de l’uml (tap0) et l’eth0 de ma machine hote connéctée au bridge , le systeme se plante .illustration (eth0-------bridge) ca marche ainsi que (tap0------bridge) , mais (eth0-----------bridge-----------tap0) tout le redhat se plante . Ca serait bien si vous pouviez m’aider a resoudre ce probleme . merci pour ce que vous faite , je trouve ca tres interessant ...

    repondre message

  • Posté le 21 juillet 2008 à 13:52, par MIB (lien)

    Dans cet article déjà ancien j’indiquais une bidouille (avec yes) pour contourner un problème avec uml_switch.

    De nos jours, il est plus simple de lancer uml_switch avec l’option "-daemon".

    repondre message