VirtualBox est un produit de virtualisation porté par Oracle qui a l'avantage d'être multi-plateforme (Ms Windows, OS/X, GNU/Linux) et qui est orienté Desktop, destiné à s'installer sur une machine de bureau (par opposition à un hyperviseur dédié à la virtualisation). Le client cible de VirtualBox c'est l'utilisateur lambda qui a besoin de tester occasionnellement une distribution, l'utilisateur professionnel de GNU/linux (félicitations tu fais partie des 1%) qui a besoin régulièrement d'une machine virtuelle Ms Windows pour certaines applications (comme Ms Office), le développeur ou le testeur de logiciel qui utilise intensivement la virtualisation pour déployer des environnements de test. J'appartiens aux trois catégories. Je ne vais pas détailler la création d'une machine virtuelle mais quelques astuces utiles, fruit de mon expérience ... bon ok de mes galères :-)
Dans le cadre professionnel, j'ai une machine virtuelle Ms Windows qui me sert à éditer et créer des documents Office. Pour éviter de dupliquer les documents, j'avais créé un partage Samba entre ma machine hôte et la machine virtuelle. J'étais fier de moi, cela fonctionnait bien... jusqu'à que j'essaie d'accéder à mes documents dans le TGV. La machine virtuelle était configurée en mode pont (bridge) sur l'interface Ethernet et Ms Windows configuré en IP fixe sur le réseau d'entreprise. L'interface Ethernet de la machine hôte étant KO, le partage Samba n'était pas accessible par la VM.
Une solution consiste à utiliser la fonctionnalité "Dossiers partagés" de VirtualBox. Au niveau de la configuration de la VM, les dossiers partagés permettent de créer un partage Ms Windows qui pointe sur un répertoire du hôte et qui sera accessible quelle que soit la configuration réseau de l'hôte ou de la VM : réseau configuré en mode pont ou en NAT, que le réseau soit accessible ou non.
Configuration des dossiers partagés dans VirtualBox :
Navigation du partage depuis la VM Ms Windows :
Quand je déploie des VMs sur mon poste de développement pour des tests, je configure le réseau de la machine virtuelle en mode NAT pour ne pas consommer d'adresse IP du réseau d'entreprise et je configure le système d'exploitation virtualisé (généralement un Linux) en DHCP. Dans cette configuration, c'est VirtualBox qui attribue une adresse IP dynamique à la VM sur un réseau NAT partagé entre le hôte et ses VMs. Du coup, la VM a accès au hôte, à son réseau local du hôte (et même à Internet) mais elle est invisible pour les autres machines du réseau local. L'avantage de cette configuration c'est qu'elle fonctionne si la machine hôte n'a pas de réseau : la machine hôte et la VM peuvent toujours communiquer. Pour que le hôte puisse se connecter à un service de la VM, il faut configurer la redirection de port avec VirtualBox, c'est à dire lier un port local de la machine hôte à un port de la VM. Par exemple, on peut définir qu'on veut accéder à la VM en SSH en liant le port 2222 au port 22.
Ainsi un ssh -p 2222 user@localhost se connecte à la VM et on peut copier des fichiers par le même biais avec scp. La redirection du port Web (80) de la VM vers le port 8080 de la machine hôte permet d'accéder à une éventuelle application Web de la VM. Cela posera peut-être des soucis car cette application ignore le NAT et elle risque de construire des liens vers des ressouces sur le port 80 alors qu'on l'attaque sur le port 8080. Un moyen de contourner ce problème si l'application n'est pas configurable, consiste à installer un NginX sur la machine hôte pour faire office de proxy.
# Proxy
upstream vbox-vm {
server 127.0.0.1:8080;
}
##
# Virtual Host Config
##
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
proxy_pass http://vbox-vm;
}
}
Ainsi, on peut attaquer le port HTTP de la machine locale et avoir ses requêtes redirigées vers le port HTTP de la VM. On n'a plus de changement de port donc les liens sont valides.
Ces deux astuces me permettent de travailler avec mes VMs sur mon laptop de développement en mode déconnecté. Si vous en avez d'autres je suis preneur :-)