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

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

    Répondre à ce 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 ...

    Répondre à ce 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".

    Répondre à ce message