Le mode utilisateur correspond à l'utilisation d'une pile de
protocoles dans l'espace mémoire utilisateur. L'avantage de cette
solution, c'est que la configuration intégrée ne nécessite aucun
paramétrage réseau sur le système virtualisé dès lors que l'on opte
pour l'autoconfiguration IPv6 ou pour le service DHCP avec IPv4 lors de l'installation.
L'inconvénient, c'est qu'aucune communication réseau vers la
machine virtuelle n'est possible. Il est cependant possible
d'accéder à la «console» d'une machine virtuelle en mode
utilisateur depuis le système hôte à l'aide d'une interface réseau
factice qui utilise l'option hostfwd
.
La documentation officielle se trouve à la page Using the user mode network stack
Selon les termes de cette documentation, la machine virtuelle se comporte comme un hôte réseau situé derrière un pare-feu qui bloque les connexions entrantes. La topologie de la connexion et des services se présente sous la forme suivante :
QEMU VLAN <------> Firewall/DHCP server <-----> Internet | (10.0.2.2) | ----> DNS server (10.0.2.3) | ----> SMB server (10.0.2.4)
Ce mode de fonctionnement intégré à la solution de virtualisation reproduit les services traditionnellement offerts par un routeur domestique ADSL : traduction d'adresses IP (NAT), configuration réseau cliente dynamique (DHCP) et résolution des noms de domaines (DNS).
Le serveur virtuel attribue dynamiquement les adresses IP à
partir de 10.0.2.15
aux interfaces
réseau de la machine virtuelle.
Exemple d'utilisation des communications réseau en mode utilisateur
On lance l'instance de machine virtuelle à l'aide du script standalone-startup.sh donné en annexe Section A.1, « Communications réseau en mode utilsateur ».
:~/vm$
./scripts/standalone-startup.sh vm0-debian-stable-amd64-base.raw 512 10
~> Machine virtuelle : vm0-debian-stable-amd64-base.raw
~> Port SPICE : 5910
~> Mémoire RAM : 512
~> Adresse MAC : ba:ad:ca:fe:00:0a
Les options réseau intéressantes de ce script sont les suivantes.
-device virtio-net,netdev=net0,mac="$macaddress" \ -netdev user,id=net0,hostfwd=tcp::$((5900 + $tapnum))-:22
Le paramètre |
|
L'option |
Une fois l'instance de système virtuel lancé, on ouvre une connexion SSH depuis le système hôte en utilisant le port 2010 si on a indiqué 10 lors de l'appel du script.
$
ssh -p 2010 etu@localhost
etu@localhost's password:
Linux vm0 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
No mail.
Last login: Sat Jan 4 16:28:59 2014 from 10.0.2.2
etu@vm0:~$ w
18:44:18 up 2:13, 1 user, load average: 0,00, 0,01, 0,05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
etu pts/0 10.0.2.2 18:43 2.00s 0.08s 0.00s w
Du point de vue configuration réseau, l'interface Ethernet de la machine virtuelle a été configurée via le service DHCP intégré à l'émulateur. La configuration réseau obtenue est la suivante.
etu@vm0:~$
ip addr ls 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether ba:ad:00:ca:fe:01 brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global eth0 inet6 fe80::b8ad:ff:feca:fe01/64 scope link valid_lft forever preferred_lft foreveretu@vm0:~$
ip route ls default via 10.0.2.2 dev eth0 10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15
Les informations relevées dans les copies d'écran ci-dessus montrent que ce sont les fonctions intégrées de l'émulateur qui ont servi à la configuration de l'interface réseau Ethernet de l'hôte virtuel.