QEMU umožňuje dva režimy práce v síti, první a jednodušší je napojení do uživatelského stacku TCP/IP. Což, pokud neexistuje soubor /etc/qemu-ifup
, o kterém si povíme více později, bude výchozí volba. Pokud soubor existuje a přesto chcete použít tento režim, přidejte do příkazového řádku volbu --user-net
. Tento režim provede napojení virtuálního stroje do user stacku IP protokolu, což vám umožní přístup na Internet, ale to je asi tak všechno.
Pokud potřebujete připojit virtuální stroj přímo do sítě, např kvůli připojení do domény windows, je nutno na hostujícím OS použít virtuální síťové rozhraní TAP/TUN. Takže asi nejlepší bude začít příkazem modprobe
tun
. Dále budete potřebovat bridge-utils, jejichž pomocí spojíme virtuální rozhraní s fyzickým do jednoho, takže virtuální stroj bude jakoby přímo připojen do sítě, což si lze jednoduše představit jako virtuální HUB (ano HUB, ne switch). Pro nastavení bridge jsem připravil jednoduchý skript, ze kterého je snad jasný princip vytvoření a připojení fyzického rozhraní.
#!/bin/bash
#Zde nastavte síťové rozhraní, na které bude připojen virtuální stroj
et=eth0
if=/sbin/ifconfig
br=/sbin/brctl
#Nastavení bridge br0 a připojení fyzického rozhraní
$br addbr br0
$if $et down
$if $et 0.0.0.0 promisc up
$br addif br0 $et
#Pokud používáte v síti DHCP server odkomentujte následující dva řádky
#$if br0 promisc
#/sbin/dhcpcd br0
#Pokud DHCP server nepoužíváte nastavte správnou IP adresu a odkomentujte
následující řádek
#$if br0 192.168.1.150 promisc up
Pokud chcete na svém PC používat QEMU často, je vhodné tento skript začlenit do spouštěcích skriptů. Jinak je možno ho spustit vždy jen před použitím emulátoru.
Dalším krokem je vytvoření souboru /etc/qemu-ifup
s následujícím obsahem:
#!/bin/bash
if=/sbin/ifconfig
br=/sbin/brctl
$if $1 0.0.0.0 promisc up
$br addif br0 $1
Pokud existuje tento soubor, použije QEMU při spuštění jako výchozí volbu –net tap, pokud soubor neexistuje bude výchozí volbou --user-net
, přesto se mi osvědčilo vždy používat volby --net tap --net nic
, které mi zaručily požadovanou funkci.
Tomuto skriptu je po spuštění QEMU, jako parametr ($1), předán název virtuálního rozhraní tun, které je následně nakonfigurováno a přidáno do bridge br0. Tím je zajištěno připojení virtuálního OS do sítě, přes naše fyzické rozhraní. Pokud byste potřebovali, aby byl zpracován jiný skript než výchozí, lze ho zadat parametrem -n skript
.
Jednotlivá tun rozhraní hostujícího OS připojená v bridge nemusí, ale mohou mít přidělenu IP adresu. Pokud si chcete ověřit nastavení bridge spusťte příkaz brctl show a budou vám vypsána všechna nakonfigurovaná rozhraní. Ve výpisu ifconfig by mělo být rozhraní br0 s platnou IP adresou.
V hostujícím operačním systému již provedeme nastavení tak, jako bychom ho připojovali přímo do naší sítě. Tudíž použijeme buď DHCP server, nebo pevnou IP adresu. V případě problémů lze opět použít konsoli QEMU, do které se přepneme pomocí CTRL-ALT-2 a na níž zadáme info network, mělo by dojít k vypsání nastavení sítové karty včetně MAC adresy. Pokud nám z nějakého důvodu nevyhovuje náhodně vytvořená MAC, lze ji zadat za parametr -macaddr
.
Pár rad na závěr
Pokud by bylo potřeba spouštět emulovaný stroj na pozadí, nejlépe po spuštění hostujícího OS, lze toho dosáhnout zadáním -nographic -monitor /dev/null
-serial /dev/null
. Tímto přesměrujeme jak konzoli monitoru, tak i sériovou konzoli do /dev/null
a QEMU spustíme bez grafického rozhraní. Pro svou potřebu jsem si vytvořil spouštěcí skriptík, do kterého jsem zadal veškeré nutné parametry:
#!/bin/bash
qemu -hda /var/lib/qemu/winxp.iso -boot c -m 256 -net nic -net tap -nographic
-monitor /dev/null -serial /dev/null
Tímto se mi spustí WinXP, na které se mohu připojit vzdálenou plochou po síti. Zkoušel jsem takto i Win 2003 SBS jako terminálový server, ale rychlost byla velmi mizerná.