lalahop

VirtualBox : configurations réseau possibles

Pour mes expériences diverses, j'adore utiliser des machines virtuelles. Je suis fan de VirtualBox OSE (et bientôt de KVM/Qemu 😉 ). Ce billet se propose de résumer les différentes configurations réseau possibles avec VirtualBox.

Avant tout, je vous conseille la lecture de la documentation de VirtualBox qui a le mérite d'être bien fournie sur le sujet : Chapter 6. Virtual networking.

Réseau interne : permet de créer un réseau virtuel, limité aux machines virtuelles qui y ont été explicitement ajoutées. Sous GNU/Linux, la sécurité est encore plus grande puisque seules les machines virtuelles crées par le même utilisateur (la comparaison est faite sur l'UID) peuvent être reliées entre elles. Les machines virtuelles peuvent communiquer entre elles sans restrictions mais elles ne peuvent pas communiquer avec l'hôte. Ce mode permet de tester des configurations réseau sans dommages sur le vrai réseau. On peut aussi imaginer un petit laboratoire permettant d'étudier les vers (disséquer sans risque, voir la propagation sur un réseau ...).

NAT : je me sers de ce mode quand je souhaite accéder seulement à Internet ou à d'autres services fournis sur mon réseau (exemple : un serveur web). L'hôte et l'invité partage la même adresse IP : la machine virtuelle est donc transparente sur le réseau : il n'y a pas de nouvelle machine. Par défaut, il est impossible de joindre l'invité depuis l'hôte. Cependant, on peut utiliser le port forwarding afin d'accéder à un ou plusieurs ports de l'invité. Voir la doc concernant le port forwarding. Cette idée du port forwarding m'a été donnée, pour la première fois, lors de la lecture du blog de Gauthier Garnier.

Cependant, le port forwarding n'est pas toujours la meilleure solution lors de simulation réseau. Pour cela, il existe un autre mode :

Accès par pont : VirtualBox bypass la pile réseau de l'hôte et accède directement à la carte réseau choisie. Vu du réseau, une nouvelle machine apparait. L'invité à accès au reste du LAN, à internet (comme avec le mode NAT quoi). Mais en plus, l'hôte (et les autres machines du LAN) peut avoir accès à la machine virtuelle sans port forwarding.

Je me sers de ce mode pour faire des expériences plus complexes entre l'invité et l'hôte et/ou mon LAN réel. Mais, parfois, je n'ai pas de routeur ni de commutateur connecté a mon hôte mais juste un modem. Dans ce cas précis, je n'arrive pas à faire communiquer mon invité et mon hôte en mode "accès par pont". Cela fonctionne en mode "NAT" mais je ne peux pas accéder comme je veux à l'invité via le réseau (comprendre : le port forwarding a des limites). Pour cela, il existe encore un autre mode :

Réseau privé hôte : Il s'agit d'un mix entre le mode "réseau interne" et le mode "accès par pont" : une ou plusieurs machines virtuelles peuvent communiquer entre elles et avec l'hôte sans limites. Néanmoins, les machines virtuelles n'ont pas accès au LAN réel ni à Internet. Cela peut néanmoins s'arranger :

Étape 1 : Transformer votre hôte en passerelle.

$ sudo -i
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# exit

Si vous voulez conserver l'ip forwarding après un reboot de l'hôte, pensez à décommenter la ligne "net.ipv4.ip_forward=1" dans le fichier /etc/sysctl.conf. Pour remettre les actions par défaut dans la table NAT, pensez à la commande :

sudo iptables -t nat -P POSTROUTING ACCEPT

Etape 2 : Ajoutez une route par défaut à l'invité :

sudo route add -net default gw IPHote

N'oubliez pas de remplacer IPHote par l'adresse IP de l'interface créée par VirtualBox sur l'hôte.

Il ne vous reste plus qu'a configurer les DNS (/etc/resolv.conf) et c'est terminé.

Remarque : je n'ai traité que le cas où le système hôte et le système invité sont des Unix. Je n'ai pas testé les cas avec un Windows comme invité ou comme hôte mais voici quelques pistes vers lesquelles chercher si ça vous intéresse.

  • Si votre hôte est un Windows et votre invité est un Unix, il faudra suivre ceci (marche aussi pour les dernières versions de Windows d'après ce qu'on m'a dit) pour l'étape 1. L'étape 2 ne change pas.
  • Si votre hôte est un Unix et votre invité un Windows, seul l'étape 2 change. La ligne de commande doit être quelque chose comme :
    route add 0.0.0.0 mask 0.0.0.0 IPHote
  • Si votre système hôte et votre système invité sous tous les deux des Windows, il faudra suivre les deux points ci-dessous.

Réseau VDE : ce mode apparait dans la liste quand le logiciel VDE est installé sur l'hote. Virtual Distributed Ethernet (VDE) est un commutateur virtuel. Il permet de relier les machines virtuelles (et même l'hôte selon la manière dont il est configuré) entre elles et offre les fonctions supplémentaires d'un commutateur (VLAN, STP, etc.). Il permet de faire un réseau encore plus réaliste. Allez sur le wiki du projet VDE pour avoir plus d'informations.

Sinon, pour cloner un disque dur virtuel (.vdi) afin de l'utiliser dans une autre machine virtuelle (par exemple), c'est par là : http://www.mdl4.com/2010/05/how-to-copy-clone-a-virtualbox-vdi-in-ubuntu/

ÉDIT du 07/08/2011 à 0h45 : Et pour accéder aux dossiers partagés avec GNU/Linux comme système invité, il suffit de faire :

mount -t vboxsf sharename mountpoint

Où "sharename" est le nom du partage tel que vous l'avez défini lors de sa création. "mountpoint" doit bien éviter exister dans le système de fichiers. Exemple :

mount -t vboxsf docs /mnt/docs

Source :Documentation officielle de Virtualbox.
Fin de l'édit

  1. Merci d’avoir clarifié ces notions