Ceci est une ancienne révision du document !



VirtualBox et le réseau

Cette page n'est qu'une annexe destinée à alléger la page principale de VirtualBox et permettant de vous présenter la façon de mettre en œuvre la mise en réseau de l'hôte (host interface networking).

Attention si l'hôte (le système qui exécute VirtualBox) est connecté à votre réseau par wifi : beaucoup de cartes wifi ne supportent pas bridge, malheureusement les deux exemples donnés ci-dessous utilisent bridge. Plus d'information : It doesn't work with my Wireless card! Cependant, un workaround avec iptables et le nat peut permettre à virtualbox de se connecter au réseau même si l'interface wifi ne supporte pas le bridge.
Pour la rédaction de cet article, les options suivantes ont été utilisées dans la configuration réseau de VirtualBox:
  • Adapter Type: PCnet-FAST III (Am 79C973)
  • Adresse MAC: Laisser la valeur par défaut, ou Générer.

Sélectionner simplement l'option NAT du menu attaché à dans la configuration réseau de la machine virtuelle.

Installer les paquets bridge-utils, uml-utilities (attention, ce paquet est dans le dépôt Universe).

Création du pont

Nous créons le pont quelle que soit la méthode utilisée (permanente ou dynamique), car il est nécessaire aux deux.

Le fait que le pont soit permanent nous permet, pour la méthode dynamique, d'ajouter les interfaces virtuelles sans couper la connection réseau de l'hôte.

Sauvegarder le fichier /etc/network/interfaces:

sudo cp /etc/network/interfaces /etc/network/interfaces.orig

Éditer le fichier /etc/network/interfaces.

Remplacer "eth0" par le nom de l'interface à laquelle on désire attacher le pont.
Remplacer les valeurs de "address", "netmask" et "gateway" par celles utilisées sur le réseau.

L' interface est probablement déjà configurée par le système, repérer les lignes du type

auto eth0 
iface eth0 inet dhcp

ou

auto eth0 
iface eth0 inet static
        address xxx.xxx.xxx.xxx
        netmask xxx.xxx.xxx.xxx
        gateway xxx.xxx.xxx.xxx

puis les supprimmer.

Configurer l'interface en mode manuel, pour cela ajouter

auto eth0
iface eth0 inet manual

Ajouter le pont. Si votre interface se configure automatiquement (DHCP), ajouter

auto br0
iface br0 inet dhcp
	bridge-ports eth0

sinon, ajouter (remplacer les xxx par les valeurs qui se trouvaient dans la configuration de eth0)

auto br0
iface br0 inet static
	bridge-ports eth0
	address xxx.xxx.xxx.xxx
	netmask xxx.xxx.xxx.xxx
	gateway xxx.xxx.xxx.xxx
Voici une autre méthode pour ubuntu 8.04 et virtualbox ose : http://forum.ubuntu-fr.org/viewtopic.php?id=217680

Préparation des interfaces virtuelles

Quelques préparatifs sont nécessaires afin que VirtualBox puisse accéder aux interfaces virtuelles.

Ajouter l'utilisateur au groupe uml-net:

sudo adduser $USERNAME uml-net

Créer le groupe tunusers:

sudo addgroup tunusers

Y ajouter l' utilisateur:

sudo adduser $USERNAME tunusers

Modifier les droits d'acces a /dev/net/tun pour que les utilisateurs du groupe tunusers puissent l'utiliser:
Éditer le fichier /etc/udev/rules.d/20-names.rules.
Remplacer

KERNEL=="tun", NAME="net/%k"

par

KERNEL=="tun", NAME="net/%k", GROUP="tunusers", MODE="0660"

Si le node /dev/net/tun est créé par recopie du fichier /lib/udev/devices/net/tun avec ses droits d'accès.
Modifier les permissions de /lib/udev/devices/net/tun afin que le fichier soit accessible pour les membres du groupe tunusers:

sudo chown :tunusers /lib/udev/devices/net/tun
sudo chmod g+rw /lib/udev/devices/net/tun

Redémarrer le système.

Méthode dynamique

L'interface utilisée par la machine virtuelle est créée au démarrage de celle-ci, puis supprimée a son extinction.

Nous allons ici utiliser la commande "VBoxTunctl", cet outil n'est pas fournit avec la version OpenSource de VirtualBox, il nous faut donc installer la version officielle.

Éditer le fichier /opt/bin/vbox-network.

#!/bin/bash

# include lib
. /opt/lib/vbox-network

CALLNAME=$(basename $0)

case "$CALLNAME" in
	"vbox-network_start")
		# if the fd is set, interface already exists
		[ "$IF_FD" = "0" ] || { echo $IF_NAME; exit $NO_ERROR; }
		create_iface
		exit $?
	;;
	"vbox-network_stop")
		delete_iface
		exit $?
	;;
	*)
		exit $E_BAD_CALLNAME
	;;
esac

Éditer le fichier /opt/lib/vbox-network.

# include configuration
. /opt/etc/vbox-network

IF_FD="$1"
IF_NAME="$2"

# get the user running vbox
if [ "$SUDO_USER" = "" ]; then
	VBOX_USER=$USER
else
	VBOX_USER=$SUDO_USER
fi

# errors
NO_ERROR=0
E_ERROR=1
E_NOT_ROOT=2
E_TUNCTL_CREATE=3
E_BAD_CALLNAME=4

function create_iface
{
	# need to be root
	[ "$UID" = "0" ] || return $E_NOT_ROOT

	# create the interface
	TUNCTL_CMD="$TUNCTL -b -u $VBOX_USER"
	[ "$IF_NAME" = "" ] || TUNCTL_CMD="$TUNCTL_CMD -t $IF_NAME"
	IF=$( $TUNCTL_CMD )	
	[ -z "$IF" ] && return $E_TUNCTL_CREATE

	# bring it up
	$IFCONFIG $IF up >> /dev/null

	# bridge it
	$BRCTL addif $BRIDGE $IF >> /dev/null

	echo $IF
	return $NO_ERROR
}

function delete_iface
{
	# need to be root
	[ "$UID" = "0" ] || return $E_NOT_ROOT

	# unbridge
	$BRCTL delif $BRIDGE $IF_NAME >> /dev/null

	# delete
	$TUNCTL -d $IF_NAME >> /dev/null
}

Éditer le fichier /opt/etc/vbox-network.

BRIDGE="br0"
TUN="/dev/net/tun"

TUNCTL="/usr/bin/VBoxTunctl -f $TUN"
BRCTL="/usr/sbin/brctl"
IFCONFIG="/sbin/ifconfig"

Modifier les permission de /opt/bin/vbox-network afin qu'il soit exécutable par les membres du groupe vboxusers:

sudo chown :vboxusers /opt/bin/vbox-network
sudo chmod ug+rx /opt/bin/vbox-network

Créer les liens vbox-network_start et vbox-network_stop:

cd /opt/bin
sudo ln -s vbox-network vbox-network_start
sudo ln -s vbox-network vbox-network_stop

Editer /etc/sudoers afin que virtualbox puisse exécuter les commandes necessaires sans se voir demandé de mot de passe:

sudo visudo

Ajouter

# Members of vboxusers can run /opt/bin/vbox-network_start and /opt/bin/vbox-network_stop without asked for a password
%vboxusers ALL=(ALL) NOPASSWD: /opt/bin/vbox-network_start, /opt/bin/vbox-network_stop

Pour utiliser ces interfaces virtuelles, sélectionner l'option Adaptateur Réseau Hôte du menu attaché à dans la configuration réseau de la machine virtuelle.
Laisser le champ Nom de l'interface vide.
Remplir le champ Application d'installation avec sudo /opt/bin/vbox-network_start.
Remplir le champ Application de désinstallation avec sudo /opt/bin/vbox-network_stop.

Méthode permanente

Les interfaces virtuelles seront créées au démarrage du systeme, meme si elles ne sont pas utilisées par la suite.

Éditer le fichier /etc/network/interfaces.

Remplacer eth0 par le nom de l'interface à laquelle on a attaché le pont.
Remplacer tapX par le nom de l'interface (tap0, puis tap1, tap2, tap3 …)
Remplacer <user> par le nom de l'utilisateur.

Pour chaque interface virtuelles, ajouter

auto tapX
iface tapX inet manual
	up ifconfig $IFACE up
	down ifconfig $IFACE down
	tunctl_user <user>

puis, dans la section de l'interface br0, remplacer

bridge-ports eth0

par

bridge-ports eth0 tapX

Redémarrer le réseau:

sudo /etc/init.d/networking restart

Pour utiliser ces interfaces virtuelles, sélectionner l'option Adaptateur Réseau Hôte du menu attaché à dans la configuration réseau de la machine virtuelle, puis indiquer le nom de l'interface (tap0, tap1, tap2 … ) dans le champ Nom de l'interface.

Pour la version 1.6.0 de Sun il faut utiliser les cartes réseaux Intel Pro/1000 au lieu des PCNet . Télécharger Pilotes Windows XP et les installer.

Pour utiliser le réseau interne, choisisez réseau interne dans les interfaces réseau.

Puis, il vous faudra préciser le nom de réseau que vous allez utiliser. Sur la documentation de Virtualbox, il est précisé qu'il faut utiliser le nom "intnet" avec l'interface graphique. Dans la documentation il est précisé qu'il est possible d'utiliser un autre nom de réseau interne seulement avec la ligne de commande. (à confirmer ou infirmer)

Ensuite, vous faites ça pour une deuxième machine virtuelle et elles pourront communiquer. Penser à configurer le réseau des deux machines soit en installant un serveur DHCP, soit en configurant les interfaces réseau à la main.

Vous pouvez utiliser autant de machines que désiré (sur le même réseau) en considérant seulement les limites de la machine hôte.

(à compléter éventuellement avec des captures d'écran ou autre)

  • virtualbox_reseau.1220448761.txt.gz
  • Dernière modification: Le 18/04/2011, 14:56
  • (modification externe)