8. Communications réseau en mode utilisateur

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 user1,id=net0,hostfwd=tcp::$((2000 + $tapnum))-:22  2

1

Le paramètre user applique la configuration réseau intégrée à l'interface nommée net0.

2

L'option hostfwd assure la redirection des connexions TCP vers le port 22 (SSH) de la machine virtuelle. Le calcul du numéro de port se fait en additionnant 2000 avec le numéro de port SPICE donné lors du lancement du script.

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 forever

etu@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.