Bei den folgenden Netzwerkkonfigurationen ist immer ein Desktop-PC mit Internet Zugang die Ausgangsbasis, es wird hier keine Anbindung in ein umfangreicheres Netzwerk vorgenommen.
Als Netzwerktechnik in Qemu wird daher immer der Userstack (Parameter "-net nic -net user") verwendet. Dieses entspricht in VMWARE einer Kombination der "Host-Only-" (Zugriff auf Hostrechner) und "NAT-" (Internetzugriff) Technik.
Hinweis: Bei dieser Konfiguration wird die automatische Suche nach Ressourcen in der Netzwerkumgebung in einem Windows Gast nicht funktionieren. Hier muss stattdessen manuell die jeweilige Verknüpfung (also ein Samba Share bzw. der Drucker) angegeben werden.
Für eine erweiterte Netzwerkeinrichtung siehe 8.3).
8.1) Drucken und Dateizugriff per Samba
8.1.1) Benutzung des Samba Servers des Hosts
Bei dieser Methode wird der Samba Server des Hosts benutzt. Dieser muss natürlich vor Benutzung erstmal konfiguriert werden. Das ist zwar aufwändiger als die Methode aus 8.1.2), dafür ist allerdings auch die Benutzung der Drucker des Hosts als Netzwerkdrucker möglich.
Der Host hat im folgenden immer die TCP-Adresse 10.0.2.2.
Vorgehensweise:
- Zunächst Samba installieren (Pakete "samba" und "samba-common", Namen distributionsabhängig)
- Die Samba-Configdatei editieren (in der Regel "/etc/samba/smb.conf")
Folgende Einstellungen habe ich ausgehend von der Beispieldatei geändert:
Code:
[global]
...
printcap name = /etc/printcap
load printers = yes
cups options = raw
show add printer wizard = yes
printer admin = root, @dein_username
guest account = nobody
...
[printers]
comment = All Printers
printable = yes
path = /tmp
guest ok = yes
[qemu]
comment = Temporary file space
path = /tmp
read only = no
public = yes
Im Anhang findet sich die geänderte Basis-"smb.conf" (samba 3.x).
- Einen User in Samba anlegen
Code:
smbpasswd -a stefan
Username und Kennwort genau wie der User, der später "qemu" startet. Dieser User muss später auch im Windows Gast mit gleichem Usernamen und Kennwort angemeldet werden. Obigen Befehl als root starten!
- Samba (neu) starten (/etc/init.d/smb restart) oder Rechner neu starten
- Qemu starten mit zusätzlichem Parameter
Code:
qemu ... -net nic -net user
- Einrichten des Netzwerkes im Windows-Gast
Installiert werden muss zusätzlich der Microsoft Client. In der Netzwerkumgebung taucht der Host nicht auf, es sollte aber trotzdem klappen.
Unter Win95/98/ME muss zusätzlich die Datei "c:\windows\lmhosts" erstelt werden. Inhalt: "10.0.2.2 smbserver".
In den Netzwerkeinstellungen muss die gleiche Arbeitsgruppe wie beim Sambaserver eingestellt sein, bei Tests habe ich MYGROUP verwendet.
Drucker: Netzwerkdrucker hinzufügen. Heisst der Drucker z. B. am Host "usblp0", muss als Anschluss "\\smbserver\usblp0" (Window 95/98/ME) bzw. "\\10.0.2.2\usblp0" (NT/2K/XP) gewählt werden. Abhängig von der Art der Queue muss der passende Treiber gewählt werden, bei einer Postscript Queue kann man z. B. den Apple Laserwriter nehmen.
SMB-Share: "net use x: \\smbserver\qemu" (95/98/ME) bzw. "net use x: \\10.0.2.2\qemu" (NT/2K/XP) in einer DOS-Kommandozeile eingeben. Damit kann man dann unter Laufwerk "x" auf das "/tmp"-Verzeichnis des Hosts zugreifen. Natürlich geht das ganze auch per Explorer/Extras/Netzlaufwerk verbinden.
Weitere Hinweise zur Einrichtung eines Samba-Servers siehe Samba-Howto:
http://www.linuxforen.de/forums/showthread.php?t=18923
http://gertranssmb3.berlios.de/output/
Drucken: Hinweise zu NT/XP/2K
Falls die obige Methode mit der Auswahl des Netzdruckers nicht geht, folgende Methode testen im Gast:
- lokalen Drucker mit Treiber passenden Typs installieren, Anschluss "lpt1:"
- Kommandozeile öffnen
- Befehl eingeben
Code:
net use lpt1 \\10.0.2.2\usblp0 /PERSISTENT:YES
"usblp0" muss natürlich durch die passende Druckerqueue ersetzt werden.
Durch den net use-Befehl wird die lokale lpt1-Schnittstelle des Gastes auf den Netzdrucker umgelenkt. Warum es so geht? Keine Ahnung, aber es geht :-)
Windows 9x+ME / Samba ab 3.20
Nach Umstellung auf Samba ab 3.20 bekommt der Windows 98 Gast keine Netzwerkverbindung mehr zu Samba Shares. Es wird gemeldet, dass ein Kennwort gebraucht wird, obwohl User/Kennwort exakt das gleiche sind wie am Host.
Lösung: Die Optionen
Code:
lanman auth = Yes
client lanman auth = Yes
zur Samba [global] Konfiguration hinzufügen.
Howtos zu Cups / Samba
http://gertranssmb3.berlios.de/outpu...html#id2564439
http://www.linuxprinting.org/kpfeifl...1th-draft.html
8.1.2) Benutzung des Qemu Samba Servers
Bei dieser Methode wird der in Qemu integrierte Samba Server benutzt. Es ist keine Konfiguration notwendig, der Drucker ist dann nicht über Samba ansprechbar, kann aber über den Umweg Internet Printing Protocol / Cups benutzt werden, siehe dazu 8.1.3)
Der Host hat im folgenden immer die TCP-Adresse 10.0.2.4.
Ein Samba Server muss auch hier installiert sein (Pakete "samba", "samba-common", Name abhängig von der Distribution). Der Samba Server muss aber nicht konfiguriert werden.
Zunächst wird Qemu gestartet:
Code:
qemu ... -net nic -net user,"smb=/tmp"
Hierdurch wird das Verzeichnis "/tmp" im Windows Gast verfügbar, es kann natürlich auch jedes andere Verzeichnis eingebunden werden.
Dann muss im Gast die Zeile "10.0.2.4 smbserver" in die Datei "lmhosts" eingetragen werden (XP: "c:\windows\system32\drivers\etc", 2K: ""c:\winnt\system32\drivers\etc", 9x/ME: "c:\windows").
In einer Kommandozeile des Gasts kann man einfach eine Kommandozeile öffnen und folgenden Befehl eingeben.
Code:
net use x: \\smbserver\qemu /PERSISTENT:yes
Die Freigabe wird dann als Laufwerk "X:" eingebunden.
8.1.3) Benutzung des Druckers über CUPS / Internet Printing Protocol
Falls Cups am Host installiert ist, kann man darüber den Drucker auch ohne Samba nutzen. Dazu wird das sogenannte IPP-Internet Printing Protocol verwendet.
Windows 2000/XP:
- Drucker hinzufügen
- Netzwerkdrucker auswählen
- Verbinden mit URL auswählen
- Treiber für passendes Modell installieren
Als URL muss z. B. eingegeben werden:
Code:
http://10.0.2.2:631/printers/usblp0
"usblp0" ist zu ersetzen mit dem Druckernamen am Host.
Windows 9x/ME: Es muss ein zusätzliches Software Paket für den IPP-Support installiert werden. Download unter:
http://tig.csail.mit.edu/printing/windows/win9x.html
Software installieren, neu starten, dann Drucker wie oben mit der URL als Pfad eingeben.
Hinweis zur CUPS-Konfiguration, falls der Drucker im Gast nicht erkannt wird:
- Webbrowser am Host starten, URL eingeben: http://localhost:631
- Registerkarte Verwaltung
- Einstellungen setzen
- a) "Verteile publizierte Drucker welche mit diesem System verbunden sind"
- b) "Erlaube entfernte Verwaltung"
8.2) Scannen über Netzwerk
Es ist möglich, am Host angeschlossene Scanner im Windows Gast zu nutzen. Einzige Bedingung: Der Scanner muss in Sane eingerichtet sein und funktionieren.
Vorgehensweise:
- Sane und Scanner installieren & einrichten, z. B. nach folgendem Howto:
http://www.linuxforen.de/forums/show...hreadid=37567&
- Saned (Netzwerk Scanner Daemon) einrichten, z. B. nach folgendem Howto:
http://penguin-breeder.org/sane/saned/
- Windows Gast mit Netzwerk starten
Code:
qemu ... -net nic -net user
- Im Windows Gast die Sane-Twain-Bridge installieren. Download und Anleitung:
http://sanetwain.ozuzo.net/
In Windows ist Twain eine Standard-Scanner-Schnittstelle. SaneTwain emuliert diese und lenkt Twain-Zugriffe über das Netzwerk auf Host-Sane um.
Der Treiber besteht aus 2 Dateien:
Code:
copy sanetwain.ds c:\windows\twain_32
copy scanimage.exe c:\windows
Damit steht der Scanner im Windows Gast zur Verfügung. Zum Beispiel kann man dann direkt Windows OCR-Software nutzen.
Bei Suse Linux kann der Scanner über Yast2 komfortabel im Netzwerk freigegeben werden:
- Yast2 starten
- Hardware, Scanner starten
- Button "Andere", "Scannen via Netzwerk" wählen
- In "Zulässige Clients für saned die IP-Adresse des Windows Gastes eintragen
- "Vordefinierte Konfiguration" / "Konfiguration mit lokalem Host" wählen
8.3) TUN/TAP Netzwerk
Das oben benutzte User-Netzwerk hat einige Einschränkungen. Z. B. ist kein Ping vom Host zum Gast möglich, kein UDP etc.
Durch die Benutzung eines (virtuellen) TUN/TAP-Adapters erhält der Qemu Gast eine vollständige TCP/IP Anbindung.
Dazu sind einige Vorarbeiten notwendig.
Die folgende Konfiguration setzt für den Internetzugang einen Router voraus, der auch gleichzeitig der DNS-Server ist.
Der Host erhält die feste IP-Adresse "10.0.0.1", der Gast "10.0.0.2".
8.3.1) Kernel
Der TUN/TAP-Adapter muss vom Kernel unterstützt werden. Bei aktuellen Distributionen ist dies sicher der Fall, so dass die folgenden Zeilen übersprungen werden können.
Für Linuxbastler: folgende Optionen müssen im Kernel aktiviert sein:
- CONFIG_TUN (Device Drivers / Network device support -> Universal TUN/TAP device driver support)
- CONFIG_IP_NF_CONNTRACK (Connection tracking)
- CONFIG_IP_NF_IPTABLES (IP tables support)
- CONFIG_IP_NF_NAT (Full NAT)
Laden des TUN-Moduls
Folgende Zeile in die Datei /etc/modprobe.conf einfügen:
"alias char-major-10-200 tun"
Anschließend als root "/sbin/depmod -a" ausführen.
8.3.2) TUN-Device anlegen
Nur falls die Datei "/dev/net/tun" nicht existiert bzw. ein älteres System ohne UDEV eingesetzt wird!
- login als root
- cd /dev
- mkdir net
- cd net
- mknod /dev/net/tun c 10 200
- chmod 666 tun
8.3.3) Zugriffsrechte setzen
Qemu selbst sollte als User gestartet werden. Einige Befehle zur Generierung des virtuellen TUN/TAP Adapters erfordern jedoch Root-Rechte.
Daher muss zunächst "sudo" installiert werden. Das ermöglicht das Starten von Programmen als User mit Root-Rechten.
In der Einstellungsdatei "/etc/sudoers" werden Programme angegeben, die vom User gestartet werden können. Daher folgende Zeilen anhängen ("username" durch eigenes Login ersetzen):
Code:
username ALL=NOPASSWD:/sbin/ifconfig
username ALL=NOPASSWD:/sbin/iptables
username ALL=NOPASSWD:/bin/echo
username ALL=NOPASSWD:/bin/chmod
8.3.4) Qemu-Startscript
Die Datei "/etc/qemu-ifup" erstellen:
Code:
#!/bin/sh
sudo /sbin/ifconfig $1 10.0.0.1 up
sudo /sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
sudo /bin/echo "1" >/proc/sys/net/ipv4/ip_forward
Die Schnittstelle "eth0" muss auf die Bezeichnung des Netzadapters des Hosts eingestellt werden (wlan0, eth1 etc.).
Braucht man keine Internetverbindung im Gast, reicht die 1. Zeile des Scriptes.
Das Script muss mit "chmod 755 /etc/qemu-ifup" ausführbar gemacht werden.
8.3.5) Qemu starten
Einfache Methode (bis Kernel 2.6.17)
Code:
sudo chmod 666 /dev/net/tun
qemu ... -net nic,vlan=0 -net tap,vlan=0,ifname=tap0
Beim Qemu-Start wird das Script "/etc/qemu-ifup" gestartet.
Hinweis von RayJones:
Rechte auf "/dev/net/tun" lassen sich alternativ so herstellen:
- Der Befehl "sudo chmod 666 /dev/net/tun" entfällt.
- Gruppe "net-tun" anlegen.
- Die Anwender, die qemu starten, dieser Gruppe zuordnen.
- Die Datei "/etc/udev/rules.d/50-udev-default.rules" im Editor öffnen.
- Eintrag für das Modul "tun" suchen und abändern:
Von:
Code:
KERNEL=="tun", NAME="net/%k"
Nach:
Code:
KERNEL=="tun", NAME="net/%k", GROUP="net-tun", MODE="0660"
Ab Kernel 2.6.18
Alternative 1
Man benötigt root-Rechte, um das Tun/Tap-Interface zu konfigurieren. Deshalb legen wir zunächst ein Script "qemu-tap" an mit folgendem Inhalt:
Code:
#!/bin/sh
# script to manage tap interface allocation
# for linux kernels >= 2.6.18
# set up a tap interface for qemu
# USERID - uid qemu is being run under.
USERID=`whoami`
iface=`sudo tunctl -b -u $USERID`
# generate a random mac address for the qemu nic
# shell script borrowed from user pheldens @ qemu forum
ranmac=$(echo -n DE:AD:BE:EF ; for i in `seq 1 2` ; \
do echo -n `echo ":$RANDOM$RANDOM" | cut -n -c -3` ;done)
# specify which NIC to use - see qemu.org for others
model=ne2k_pci
# start qemu with our parameters
qemu $@ -net nic,vlan=0,macaddr=$ranmac,model=$model \
-net tap,vlan=0,ifname=$iface
# qemu has stopped - no longer using tap interface
sudo tunctl -d $iface &> /dev/null
Das Script per "chmod +x qemu-tap" ausführbar machen. Der Befehl "tunctl" muss in die Datei "/etc/sudoers" aufgenommen werden. Der Befehl "tunctl" befindet sich z. B. bei Suse im Paket "uml-utilities".
Statt "qemu -hda ... -net nic -net tap" lässt man im Startbefehl die net-Befehle weg und startet statt "qemu" dann "qemu-tap":
Quelle: http://qemu-buch.de/cgi-bin/moin.cgi...AskedQuestions
Alternative 2
Einrichtung wie oben (vor Kernel 2.6.18). Dann aber Qemu in "/etc/sudoers" eintragen und Qemu per "sudo qemu ..." starten.
8.3.6) Einrichung im Gast
Im Gast muss folgendes eingestellt werden:
- IP-Adresse: 10.0.0.2
- Maske: 255.0.0.0
- Gateway: 10.0.0.1
- DNS-Server: IP-Adresse des Routers (z. B. 192.168.2.1)
Drucker und Verzeichnisse des Hosts lassen sich am einfachsten per Samba nutzen. Dazu muss ein eigener Samba-Server eingerichtet werden, siehe oben.
Quelle: http://www.debian-administration.org/articles/40
8.4) Zwischenablage über das virtuelle Netzwerk
8.4.1) ShareClip
Download: http://share-clip.softpedia.com//
ShareClip ist eine reine Zwischenablage zwischen PCs über TCP/IP, kann also auch bei obiger Konfiguration als Zwischenablage zwischen Host und Gast verwendet werden.
Es gibt Clients für Linux, Windows und MacOS.
Das Programm muss am Host und am Gast gestartet werden. Beim Verbinden muss jeweils die IP-Adresse des Gegenparts angegeben werden. Im obigen Beispiel also:
- Host: 10.0.0.2
- Gast: 10.0.0.1
Wenn das Programm auf beiden Seiten läuft und die Verbindung steht, erfolgt die Synchronisation der Zwischenablage von Gast und Host automatisch.
8.4.2) Qemu Guest Tools
Homepage: http://wolfpackally.wo.funpic.de/qemu/qgt/
Paket besteht aus 3 Programmen:
Host: "host-linux",
Gast: "guest-linux", "guestwin32"
Jedes der Programme wird mit der IP-Adresse des Hosts als Parameter gestartet (im Beispiel 10.0.0.1).
Beispiel für Qemu-Startdatei:
Code:
#!/bin/sh
sleep 5 && host-linux 10.0.0.1 &
qemu ... -net ...
killall -9 host-linux
Im Windows Gast das Programm über den Autostartordner beim Hochfahren starten mit dem Befehl:
Code:
guestwin32 10.0.0.1
Dieses Programm funktioniert übrigens auch ohne TUN/TAP mit dem User-Netzwerk.
8.5) Virtuelle Netzwerke, "Bridged"-Netzwerke
8.5.1) Bridge
Mit der folgenden Konfiguration taucht der Qemu-Gast als eigener PC im Netzwerk auf und hat vollen Zugriff auf alle Ressourcen.
Script "/etc/qemu-ifup" editieren:
Code:
#!/bin/sh
sudo /sbin/brctl addbr bri0
sudo /sbin/ifconfig eth0 0.0.0.0
sudo /sbin/brctl addif bri0 eth0
sudo /sbin/dhclient bri0
sudo /sbin/route add default gw 192.168.2.1
sudo /sbin/ifconfig $1 0.0.0.0 up
sudo /sbin/brctl addif bri0 $1
Script "/etc/qemu-ifdown" editieren:
Code:
#!/bin/sh
sudo /sbin/brctl delif bri0 $1
sudo /sbin/brctl delif bri0 eth0
sudo /sbin/ifconfig bri0 down
sudo /sbin/brctl delbr bri0
sudo /sbin/dhclient eth0
sudo /sbin/route add default gw 192.168.2.1
IP-Adresse des Routers (hier 192.168.2.1) und Netwerkkarte (hier eth0) sind entsprechend anzupassen. Die Befehle müssen in der "/etc/sudoers" stehen. Das Paket "bridge-utils" muss installiert sein (brctl). Außerdem die Scripte ausführbar machen (chmod +x /etc/qemu-if*).
Qemu wird dann so gestartet:
Code:
qemu ... -net nic -net tap
Die Bridge wird also beim Starten des Gastes dynamisch angelegt (qemu-ifup) und beim Beenden des Gastes wieder abgebaut (qemu-ifdown).
8.5.2) VDE
Mit VDE kann man beliebige Netzwerkstrukturen generieren. Alles weitere siehe:
http://wiki.virtualsquare.org/index....sic_Networking
8.5.3) Links
http://lists.gnu.org/archive/html/qe.../msg00150.html
http://www.hants.lug.org.uk/cgi-bin/...QemuNetworking
http://wiki.qemu.org/download/qemu-doc.html / Kapitel "Network Emulation"
http://lists.gnu.org/archive/html/qe...DAJWgugtC1.txt
8.6) ISDN-Netcapi
Die ISDN-Karte des Hosts kann nicht direkt im Gast verwendet werden. Über folgenden Umweg kann man sie "mitbenutzen":
- Karte muss im Host funktionieren
- Netcapi-Server stellt über das virtuelle Netzwerk eine CAPI-Schicht zur Verfügung.
- Im Windows Client wird ein Netcapi-Client installiert
Beispiele:
- http://avm-capi4linux.berlios.de/
- http://www.shamrock.de/tools.htm#capiserv
- http://sourceforge.net/projects/capi20proxy
8.7) Typ der emulierten Netzwerkkarte
Standardmäßig emuliert Qemu eine ne2000-kompatible Netzwerkkarte. Es kann aber auch z. B. eine rtl8139-Karte emuliert werden:
Code:
qemu ... -net nic,vlan=0,model=rtl8139 -net tap,vlan=0,ifname=tap0
Als weitere Option wird eine Intel e1000-Gigabit-Karte emuliert:
Code:
qemu ... -net nic,vlan=0,model=e1000 -net tap,vlan=0,ifname=tap0
Treiber: http://www.intel.com/support/network/sb/cs-006120.htm
Weitere Optionen siehe "man qemu".
8.8) Seamless Desktop
Auch über Qemu/KVM lässt sich ein Seamless Desktop erreichen, also eine nahtlose Integration von Windows Anwendungen in den Linuxdesktop inkl. Mausrad und Zwischenablage.
Qemu wird dann im Hintergrund gestartet. Über das Paket "rdesktop" können dann einzelne Anwendungen oder auch das Windows Startmenü auf den Desktop gebracht werden.
Im Vergleich zu VMWARE (Unity Modus) oder VirtualBox erfordert die Lösung Bastelei, von daher sollte jemand, der das wirklich braucht, ein Produkt nehmen, womit das serienmäßig geht.
Grundvoraussetzungen auch hier:
- Ein Windows Gast mit Remote Desktop (z. B. XP-Professional, Vista, !kein XP-Home!)
- Qemu mit Hostonly Netzwerk oder Bridged, Ping in beiden Richtungen möglich. Das "User"-Netzwerk reicht nicht!
Zunächst muss Qemu im Hintergrund gestartet werden:
Code:
qemu ... -nographic -monitor "tcp:127.0.0.1:5502,server,nowait"
- "-nographic": Qemu läuft ohne grafische Ausgabe und kann auch ohne bzw. vor dem X-Server gestartet werden.
- "-monitor "tcp:127.0.0.1:5502,server,nowait"": Der Qemu-Monitor wird per telnet über Port 5502 ansprechbar.
Die Einrichtung des Gastes sowie die rdesktop Befehle sind analog zum Seamless Desktop mit VirtualBox: http://www.linuxforen.de/forums/show...07&postcount=8
Um während der Laufzeit den Gast zur Einbindung von Laufwerken etc. anzusprechen zu können, braucht man Zugriff auf den Qemu-Monitor. Dazu in einer Konsole folgenden Befehl starten:
Code:
telnet localhost 5502
Lesezeichen