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.