PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kvm/qemu bridge netzwerk



simonb
25.05.09, 10:28
Hallo
ich bekomme einfach dieses bridge netzwerk fuer
qemu nicht zum laufen
ich beziehe mich hier auf:
http://www.linuxforen.de/forums/showpost.php?p=939854&postcount=9
(kvm/quemu netzwerk)

ausgangssituation:
host suselinux11.0
gast winxpprof
sudo ist konfiguriert
kvm wird verwendet mit beschleunigungsmodulen

in der oben genanten howto, punkt:
8.5) Virtuelle Netzwerke, "Bridged"-Netzwerke

habe bei mir keinen dhc client am laufen, weswegen ich das
start- stopscrips etwas abaendern musste:

der rechner hat eine hardware 1000bps karte auf eth0
am laufen, die manuell auf 192.168.0.21 gestetzt
ist. vollen zugriff auf alles
(im host laeuft eine standart 100bps karte, stoert
das dass die unterschiedliche geschwindigkeiten haben?)

qemu-ifup
#!/bin/sh
sudo /sbin/brctl addbr bri0
sudo /sbin/ifconfig eth0 0.0.0.0
sudo /sbin/brctl addif bri0 eth0
sudo /sbin/ifconfig bri0 192.168.0.21
sudo /sbin/route add default gw 192.168.0.99
sudo /sbin/ifconfig $1 0.0.0.0 up
sudo /sbin/brctl addif bri0 $1

nun habe ich das problem
a) wie gebe ich der virtuellen maschine eine ip adresse?
(wenn ich das in der linie sudo /sbin/ifconfig $1 0.0.0.0 up
anstelle der nullen eintrage kommt ein ping von virtuell
nach 192.168.0.21 nicht mehr an)
b) wenn die dann eine ip adresse hat, kann ich diese
dann auch ohne weiteres von anderen rechnern die
ueber netzwerk mit eth0 verbunden sind ansprechen?

c) vom gast aus kann ich lediglich die 192.168.0.21 anpingen,
nicht jedoch irgend eine andere adresse im netz.
(gast windows xp habe ich folgendes eingetragen:
ip: 192.168.0.28
subnet 255.255.255.0
gateway 192.168.0.21)
ist das ueberhaupt richtig?


enventuell noch interessant:
winxp meldet sich mit lanverbindung2 100Mbit
(anmerkung: eine lanverbindung1 existiert nicht)

so, ich glaube nach loesen dieser fragen sollte es prinzipiell
gehen. weitere 3 fragen:

1) ich sollte noch eine zweite netzwerkkarte mit einer
bestimmten hardwareadrersse im gast haben
(den ganzen muell mache ich, da ich in meiner
kleinen firma keinen windows rechner mehr habe jedoche
einen neue maschinensteuersoftware nicht anderst
zum laufen bekomme)
wie muesste der befehl fuer qemu heissen (das
waere die beste loesung um protabel zu bleiben)


2) wem muss ich denn welche rechte geben um
kvm als user starten zu koennen
/dev/kvm habe ich mir die rechte gegeben.
jedoch der sound geht nicht dann nur unter root
wo muss ich denn noch welche rechte vergeben?

3) die e1000 treiber pro2kxp_v14_0.exe
findet keine intel karte auch wenn ich
e1000 in der befehlszeile angebe und eine
neue hardware im gast xp gefunden wird.

gruss,

simon bechereR

simonb
25.05.09, 18:36
So, ein problem konnte ich nun selber loesen:
(leider das unwichtigste)
der e1000 treiber konnte
installiert werden wenn man waerend
des instalationsvorganges (nachdem
entpacken der dateien) diese
sich aus:
c:/Dokumente und Einstellungen/benutzername/Lokale Einstellungen/temp/
herauskopiert (denke das verzeichnis ist unsichtbar)
wichtig, nicht das setup programm schliessen, da es die
dateien loescht.

gruss,

simoN

simonb
25.05.09, 20:36
So, nun noch ein problemchen weniger,
die windows firewall abschalten, und schon geht
von aussen ein ping rein.

bleibt aber das problem, dass ich von keinem
anderen rechner den virtuellen rechner sehen,
ausser auf dem auf dem er laeuft,
und umgekehrt ists genau so, der virtuelle
sieht nur den rechner auf dem er lauft.

scheint mir also ein problem des hosts und
dessen routing oder so zu sein?????!!!!!!

simoN

simonb
30.05.09, 09:32
So,
wenn man die suse firewall beim host auf "intern" also
alle ports offen stellt, hat man den obigen effekt.
(was ich bei meinen ganzen versuchen auch hatte)
abhilfe schafft bei mir nur das komplette abschalten der firewall.
dann werden alle rechner im netz in dem sich
der host befindet, auch beim gastrechner fuendig,
ebenso kann der gast alle rechner ansprechen, die
im realen netz sind.

leider habe ich immer noch keine internet anbindung des
gastes. (namen werden aufgeloest, aber es gibt keine
verbindung zu den http / ftp etc. seiten).
woran das nun wieder liegt ist mir nach wie vor
schleirhaft.

simoN

ps: zweite netzwerkkarte ist einfach zu installieren in
dem man den -net befehl zweimal hintereinander in
der qemu /kvm befehlszeile einsetzt.
..... -net nic -net tap -net nic,macaddr=xx-xx-xx-xx-xx-xx,vlan=1
(xx) steht jedes mal fuer eine hexadezimale zweistellige nummer)
die zweite wird nicht mit dem host verbunden, was ich ja auch
nicht wollte, die ist praktisch nur wegen der mac adresse da,
die sollte dann noch irgend eine interene ip adresse bekommen,
die im realen netzwerk nicht stoert.

pps: bleiben also noch 2 fragen zu klaeren:

was muss ich alles rechte vergeben um kvm/quemu ohne
root rechte starten zu koennen?

warum komme ich nicht ins internet?

stefan.becker
30.05.09, 09:45
Tja, root tut leider Not hierbei. Ich habe die passenden Befehle immer per sudo gestartet, anders geht es wohl nicht.


Zum Internetzugriff: Versuche mal, den Router im Gast fest als DNS Server einzutragen.

simonb
30.05.09, 15:57
Mh,
als dns server habe ich im gast meinen dsl router angegeben.
als router habe ich den host angegeben.

die namen loest er auch auf, nur wie
gesagt, kommen tut sonst nix (soweit ich als aussenseiter
von netzwerken das beurteilen kann)
hab auch schon im router geschaut ob ich versehentlich
die virtuelle kist blockiere, fehlanzeige, die hat eigentlich
vom router her freien zugriff.
ich bekomme auch kein ping von der virtuellen
maschine ins internet zb: ping google.de
obwohl er mir dann den namen aufloest.
von allen anderen rechnern im realen netz gehts

mh, das mit dem starten des qemu als root ist nicht schoen.
meine die netzwerkkonfiguration habe ich auch als
sudo drin. weisst du zufaellig wenigstens wo
ich fuer den sound mir die rechte geben muesste?

(fuer starten ohne netzwerk und ohne sound reicht ja
wenn ich mir /dev/kvm anschaue, es gehoert der gruppe
kvm, welche ich meinem benutzer zuweise.
dann konnte ich kvm, leider jedoch ohne sound, als normaler
user starten)


simoN

simonb
30.05.09, 17:11
So, nun
noch ne loesung in eigener sache:

hatte zwar in meinem host, suse11.0 im yast / netzwerk /routing
ein kreutzchen bei 'ip weiterleitung aktiv'
das alleine bringt aber (bei mir) noch nichts.
im qemu-ifup script muss bei mir zwingend folgende linie mit rein:

sudo /bin/echo 1 >/proc/sys/net/ipv4/ipforward
(diese linie geht leider nur wenn man eh root ist,
anmerkung vom 28.05.2011)

und im qemu-ifdown der ordnung halber dort wieder ne null rein.

damit konnte ich mit dem host nun endlich ins internet.

so, jetzt bliebe nur noch uebrig dass du stefan in deine huebsche
anleitung "wie's gemacht wird", noch die ein oder andere info
bezueglich der firewalls und der obigen linie einfliessen laesst.
dann waere die perfekt.

gruss,

simoN

ps: natuerlich mach ich den ganzen internet quatsch wieder
rueckgaengig, will ja kein "zwilichtiges" betriebssystem in meinem
netzwerk solche zugriffe geben......

simonb
28.05.11, 21:56
Ich weiss nicht ob das noch jemand interessiert,
aber ich habe nun aufbauend auf meiner obigen instalation
saemtliche probleme geloest:

1) qemu-kvm als user (mit sound und netzwerk)
2) firewall von suse muss nicht mehr abgeschaltet werden
3) mehrere parallel laufende virtuelle maschinen einfach
mit nicht resistenter bruecke und tap devices laufen lassen
(ohne virtual machine manager)

ich versuche nun hier ne nette anleitung zu machen,
wies geht (das ganze sollte ziemlich systemunabhaengig sein):

voraussetzung (kvm 0.14.1 auf suse 11.4):
a) tunctl und bridge-utils muessen installiert sein
b) "benutzer" der (eventuell zu erstellenden) gruppe kvm zuordnen
(eventuell siehe oben, /dev/kvm dieser gruppe zuordnen)


0) rechte fuer "benutzer" im sudo vergeben:
datei: /etc/sudoers
eine linie wie folgt reinmachen:
benutzer>ALL = (root) NOPASSWD: /sbin/brctl,/sbin/ifconfig,/sbin/dhclient,/sbin/route,/sbin/ip,/usr/sbin/iptables,/sbin/tunctl,/etc/init.d/SuSEfirewall2_setup
damit kann der "benutzer" all die in dieser linie beschriebenen
programme OHNE passwort benutzen ->sicherheitstechnisch
nicht perfekt aber einfach. (man kanns ja auch mit passwort versehen..)
(geht sicher auch ueber yast oder so)


1) kenerl module laden (bei mir amd-prozessor) daher:
modprobe -r kvm
modprobe -r kvm_amd
oder besser das ganze beim sytemstart machen lassen:
(steht in /etc/sysconfig/kernel drin)
be suse: yast system editor_fuer_sysconfig_dateien kernel
MODULES_LOAD_ON_BOOT eintragen: kvm kvm_amd
(oder eben das andere teil fuer intel (siehe genug andere foren)
(kann auch sein dass der ganze schritt schon erledigt ist,
pruefen ob bei "lsmod |grep kvm" was raus kommt)

2) routing setzen: entweder mit bin/echo 1 >/proc/sys/net/ipv4/ip_forward
(weiss aber nicht ob das nach systemstart drin bleibt, und man
braucht immer root dafuer) oder aber bei suse yast
netzwerkgeraete netzwerkeinstellungen routing "ip_weiterleitung
aktivieren"

3) erstellen einer "qemu-ifup" datei mit leserechten fuer den "benutzer"
im /etc verzeichnis mit dem inhalt:
sudo /etc/init.d/SuSEfirewall2_setup restart
(das ist bei suse notwendig, sonst hat die qemu-kvm nur zugriff
auf den eigenen rechner, nicht jedoch auf andere im netzwerk,
warum ist mir schleierhaft)
weitere einstellungen scheinen mir bei der firewall unnoetig, es kommt
darauf an dass waerend man einen qemu-kvm laufen hat an der firewall
dran rum gefummelt wird. (man kann in yast firewall schnittstellen
benutezrdefiniert den eintrag von bri0 und tun0 tun1 etc. machen
obs aber ne auswirkung hat wage ich zu bezweifeln....)


4) das hier nun abgebildete scrip auf seine eigenen beduerfnisse anpassen:
das script ist unschoen programmiert, (ist mein erstes linux-scrip mit
diversen auswertungen) aber es funktioniert praechtig:
es legt (mein rechner hoert bisher aud den namen 192.168.0.21
und hat ein default gateway bei 192.168.0.99 (das eben fuer sich selber
anpassen) (bei mir alles statische adressen!!!)

das script macht folgendes: erstellen einer "bridge", erstellen eines
"tap" devices, starten von qemu-kvm, loeschen des tap devices
und wenn es das letzte tap device gewesen ist auch die bruecke
loeschen und alles wieder in urzustand bringen.
das meint dieses skript kann beliebig? oft ausgefuehrt werden einzig
man muss fuer jeden qemu-kvm ein so ein script haben, welches
die spezielle qemu-kvm linie drin hat.
welches dann als erstes gestartet oder welche virtuelle maschine dann
als erste abgeschaltet wird ist egal.
- was ich nicht pruefte da fuer mich uninteressant, wenn die qemu-kvm
maschinen von verschiedenen benutzern gestarte werden.
bei mir macht das immer EIN benutzer.
(in meinem script stehen 2 qemu kvm linien drin, eine ist ausgeklammert
was einfach meint eines meiner skripte hat die eine, das andere
die andere linie)
man muss darauf achten, dass man verschiedene mac adressen
bei der qemu-kvm linie hat - und natuerlich auch keine die
schon im lokalen system existiert - sonst gehts natuerlich schief.

---------------

#!/bin/bash

# hier zum abchecken ob dieses scrip schon einmal gestartet
# wurde oder nicht (doppelter start von qemu-kvm-images vermeiden)
name=name_der_statusdatei

grep aus /home/benutzer/kvm-images/$name
status=$?
if [ "$status" = "0" ]
then
# schaltet (globalen) merker dass das skript und damit dieses qemu image
# gestartet wird
echo an > /home/benutzer/kvm-images/$name

#wenn noch nicht getartet dann mache alles was nun folgt



bridge=bri0
tap=$(/usr/bin/sudo /sbin/tunctl -u $(/usr/bin/whoami) -b)

# jetzt kontrolle ob dieses tap-device das erste ist was angelegt wird
# dann naemlich auch bruecke anlegen etc.

if [ "$tap" = "tap0" ]
then
sudo /sbin/brctl addbr $bridge
sudo /sbin/brctl stp $bridge off
fi

sudo /sbin/ifconfig $tap 0.0.0.0 up
sudo /sbin/brctl addif $bridge $tap

if [ "$tap" = "tap0" ]
then
sudo /sbin/ifconfig eth0 0.0.0.0 up
sudo /sbin/brctl addif $bridge eth0

sudo /sbin/ifconfig $bridge 192.168.0.21 up
fi

sudo /sbin/ip link set $tap up

sleep 1s

if [ "$tap" = "tap0" ]
then
sudo /sbin/route add default gw 192.168.0.99
fi

qemu-kvm -enable-kvm -hda name-des-qemu.img -cdrom name-einer-cd.iso -no-reboot -usb -usbdevice tablet -soundhw ac97 -localtime -net nic,macaddr=52-54-00-12-34-56,model=e1000 -net tap,ifname=$tap,downscript=no -m 512 -cpu host -k de -monitor stdio

# qemu-kvm -enable-kvm -hda name-eines-anderen.img -cdrom name-anderer-cd.iso -no-reboot -usb -usbdevice tablet -localtime -net nic,macaddr=52-54-00-12-35-57,model=e1000 -net tap,ifname=$tap,downscript=no -m 1024 -cpu host -vga std -k de -monitor stdio



sudo /sbin/brctl delif $bridge $tap

sudo /sbin/ip link set $tap down
sudo /sbin/tunctl -d $tap

# ab hier kontrolle ob mit ifconfig noch ein anderes tap-device
# sichtbar ist um wenn es das letzte war
# alle einstellungen wieder rueckgaengig zu machen

sudo /sbin/ifconfig | grep "tap"
if [ "$?" = "1" ]
then
sudo /sbin/brctl delif $bridge eth0
sudo /sbin/ifconfig $bridge down
sudo /sbin/brctl delbr $bridge
sudo /sbin/ifconfig eth0 192.168.0.21
sudo /sbin/route add default gw 192.168.0.99
else
echo "andere tap-devices online!!"
fi


#schaltet merker dass das skript und damit qemu ausgeschaltet wurde
echo aus > /home/benutzer/kvm-images/$name

# hier der rest der abfrage ob nun das skript schon einmal
# gestartet wurde oder nicht

elif [ "$status" = "1" ]
then
echo "WURDE SCHON GESTARTET !!!!!"
else
echo "FEHLER Statusdatei nicht gefunden!!!"
fi


-----------------------------------------------------------
die statusdatei ist einfach eine textdatei die beim ersten start
den inhalt: aus
haben muss, dann startet das skript die qemu-kvm-relvanten sachen.
existiert die datei nicht oder steht was anderes drin, dann
wird nichts gemacht (also datei fuers erste starten anlegen)
natuerlich muss der name der datei fuer jedes script und
damit fuer jede qemu-kvm-linie einmalig sein.

so, der qemu monitor ist mit obigen linien in der konsole, aber die linie
sollte man vorher eh ausgeknobelt haben, das sind einfach halt qemu
startlinien fuer meine beduerfnisse.

nun noch am rande, da ich mit meinen instalationen hier noch
alte windows rechner winME (sollte auch bei win98 gehen) ansprechen musste und feststellte
dass nicht mehr ohne weiteres mit samba geht, und auch
im internet mehrfach behauptet wird es geht ueberhaupt nicht
mehr mit neuen distributionen von linux hier die alte (samba)
und neu (cifs) linie fuer den automnt:

alt:
link-verzeichnisname -fstype=smbfs,uid=1000,gid=100 ://SERVERNAME/freigabenameaufwinme
neu:
link-verzeichnisname -fstype=cifs, uid=1000, gid=100, sec=lanman, servern=SERVERNAME ://SERVERNAME/freigabenameaufwinme

(das nur um den unterschied dar zu stellen)

so, das wars hoffe habe nix wichtiges vergessen...
aja und wenn zum bsp. winxp in der box aus unerklaelichen
gruenden immer wieder abschmiert, bei mir lags an einem
veralteten mainbord bios des hosts, ...obwohl nichts darauf hin deutetet!!
bios update und schon liefs fein....

gruss und frohes gebastele da draussen,

simoN