Comme vous aviez pu le remarquer, j'utilise depuis un moment Vmware Server sur Ubuntu pour virtualiser des environnements. A titre de comparaison, j'ai testé plusieurs fois VirtualBox, mais je suis toujours revenu vers Vmware Server... car (entre autre) sa gestion du réseau en mode pont est native, aucune manipulation particulière n'est à faire sous Ubuntu pour avoir plusieurs machines virtuelles dans le même LAN, ce qui n'est pas le cas de VirtualBox. Alors évidement un petit tour sur le Wiki Ubuntu Fr suffit pour configurer un mode pont pour Virtual Box, mais l'aspect manuel se cette configuration ne joue pas en sa faveur. Voila le pourquoi de ce script qui permets de permets d'activer | désactiver et de configurer (X interfaces virtuelles en mode pont pour X machines virtuelles VBox) un pont sur un hôte Ubuntu (doit fonctionner sur une autre distribution avec peut-être quelques modifs)
Quelques explications
Mode NAT (Network Adress Translation)
Par défaut, VBox est configuré en mode NAT, c'est à dire que la machine virtuelle (VM) accède au LAN (réseau local) à travers la machine hôte par un routage NAT. Elle est donc séparée du réseau local, elle communique sur le LAN en envoyant de requêtes en utilisant l'adresse IP de la machine hôte. La machine hôte joue en quelque sorte le rôle de serveur DHCP pour l'interface réseau de la VM. La VM accède donc à l'extérieur en passant par la machine hôte. Avec cette configuration, on peut donc accéder à internet à partir de la VM mais pas se connecter directement sur la machine hôte, par exemple pour tester des services offerts par celle ci (samba, ftp, web,...)
Mode pont (bridge)
En mode pont (bridged dans Vmware) la VM accède directement au LAN via une interface réseau virtuelle « pontée » sur l'interface physique de la machine hôte. Vu de LAN, il y a une nouvelle machine avec une adresse IP qui lui est propre (même plage que la machine hôte), la VM utilise le serveur DHCP qui est sur le LAN (si présent). Il s'agit en fait d'utiliser le dispositif TUN / TAP. Un dispositif TUN / TAP est vu comme une interface réseau (virtuelle) qui communique avec un programme utilisateur (logiciel de virtualisation par exemple) en lieu et place d'une vraie carte matérielle
- TUN pour « tunnel » qui simule du point à point, utilisé pour le mode NAT (routage) de VBox
- TAP pour simuler un périphérique Ethernet, utilisé pour le mode pont (adaptateur réseau hôte dans VBox)
Objectif du script
Ce script (bridging_vb_tap_v1.0.sh) a donc pour objectif :
- de créer à la demande (sans modifier en dur la configuration réseau de la machine hôte) plusieurs interface TAP (autant que de VM utilisant le mode « adaptateur réseau hôte » dans VBox) et de créer un pont pour les « ponter » à l'interface réseau physique (eth0 dans mon cas)
- de pouvoir revenir à la configuration réseau initial de la machine hôte
Dépendances
Nécessite les paquets bridge-utils et uml-utilities
$ sudo apt-get install bridge-utils uml-utilities
Script bridging_vb_tap_v1.0.sh
NB : _/!\ Principe de précaution, utiliser cette méthode uniquement si vous avez un minimum de connaissance dans la configuration à la mano (en ligne de commande) d'un réseau sous linux..._
#!/bin/bash
############################################################################################
# Taltan - http://www.taltan.fr - ola.taltan_AT_laposte.net #
############################################################################################
# Script bridging_vb_tap_v1.0.sh #
# Licence : GNU / GPL #
# Inspiré de la doc sur le wiki Ubuntu #
# - http://doc.ubuntu-fr.org/virtualbox_reseau#alternative #
# et du post de kesou sur le forum Ubuntu #
# - http://forum.ubuntu-fr.org/viewtopic.php?id=148609 #
############################################################################################
# Dans le cadre de l'utilisation de VirtuaBox en mode pont #
# - Création des interfaces réseaux virtuelles tapX #
# - Création du pont réseaux entre l'interface physique et les virtuelles #
############################################################################################
# Dépendances #
############################################################################################
# - Nécessite les paquets bridge-utils et uml-utilities #
# => sudo apt-get install bridge-utils uml-utilities #
############################################################################################
# 24/03/08 - v1.0 - Création #
############################################################################################
## Variables
gateway=192.168.0.254 # adresse ip de la passerelle
bridge=br0 # nom du pont
if_hote=eth0 # interface physique actuelle
DHCP=NO # DHCP pour le pont YES | NO
bridge_ip=192.168.0.1 # adresse ip du pont si DHCP=NO
bridge_mask=255.255.255.0 # masque du pont si DHCP=NO
bridge_bc=192.168.0.255 # adresse ip de broadcast si DHCP=NO
nb_tap=2 # nombre d'interfaces virtuelles tapX
vb_user=taltan # utilisateur de VirtualBox
## Fonction de mise en place du pont
start () {
chmod 0666 /dev/net/tun
brctl addbr $bridge # création du pont
brctl addif $bridge $if_hote # ajout de l'interface physique dans le pont
var0=0 # initialisation du compteur de tapX
while [ "$var0" -lt "$nb_tap" ]
do
name_tap=tap${var0} # initialisation du nom de l'interface virtuelle, tap0 pour la première, tap1, tap2...
tunctl -u $vb_user -t $name_tap # création de l'interface virtuelle
ifconfig $name_tap up # activation de l'interface virtuelle
brctl addif $bridge $name_tap # ajout de l'interface virtuelle dans le pont
ifconfig $name_tap 0.0.0.0 promisc up # configuration ip de l'interface virtuelle
let "var0 += 1" # incrémentation du compteur de tapX
done
ifconfig $if_hote 0.0.0.0 promisc up # configuration ip de l'interface physique
if [ "$DHCP" == "YES" ]; then # si DHCP=YES
dhclient $bridge # configuration dhcp pour le pont
sleep 10
else # si DHCP=NO
ifconfig $bridge $bridge_ip netmask $bridge_mask broadcast $bridge_bc # configuration manuelle pour le pont
fi
route add default gw $gateway # configuration de la passerelle pour le pont
brctl showstp $bridge # affiche les info sur le pont
}
## Arrêt et suppression du pont puis restauration de la configuration réseau initiale
stop () {
TESTPONT=$(/sbin/ifconfig | grep $bridge) # si aucun pont configuré, message
if [ -z "$TESTPONT" ]; then
echo "Attention : pont réseau non trouvé. Vérifier la config réseau ..."
exit 1
fi
ifconfig $bridge down # désactivation du pont
brctl delbr $bridge # suppression du pont
var0=0
while [ "$var0" -lt "$nb_tap" ] # pour chaque interface virtuelle tapX
do
name_tap=tap${var0}
tunctl -d $name_tap # suppression
let "var0 += 1"
done
ifconfig $if_hote down # restauration de la configuration réseau initiale
ifconfig $if_hote up
if [ "$DHCP" == "YES" ]; then
sleep 5
fi
ifconfig # affiche la configuration réseau
}
## information sur le bridge
info () {
brctl showstp $bridge
}
## Point d’entrée du script
case $1 in
start)
start $2
;;
stop)
stop $2
;;
info)
info $2
;;
*)
echo $"Utilisation: bridging {start|stop|info}"
exit 1
esac
exit 0
Pour une utilisation ponctuelle
N'oubliez pas de modifier les variables selon votre configuration... et de rendre le script exécutable. Placer le script dans un « path » de votre système Ubuntu
$ sudo cp bridging_vb_tap_v1.0.sh /usr/local/bin/bridging_vb_tap $ sudo chmod +x /usr/local/bin/bridging_vb_tap
Pour la mise en place du pont :
$ sudo bridging_vb_tap start
Résultat de la commande dans le cas de la création d'un pont avec eth0, tap0 et tap1 :
Arrêt et suppression du pont puis restauration de la configuration réseau initiale :
$ sudo bridging_vb_tap stop
Résultat de la commande :
Configuration de la VM dans VBox pour utiliser le mode bridge
Dans la configuration réseau de votre VM :
- cocher Activer l'adaptateur réseau
- choisir Adaptateur réseau hôte
- laisser l'adresse MAC par défaut
- cocher câble relié
- nom de l'interface : tap1 (ou tap0)
- laisser blanc application d'installation et de désinstallation
Et voila le tour est joué, depuis j'utilise très régulièrement VBox et je dois dire qu'en plus d'être GPL (ce que n'est pas VMware Server) je le trouve plus réactif que VMware Server (pas de troll svp
PS : Concernant l'installation de VBox sur Ubuntu 8.04 Hardy Heron, j'ai suivi la méthode décrite pour Ubuntu 7.10 Gutsy Gibbon dans le wiki Ubuntu, c'est pas très « propre », mais il n'y pas encore de dépôts officiels pour Hardy Heron sur le site de VirtualBox et ça marche nickel... Même chose pour l'activation de l'USB, il suffit de suivre le tuto sur le wiki