Association Bordelaise des Utilisateurs de Logiciels libres
User Mode Linux (2) : on fait un réseau
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.