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 carte wifi ne supporte 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.

Nous allons avoir besoin des paquets bridge-utils et uml-utilities (attention, ce paquet est dans le dépôt « Universe »).

Il faut donner les droits à l'interface « tun » :

sudo chmod 0666 /dev/net/tun

Il faut créer un pont1) dans « /etc/network/interfaces ». Tout d'abord on sauvegarde le fichier de configuration des interfaces réseau :

sudo cp /etc/network/interfaces /etc/network/interfaces.ori

En on édite le fichier /etc/network/interfaces.

Votre interface « eth0 » est probablement déjà configurée avec un truc du genre

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

Ceci n'est plus nécessaire … commentez ces lignes (#).

Il faut d'abord créer deux interfaces, une réelle (eth0) et une virtuelle (tap1), puis les ponter (bridge0), pour cela, ajouter :

auto eth0
iface eth0 inet manual

et

auto tap1
iface tap1 inet manual
        tunctl_user <user>

où 〈user〉 (sans les 〈〉) correspond exactement à l'utilisateur déclaré dans le groupe vboxusers

Maintenant, le pont. Il y a plusieurs solutions : soit l'OS Host est en client DHCP (ce qui n'est pas pratique si vous voulez en faire un smb server pour partager des fichiers et des imprimantes avec le Guest), soit il est configuré en IP fixe. On choisira l'une ou l'autre des solutions ci-dessous. Évidemment, ceci rend impossible une configuration future avec les outils Gnome.

IP fixe

Insérer après les interfaces ci-dessus (copier-coller les données IP de l'ex eth0 que vous avez commenté plus haut) :

auto bridge0
iface bridge0 inet static
    post-up chmod ugo+rw /dev/net/tun
    address xxx.xxx.xxx.xxx
    netmask xxx.xxx.xxx.xxx
    gateway xxx.xxx.xxx.xxx
    bridge-ports eth0 tap1
    bridge-ageing 7200
    bridge-fd 0

Client DHCP

Insérer après les interfaces ci-dessus :

auto bridge0
iface bridge0 inet dhcp
    post-up chmod ugo+rw /dev/net/tun
    bridge-ports eth0 tap1
    bridge-ageing 7200
    bridge-fd 0

Il ne nous reste plus qu'à ajouter l'utilisateur lançant VirtualBox au groupe « uml-net » afin qu'il puisse avoir accès au réseau ponté.

sudo addgroup $USERNAME uml-net

Un reboot du Host ne sera pas nécessaire, pour s'assurer que les nouvelles configurations réseau sont bien prises en compte il suffira de lancer :

sudo /etc/init.d/networking restart

Surveillez les erreurs dans l'output du terminal s'il y en a.

Vous avez maintenant un bridge qui met à disposition de l'OS Guest un accès complet au LAN.

Dans les paramètres de l'OS Guest, il vous reste à configurer le « Adaptateur réseau Hôte » avec tap1 comme « Nom de l'interface ».

Si votre LAN dispose d'un serveur DHCP (99% des cas), vous pouvez configurer l'OS Guest en client DHCP, sinon, une adresse IP fixe fera l'affaire (différente de celle du Host, bien sûr).

Je poste ici car la solution donnée ne fonctionne pas pour moi et semble ne pas fonctionner pour d'autres. Je n'arrive pas à voir ce qui ne colle pas dans la solution proposée ici, donc je poste ma solution en attendant que quelqu'un puisse modifier l'erreur qu'il y a dans l'explication ci dessus.

Une fois la chose suivante faite comme proposé ci-dessus :

il faut donner les droits à l'interface tun :
sudo chmod 0666 /dev/net/tun

Il suffit de créer notre script grâce à la commande :

sudo touch /etc/init.d/bridging && sudo gedit /etc/init.d/bridging

et ensuite d'y copier le code suivant dedans :

#!/bin/bash
 
brctl addbr br0
brctl addif br0 eth0
tunctl -t tap1 -u reism
chmod 0666 /dev/net/tun
ifconfig tap1 up
brctl addif br0 tap1
ifconfig tap1 0.0.0.0 promisc up 
ifconfig eth0 0.0.0.0 promisc up
ifconfig br0 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255
sleep 10
route add default gw 10.0.0.200
Attention l'expression « br0 » et « tap1 » peut être gardée mais l'interface « eth0 » doit être remplacée par votre interface réseau normale (grâce à laquelle vous avez Internet) et « reism » doit être remplacé par votre nom d'utilisateur.

De plus, ce script attribue l'adresse IP 10.0.0.8, le masque 255.255.255.0 et le broadcast 10.0.0.255 au bridge br0 ; si vous voulez une autre IP fixe n'oubliez pas de la modifier ainsi que le masque et le broadcast.

Si vous voulez que br0 soit configuré automatiquement (serveur DHCP sur le réseau ; les box le font généralement) en automatique, remplacez « ifconfig br0 10.0.0.8 netmask 255.255.255.0 broadcast 10.0.0.255 » par « dhclient br0 ».

Il en est de même pour la dernière ligne qui spécifie la passerelle ; modifiez l'adresse pour mettre celle de votre routeur qui fait passerelle. Pour les utilisateurs qui seront en automatique, cette derniere ligne peut être supprimé simplement car en automatique la passerelle est également configurée automatiquement.

Une fois, le script écrit, enregistrez-le et quitter l'éditeur de texte.

Il faut que nous rendions ce script executable grâce à la commande suivante :

sudo chmod 755 /etc/init.d/bridging

Maintenant vous avez 3 choix :

  • Soit vous démarrez le script automatiquement à chaque démarrage, auquel cas il vous suffit de taper la commande suivante :
    sudo ln -s /etc/init.d/bridging /etc/rcS.d/S99bridging
  • Soit vous désirez la démarrer quand bon vous semble et à ce moment là il vous suffit de taper la commande suivante au moment fatidique :
    sudo sh /etc/init.d/bridging
  • Soit vous adaptez le script pour qu'il soit démarré par virtualbox lors du démarrage de la machine Virtuelle. Pour cette solution, libre court à votre imagination…

Une fois cela fait, démarrez dans les 2 premiers cas le script pour la première fois en tapant :

sudo sh /etc/init.d/bridging

Et testez votre réseau dans votre machine Virtuelle. Amusez-vous bien. ;-)


1)
En anglais : bridge.
  • virtualbox_reseau.1209584116.txt.gz
  • Dernière modification: Le 18/04/2011, 14:47
  • (modification externe)