Debian logo [inetdoc.LINUX]

9. Communications réseau en mode utilisateur

Pour l'ensemble des opérations présentées dans cette section, on utilise indifféremment les solutions KVM (et|ou) QEMU. Les configurations réseaux sont valables dans les deux cas.

Le mode utilisateur est la solution par défaut ; celle utilisée lors de la phase d'installation d'une nouvelle instance de machine virtuelle (Voir Section 7.2, « Installation d'une machine virtuelle QEMU »). Il correspond à l'utilisation d'une pile de protocoles réseau en mode utilisateur. L'avantage, c'est que cette configuration réseau automatisée ne nécessite aucune opération système avec les droits super-utilisateur. L'inconvénient, c'est qu'aucune communication depuis un hôte réseau réel vers la machine virtuelle n'est possible. Il est cependant possible de communiquer depuis le système hôte vers la machine virtuelle en mode utilisateur à l'aide de l'option redir.

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.

9.1. Exemple d'utilisation des communications réseau en mode utilisateur

On commence par lancer l'instance de machine virtuelle.

$ qemu -hda vm0-debian-i386-X11.qcow -m 384 -redir tcp:5555::23 1

1

L'option -redir assure la redirection des connexions TCP sur le port 5555 du système hôte vers le port 23 de la machine virtuelle.

Une fois la machine virtuelle lancée, on installe les paquets nécessaires et on configure le service telnet.

  • Côté système hôte ou client telnet, on vérifie que le paquet telnet-ssl est bien installé.

    $ dpkg -l telnet-ssl |grep ^ii
    ii  telnet-ssl   0.17.24+0.1-20   The telnet client with SSL encryption support
    
  • Côté machine virtuelle ou serveur telnet, on vérifie que le paquet telnetd-ssl est bien installé.

    $ dpkg -l telnetd-ssl |grep ^ii
    ii  telnetd-ssl  0.17.24+0.1-20   The telnet server with SSL encryption support
    

    Pour faire simple, on autorise toutes les connexions entrantes sur le service telnet et on vérifie que le service est ouvert.

    # echo "in.telnetd: ALL" >>/etc/hosts.allow
    # tcpdchk -v
    Using network configuration file: /etc/inetd.conf
    
    >>> Rule /etc/hosts.allow line 14:
    daemons:  in.telnetd
    clients:  ALL
    access:   granted
    

    Il ne reste plus qu'à ouvrir une connexion telnet depuis le système hôte.

    :~$ telnet localhost 5555
    Trying 127.0.0.1...
    Connected to localhost.localdomain.
    Escape character is '^]'.
    Debian GNU/Linux lenny/sid
    vm0 login: etu
    Password:
    Last login: Wed May 14 17:00:13 CEST 2008 from 10.0.2.2 on pts/2
    Linux vm0 2.6.24-1-686 #1 SMP Sat Apr 19 00:37:55 UTC 2008 i686
    
    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.
    etu@vm0:~$ w
    17:36:47 up  1:06,  2 users,  load average: 0,04, 0,01, 0,00
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    etu      pts/1    10.0.2.2         17:36    0.00s  0.44s  0.06s 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.

# lspci | grep -i ethernet
00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8029(AS)
# cat /var/log/syslog |grep -i dhcp
vm0 dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 7
vm0 dhclient: DHCPOFFER from 10.0.2.2
vm0 dhclient: DHCPREQUEST on eth0 to 255.255.255.255 port 67
vm0 dhclient: DHCPACK from 10.0.2.2
vm0 dhclient: bound to 10.0.2.15 -- renewal in 40347 seconds.

La configuration réseau obtenue est la suivante :

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 52:54:00:12:34:56
          inet adr:10.0.2.15  Bcast:10.0.2.255  Masque:255.255.255.0
          adr inet6: fe80::5054:ff:fe12:3456/64 Scope:Lien
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1879 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1502 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 lg file transmission:1000
          RX bytes:1292554 (1.2 MiB)  TX bytes:169257 (165.2 KiB)
          Interruption:10 Adresse de base:0xc100

vm0:/home/etu# route -n
Table de routage IP du noyau
Destination     Passerelle      Genmask         Indic Metric Ref    Use Iface
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
0.0.0.0         10.0.2.2        0.0.0.0         UG    0      0        0 eth0

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 émulée.