Chez Scub, nous travaillons tous sous Ubuntu, nous développont avec Eclipse sur lequel se base notre socle technique, et on utilise Firefox pour les tests d'interfaces. Seulement, il nous est aussi nécessaire de tester nos applications sous un environnement Windows / Internet Explorer, qui correspond à la majorité des parcs informatiques de nos clients. Plutôt que d'utiliser une solution existante d'émulation du moteur de rendu d'Internet Explorer (IE4Linux par exemple) dont on est pas sur à 100% de l'exactitude du rendu, nous avons opté pour utiliser une solution de virtualisation de l'OS Microsoft. Bien que nos machines soient souvent équipées d'un dualboot Ubuntu / XP (ou Vista pour nos machines récentes), il n'est pas envisageable de devoir rebooter pour effectuer nos différents tests. Une autre solution que nous utilisons, est d'avoir une machine Windows sur laquelle on se connecte via VNCViewer, mais cette méthode pose des soucis lorsque l'on est plusieurs à en avoir besoin en même temps.
VMware Server (ou simplement VMware Viewer) est surement la solution la plus utilisée pour virtualiser un OS, mais un nouveau concurrent commence vraiment à se faire sa place : il s'agit de Virtualbox. J'ai donc voulu tester cette nouvelle solution, qui d'après les nombreux avis est très prometteuse, et offre surtout l'avantage d'être moins lourde que VMware Server. Seul mauvais point, la configuration semble être moins facile qu'avec VMware, notamment pour la reconnaissance des ports USB, la configuration du réseau, et quelques autres points...
Ce qui m'intéressait particulièrement dans l'utilisation d'un OS virtualisé, c'était la possibilité de faire communiquer l'OS hôte (ici Ubuntu) et l'OS invité (ici Win XP), afin de pouvoir tester rapidement mes developpements sous Internet Explorer. Par défaut, la configuration réseau (NAT) permet à l'OS invité d'avoir accès à internet en se faisant passer pour l'OS hôte. Le seul moyen de les faire alors communiquer entre eux est alors un dossier de partage ou une liaison Samba. Les deux OS ne sont donc pas reconnu comme des machines distinctes sur le réseau et elles ne peuvent pas se pinguer. Pour que ça soit le cas, il faut passer par la création d'un pont réseau (bridge) entre les deux machines (Host Interface Networking).
Mais autant la configuration d'un bridge sur une connexion ethernet est simple, autant sur une connexion wifi cela relève du parcours du combattant, notamment car certains chipsets wifi ne supportent pas du tout le bridge. J'ai donc du essayer plusieurs méthodes trouvées à droite à gauche, mais sans grand succès. Heureusement, j'ai enfin fini par tomber sur des tutoriaux en anglais qui m'ont grandement aidé pour réussir à faire marcher ce bridge wifi. Par contre, une fois que mes deux machines arrivaient à communiquer, plus moyen d'accèder à internet depuis l'OS invité. Et une fois ce problème résolu, je me suis rendu compte que tout marchait très bien en IP fixe, mais pas en DHCP. Un petit poil de recherches et de configuration plus tard, et mon bridge était enfin entièrement fonctionnel...
Voici donc (enfin) la marche à suivre :
1. Installation des pré-requis
Installation de parprouted pour la configuration du bridge, et de bcrelay pour l'utilisation du DHCP (optionnel)
sudo apt-get install parprouted
sudo apt-get install bcrelay
2. Script de création du bridge
Tout d'abord, on va créer un script de lancement et y ajouter les commandes suivantes :
sudo gedit /etc/network/if-up.d/vbox_network
on s'assure que l'IP Forwarding est bien activé
sysctl net.ipv4.ip_forward=1
on crée une interface tap0 (remplacez user par votre nom d'utilisateur Virtualbox)
VBoxTunctl -b -u user
on déclenche l'interface et on lui assigne une IP
ip link set tap0 up
ip addr add 192.168.1.149/24 dev tap0
notre interface dispose maintenant d'une adresse IP : 192.168.1.149. Vous pouvez adaptez cette IP à vos besoins. (Le /24 correspond au masque de sous-réseau 255.255.255.0)
on utilise ensuite Parprouted pour associer la carte wifi à l'interface tap0
parprouted wlan0 tap0
sous Ubuntu Hardy Heron, un probleme de configuration des routes bloquent le bon fonctionnement du bridge. Il est donc nécessaire de rédéfinir la route suivante :
route add -net 192.168.1.0 netmask 255.255.255.0 tap0
enfin, on active le DHCP
bcrelay -i tap0 -o wlan0 &
il ne reste maintenant plus qu'à rendre le script executable
sudo chmod 700 /etc/network/if-up.d/vbox_network
et vous pouvez lancer le script, puis vérifier son bon fonctionnement (par ex : test de ping d'une machine à l'autre) :
sudo /etc/network/if-up.d/vbox_network
Note : En activant le DHCP, la connexion de l'OS client mettra un peu plus de temps avant de s'initialiser correctement, mais cela fonctionne très bien ensutie.
3. Configuration de Virtualbox
Il faut aller dans les préférences de votre machine virtuelle, dans la partie Réseau. Dans l'adaptateur réseau activé (Adaptateur 1 par défaut), sélectionnez "Adaptateur réseau hôte" dans la liste "Attaché à" et rentrez "tap0" en nom d'interface.
Il ne vous reste plus qu'à lancer Virtualbox et vérifier le bon fonctionnement du pont réseau...
4. Script de suppression du bridge
On va également crée un fichier spécifique :
sudo gedit /etc/network/if-down.d/vbox_network
Ce script se chargera de désactiver le DHCP, de stopper l'interface tap0, puis de la supprimer, de désactiver l'IP Forwarding et enfin de stopper parprouted.
killall bcrelay
ifconfig tap0 down
VBoxTunctl -d tap0
sysctl net.ipv4.ip_forward=0
pkill parprouted
il faut également rendre le fichier éxécutable
sudo chmod 700 /etc/network/if-down.d/vbox_network
et vous pouvez tester son fonctionnement :
sudo /etc/network/if-down.d/vbox_network
Sources :