Jak přidělit virtuálnímu počítači vlastní IP adresu

10. 6. 2010
Doba čtení: 3 minuty

Sdílet

Pokud provozujete virtualizaci jen tak pro zábavu nebo protože testujete nové distribuce, pak vám bude stačit standardní připojení do internetu, které využívá NAT. Někdy je ale potřeba, aby byl virtuální počítač na síti vidět, měl vlastní IP adresu a bylo možné se k němu připojit a využít jeho služeb.

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:

bitcoin_skoleni

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

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.