V následujícím textu se budeme zabývat především virtualizátorem VirtualBox. Ten je velmi populární zejména kvůli jednoduchému nasazení, solidnímu výkonu a multuplatformnosti. Protože má řádkové ovládání, je možné jej nasadit i na serveru. Přestože budeme mluvit o VirtualBoxu, celý postup je použitelný i pro další virtualizační nástroje.
NAT nebo pot
Pokud si ve VirtualBoxu (dále jen VB) vytvoříte nový virtuální počítač, bude mít zapnutou síťovou kartu a zvolen bude režim NAT. Ten je nejjednodušší a pro jednoduché testování systémů bohatě stačí. VB pak funguje jako router a vytváří virtuální síť, která je celá ukrytá za virtuální NAT.
Počítač uvnitř si může po síti požádat o IP adresu a dostane nějakou z rozsahu 10.0.x.x. Síť samozřejmě funguje a z hostitelského systému je pak možné se normálně připojit k internetu nebo k počítačům v okolní síti. Problém je ale v tom, že NAT je jednosměrný, takže není možné se k virtualizovanému počítači připojit a využít například jeho služeb jako serveru.
Existuje samozřejmě řešení, při kterém je ale třeba změnit konfiguraci hostitelského počítače. V něm vytvoříme virtuální síťovou kartu, která pak bude propojena do vnitřního prostředí hostovaného systému. Ten jí může využít dle libosti a na síti se tak objeví nový počítač, který bude nerozeznatelný od toho fyzického.
Vytváříme virtuální bridge
Předpokládejme, že vaše fyzická síťová karta má v systému označení eth0
. Všechny následující kroky budeme provádět v hostitelském systému, tedy v tom, ve kterém běží VirtualBox. Samozřejmě budeme potřebovat práva nejvyššího, tedy roota. Pro postup budeme ještě potřebovat v systému dva balíčky: uml-utilities (pro příkaz tunctl
) a bridge-utils (pro brctl
. Jdeme na to.
Nejprve si zavedeme jaderný modul, který se nám postará o virtuální síťovou kartu.
# modprobe tun
Dále si vytvoříme novou kartu, která se bude jmenovat tap0
. Zároveň jej dovolíme používat uživateli, který bude spouštět VirtualBox. Dejme tomu, že se bude jmenovat ferda
.
# tunctl -t tap0 -u ferda # chmod 666 /dev/net/tun
Nová karta se nám normálně objeví v systému vedle standardního eth0
. Máme teď v systému vlastně dvě síťové karty. Ta nová je ale ještě „hluchá“, protože její virtuální kabel nikam nevede. Obě zařízení přepneme do promiscuous režimu.
# ifconfig eth0 0.0.0.0 promisc # ifconfig tap0 0.0.0.0 promisc
Zbývá předposlední, ale nejdůležitější krok. Vytvoříme virtuální bridge a do něj „zasuneme kabely&ldqup; z obou síťových karet. Tím oživíme spojení.
# brctl addbr br0 # brctl addif br0 eth0 # brctl addif br0 tap0
Jako poslední pak musíme bridgi přidělit IP adresu. Nejjednodušší je samozřejmě použít DHCP, pokud na síti nějaké máme:
# dhclient br0
Samozřejmě můžeme přidělit i ruční IP adresu. V tuhle chvíli máme ve výpisu síťových zařízení (třeba ifconfig
bez parametrů) nejméně tři zařízení: eth0
, br0
a tap0
. Poslední jmenovaný ale nemá vlastní IP adresu a nepoužívá se.
A ještě VirtualBox
Úplně posledním krokem je pak samozřejmě přenastavení VirtualBoxu. Tomu musíme říci, že nemá používat svůj vlastní NAT, ale může se připojit k virtuální síťové kartě. Klikněte na vybraný virtuální počítač a vpravo vyberte položku Síť. Položku NAT změňte na Síťový most a zvolte zařízení tap0. V pokročilých volbách pak ještě můžete změnit MAC adresu virtuálního počítače. Ta se bude propagovat do sítě.
Teď už stačí jen spustit virtuální stroj a užít si v něm plnohodnotné sítě. Chová se to tak, jako by virtuál měl skutečně vlastní kabel, který vede do stejného switche jako ten z vašeho počítače. Oba stroje (virtuální i reálný) na sebe na síti vidí, stejně tak, jako oba počítače vidí i všichni ostatní. Virtuální stroj se jeví jako naprosto reálné síťové zařízení ve vaší síti. Využití je pak už na vás.
Poznámky na závěr
Pokud máte nahozený firewall a výše popsané řešení vám nefunguje, budete muset povolit komunikaci s bridgem. Je to velmi jednoduché:
# iptables -I INPUT -i br0 -j ACCEPT
Může se stát, že vám VirtualBox zobrazí následující hlášku:
V takovém případě pomůže jednoduše virtuální síťovou kartu v hostitelském systému nahodit:
# ifconfig tap0 up
Pokud budete mít jakýkoliv problém, můžete se jednoduše všeho zbavit a uvést nastavení sítě do původního stavu:
# ifconfig tap0 down # ifconfig br0 down # brctl delbr br0