Bonjour,
voici un petit tuto pour celles et ceux qui utilisent des logiciels de virtualisations comme Qemu et VirtualBox pour installer des systèmes d'exploitations virtuels, tester des live-cds, etc et désirent que le système invité soit vu par le système hôte. Par défaut, Qemu et VirtualBox connectent les invités de leurs machines virtuelles à Internet via un serveur Dhcp auprès duquel l'invité peut faire une requête afin d'obtenir une adresse IP. L'hôte doit évidemement être lui-même connecté à Internet. Il est facile pour l'invité d'accéder aux partages de l'hôte si le serveur de fichiers et d'imprimantes Samba est démarré sur l'hôte. Les autres services de l'hôte sont aussi accessibles depuis l'invité. Toutefois, même si on démarre Samba sur l'invité, l'hôte ne peut voir ses partages sans modifier la configuration réseau de l'hôte et de l'invité.
Il s'agit:
- de créer une carte réseau virtuelle depuis l'hôte
- d'activer la carte réseau virtuelle sans aucune adresse IP
- de créer un pont
- d'activer le pont avec adresse réseau privée ou locale
- d'intégrer la carte réseau virtuelle dans le pont
- de se servir de la carte réseau virtuelle (et non du pont) comme carte réseau Ethernet dans la configuration de la machine virtuelle
- configurer la carte Ethernet du système invité de manière à ce quelle utilise une adresse IP différente, mais du même réseau que celle du pont
- que l'adresse IP du pont serve de passerelle par défaut au système invité et facultativement de serveur DNS
Grâce à ce réseau privé virtuel, l'invité est vu par l'hôte. On peut monter les systèmes de fichiers smbfs, ouvrir une session Ssh, Rsync, etc depuis l'hôte et accéder aux services de l'invité.
En pratique, nous supposerons que vous avez ouvert une session root. Il faut installer les paquets uml_utilities et bridge-utils afin que les commandes tunctl et brctl soient disponibles. Il faut aussi que le noyau Linux supportent la création de cartes réseaux virtuelles et de ponts. Généralement il faut charger les modules tun et bridge en mémoire:
modprobe tun
modprobe bridge
La carte réseau virtuelle à créer va être accessible via le fichier de périphérique /dev/net/tun créé par le module tun. Il est nécessaire de modifier ses permissions pour utilisation non root:
chmod 666 /dev/net/tun
Il faut ensuite créer la carte réseau virtuelle tap0 avec le propriétaire et le groupe désiré:
tunctl -g users -t tap0 -u pot
Nous pouvons activer la carte réseau virtuelle sans adrese IP:
ifconfig tap0 0.0.0.0 up
On créé le pont br0 comme ceci:
brctl addbr br0
Je configure et active le pont sur le réseau 192.168.7.0:
ifconfig br0 192.168.7.1 up
J'ajoute la carte réseau virtuelle tap0 au pont br0:
brctl addif br0 tap0
Mon réseau virtuel est créé. Côté hôte, il reste encore à dire au pare-feu de faire du Network Address Translation (NAT) sur le réseau 192.168.7.0 et au noyau Linux de router les paquets IP. C'est indispensable afin que l'invité puisse accéder à Internet. Le point de connexion Internet est ici ppp0:
iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o ppp0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1
Côté invité, dans la section réseau de la configuration de la machine virtuelle de VirtualBox, je donne tap0 de l'hôte comme carte réseau à utiliser. Avec Qemu, il faut démarrer la machine virtuelle avec la configuration réseau suivante:
qemu -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no
Je démarre la machine virtuelle. Je configure sa carte réseau eth0, qui est le nom que donne le système Linux invité à la carte réseau virtuelle tap0 de l'hôte si ma machine virtuelle n'a que cette carte réseau:
ifconfig eth0 192.168.7.2 up
Je donne l'adresse du pont comme passerelle par défaut:
route add default gw 192.168.7.1
Il me reste encore à préciser les adresses IP des serveurs DNS de mon FAI dans le fichier /etc/resolv.conf de l'invité et la connexion Internet est maintenant activée manuellement par l'utilisateur. C'est plus long que la configuration par défaut par Dhcp. Cela a comme avantage de permettre à l'hôte de communiquer avec l'invité et d'accéder à ses ressources. On peut entre autres, installer un système d'exploitation dans une machine virtuelle et le copier sur une partition de son disque dur avec rsync par exemple si le démon Ssh est démarré sur le système invité. On reconfigure le noyau Linux pour qu'il supporte la machine réelle et on peut démarrer réellement sur le nouveau système. Pour supprimer le réseau virtuel et la règle de NAT après arrêt de la machine virtuelle:
ifconfig br0 down
brctl delbr br0
ifconfig tap0 down
tunctl -d tap0
modprobe -r tun
modprobe -r bridge
/etc/init.d/iptables restart
Il y a d'autres façons de procéder afin que l'hôte puisse accéder aux ressources de l'invité. Cette méthode m'a permit d'y arriver avec VirtualBox et Qemu. Peut-être que cette méthode est valable avec d'autres logiciels de virtualisation. L'hôte et l'invité étaient ici des systèmes Linux. Cela peut être adapté afin d'utiliser d'autres systèmes d'exploitations hôtes et invités. Voir les pages de manuel de brctl, d'iptables et de qemu. Il n'y a pas de page de manuel pour tunctl. La commande 'tunctl ?' permet de voir les paramètres et leurs possibles utilisation. Voir le site http://www.virtualbox.org/ pour la documentation sur VirtualBox.