Bridging mit VirtualBox und Gentoo 2007.0

VirtualBox (in meinem Fall Version 1.6.2) ist eine nette Virtualisierungslösung, die einem z.B. im Notfall Windows XP auf dem KDE zugänglich macht.

Das Problem: möchte man einen Serverdienst auf Windows laufen lassen, der aus dem Netz des Hostes mittels einer definierten IP-Adresse nutzbar ist, hat man ohne Eingriffe auf Linux-Seite keine (einfache) Möglichkeit.

Problem:

Der Zugriff auf das Internet ist einfach einzurichten: in den Einstellungen zu der ewähnten Windows XP-VM ein Netzwerk-Interface hinzufügen und „NAT“ als Modus auswählen. Ein Zugriff vom Host-system auf das Gastsystem ist damit jedoch nicht möglich.

Beispiel:

Stefan hat dazu ein einleuchtendes Beispiel parat gehabt: die Datenströme fließen durch das Netzkabel, welches man sich als einen Tunnel mit zwei Röhren in eine Richtung vorstellen kann. Ein Übergang der Datenströme zwischen beiden Röhren ist nicht möglich, beide sind gegeneinander abgeschottet.

Lösung:

Um nun z.B. den Zugriff auf einen im Windows laufenden Apache-Webserver zu ermöglichen, muss man, um beim Tunnel-Beispiel zu bleiben, einen Übergang zwischen beiden Röhren schaffen. Eigentlich verhindert man sogar, dass der Datenstrom, der nicht aus dem Host-Netzwerk herausgeleitet werden soll (Traffic zwischen Host und Gast), erst in eine der beiden Tunnelröhren geleitet wird. Man schafft mittels Bridging eine Verbindung zwischen beiden Röhren.

Konfiguration:

Kernel

Networking -> Networking Options -> 802.1d Ethernet Bridging
Device Drivers -> Network device support -> Universal TUN/TAP device driver support

/etc/conf.d/net

config_eth0=( „null“ )
tuntap_vbox0=“tap“
config_vbox0=( „null“ )
config_br0=( „192.168.1.1 netmask 255.255.255.0 brd 192.168.1.255 mtu 1492“ )
dns_servers_br0=( „192.168.1.253“ )
routes_br0=( „default gw 192.168.1.253″ )
bridge_br0=“eth0 vbox0“
depend_br0()
{
need net.eth0
need net.vbox0
}
brctl_br0=( „setfd 0“ )

Nun müssen die Geräte-Links erstellt werden…

cd /etc/init.d/
ln -s net.lo net.vbox0
ln -s net.lo net.br0

… und in den default-Runlevel eingefügt werden:

rc-update add net.vbox0 default
rc-update add net.br0 default

Das Skript /etc/init.d/vbox sorgt für die Konfiguration der Netzwerkstellen seitens VirtualBox:

#!/sbin/runscript

# Quelle: http://gentoo-wiki.com/HOWTO_VirtualBox#NAT
#
# You must first setup your bridge networking!
# See for details: http://gentoo-wiki.com/HOWTO:_VirtualBox#Bridge_networking
# awk usage by pr3d4t0r (Eugene Ciurana) – thanks :)
# VBoxTunctl usage by Innotek User Guide, and support from #vbox.freenode.net – thanks :)

source /etc/profile

PROXY_USED=““;
depend() {
# depend() function:
# Copyright 1999-2004 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
need net
before netmount
if [ -n „$PROXY_USED“ ];
then
after $PROXY_USED
fi;
};

start() {
ebegin „Starte VirtualBox-Bridging…“
awk ‚/vbox/ { system(sprintf(„VBoxTunctl -u %s -t %s && ifconfig %s up“, $2, $1, $1)); }‘ /etc/vbox/interfaces;
eend ${?}
};

stop() {
ebegin „Stoppe VirtualBox-Bridging…“
awk ‚/vbox/ { system(sprintf(„VBoxTunctl -d %s“, $1)); }‘ /etc/vbox/interfaces;
eend ${?}
};

Das Skript muss mittels chmod 755 vbox ausführbar gemacht werden.

Nun sollte das Netzwerk neu gestartet werden. Ein ifconfig zeigt auf meinem System nun:

pir187 ~ # ifconfig
br0 Protokoll:Ethernet Hardware Adresse 00:11:D8:6A:3B:EF
inet Adresse:192.168.1.1 Bcast:192.168.1.255 Maske:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1492 Metric:1
RX packets:176058 errors:0 dropped:0 overruns:0 frame:0
TX packets:173944 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:0
RX bytes:105089274 (100.2 Mb) TX bytes:59069321 (56.3 Mb)

eth0 Protokoll:Ethernet Hardware Adresse 00:11:D8:6A:3B:EF
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:179034 errors:0 dropped:0 overruns:0 frame:0
TX packets:176898 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:110566363 (105.4 Mb) TX bytes:59466561 (56.7 Mb)
Interrupt:16 Basisadresse:0x8000

lo Protokoll:Lokale Schleife
inet Adresse:127.0.0.1 Maske:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:0
RX bytes:896 (896.0 b) TX bytes:896 (896.0 b)

vbox0 Protokoll:Ethernet Hardware Adresse 00:FF:73:7B:77:F8
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:3012 errors:0 dropped:0 overruns:0 frame:0
TX packets:12982 errors:0 dropped:1293 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:100
RX bytes:402232 (392.8 Kb) TX bytes:4022442 (3.8 Mb)

Die funktionierende Bridge muss nun noch zum Brücken schlagen in die Konfiguration der VM aufgenommen werden:

  • VM stoppen
  • VM auswählen, „Ändern“ -> „Netzwerk“ -> „Adapter 1“ (zweites Interface nach „Adapter 0“ mit NAT-Konfiguration)
  • „Netzwerkapadater aktivieren“ anklicken
  • unter „Angeschlossen an“ „Hostinterface“ auswählen
  • „Netzwerkkabel angeschlossen“ auswählen :)
  • unter „Einstellungen für Hostinterface“ -> „Name des Interfaces“ „vbox0“ eintragen
  • Dialog mit „OK“ schließen

Nach dem Start der VM sollte der neue Adapter dann unter Windows XP automatisch mit einer DHCP-IP-Adresse versorgt werden. Diese kann man, um eben z.B. Serverdienste durch die VM ausführen zu lassen, auf eine statische IP-Adresse umstellen.

Auf meinem System traten keine Berechtigungsprobleme auf, wie sie in meinem Quellartikel im Gentoo-Wiki erwähnt werden. Im Fall des Falles kann dort evtl. eine Lösung gefunden werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert