KVM (konfigurace sítě)
QEMU pro každé síťové zařízení ( NIC - Network Interface Card ) virtuálního stroje má samostatné dvě části. Část, která zprostředkovává komunikaci QEMU s prostředím virtuálu (označovanou jako fore) a část, která komunikuje se systémem hostitele (označovanou backend). Obě tyto části se konfigurují na příkazovém řádku samostatně, ale přes stejnou přes volbu -net
Jak funguje připojení QEMU
Na schematickém modelu vpravo je zobrazeno jakým způsobem funguje síťová infrastruktura QEMU.
QEMU (zelený blok) jako takové je userspace aplikace, která emuluje hardware pro spuštěný virtuál.
Pokud není v jádře přítomný hypervizor, který by umožňuje virtuálu využít virtualizaci CPU na úrovni hardware hostitele, tak je virtualizován i procesor virtuálního stroje. |
Virtuální stroj pak komunikuje s emulovaným hardware, tak jako kdyby šlo o fyzické zařízení. Tzn. že rychlost, s jakou pak během virtualizace probíhají síťové přenosy mezi aplikacemi spuštěnými uvnitř virtuálu a backendem QEMU, je daná parametry emulovaného hardware a ovladačem použitým ve virtuálním stroji.
Možnosti "backendové" části NIC
Backendová část síťové karty zajišťuje komunikaci QEMU s odpovídající síťovou infrastrukturou hostitelského systému.
Interně QEMU používá k připojení na vnější síť po spuštění virtuálu režim user, což je ve skutečnosti připojení k tap zařízení přes interní NAT QEMU.
user
… -net nic,maccaddr=00:00:0a:00:00:0a,if=virtio -net user …
|
Na příkazovém řádku následuje konfigurace backendu vždy bezprostředně za konfigurací fore části NIC. Není-li konfigurační část pro backend uvedena, platí již co bylo zmíněno výše. Konfiguraci síťového rozhraní uvnitř virtuálu pak lze provést přes dhclienta. O přidělení IP adresy se postará interní DHCP server QEMU. Tento výchozí DHCP server lze prostřednictvím dalších parametrů, následujících volbu user, podle potřeby překonfigurovat.
none
Jak plyne z předchozího textu, QEMU se vždy snaží virtuálnímu stroji zajistit konektivitu. Pokud tedy chceme mít uvnitř virtuálního stroje síťové zařízení, které žádnou konektivitu nemá, tak jej musíme explicitně zakázat tím že nastavíme backend none.
socket
Backend síťového zařízení virtuálního stroje lze napojit také na soket (na úrovni 5. vrstvy).
vde
Možnosti napojení backendu QEMU na sokety se využívá při připojení přes vde2 virtuální switche, u kterých jsou fyzické ethernetové zásuvky nahrazeny sokety. Chceme-li však dostat do virtuálního switche skutečnou konektivitu, musíme použít buď vde_pcapplug, nebo vde_plugtap
Z hlediska variability je použití VDE (Virtual Distributed Etherenet) velmi flexibilní obzvláště při emulaci komplikované ethernetové struktury v rámci jednoho fyzického stroje, protože nevyžaduje žádné zásahy do stávající síťové infrastruktury hostitele, jelikož veškerá síťová komunikace probíhá přes sokety v userspace.
Problém nastává když potřebujeme propojit virtuální switche mezi dvěmi fyzickými hostiteli. V takovém případě totiž musíme využít pro zajištění síťového přenosu externí aplikaci (nejčastěji se používá tunel přes ssh), která však sebou přináší další zvýšení režijních nároků při síťové komunikaci.
- Virtuální switch
- je aplikace, která zajišťuje komunikaci mezi sokety virtuálních zásuvek a chová se jako skutečný switch.
- Virtuální zásuvka
- je ekvivalentem fyzického portu na fyzickém switchi. V praxi je to aplikace, která má na jednom konci, v adresáři zastupujícím virtuální switch, vytvořený soket, skrz kterým pak probíhá komunikace v rámci virtuálního switche a na druhém stdin a stdout. Virtuální patch kabely mezi virtuálními zásuvkami se tedy tvoří pomocí obousměrné roury - dpipe.
Virtuální zásuvky
Ve standardní instalaci balíku vde2 jsou k dispozici tři utility pro vytvoření virtuální zásuvky.
- vde_plug
- se používá při spojování přes virtuální dráty - stdin a stdout
- vde_pcapplug
- se používá pro připojení virtuálního portu switche k síťovému interface na úrovni IP (TUN)
- vde_plug2tap
- se používá pro připojení virtuálního portu switche k síťovému interface na úrovni ethernetu (TAP)
Virtuální zásuvky si mohou tvořit také samy aplikace, pokud podporují vde, jako např. QEMU. |
Při tvorbě virtuální zásuvky se specifikuje adresář virtuálního switche, ve kterém se má příslušný soket vytvořit. Umístění tohoto adresáře lze změnit při spouštění virtálního switche příkazem vde_switch, nastavením parametru -s
(resp. -sock
). Pokud při spouštění nebylo uvedeno jinak, je výchozí adresář virtuálního switche - /tmp/vde.ctl
.
U každé zásuvky lze nastavit práva a tím ji podle potřeby zpřístupnit v rámci systému i neprivilegovanému uživateli.
Vytvoření virtuálního switche..
vde_switch -d -s /tmp/dalsi_soket
|
Propojení zařízení eth0 s virtuálním switchem..
sudo vde_pcapplug -m 660 -g kvm -s /tmp/sham_sw eth0
|
Spojování virtuálních zásuvek=
Spojení s procesem zásuvky 1 ve virtuálním switchi B se provede následovně přes obousměrnou rouru dpipe:
dpipe <plugA> = <plugB>
- plugA
- je výstup procesu který realizuje zásuvku 1 ve switch A
- plugB
- je výstup procesu který realizuje zásuvku číslo 1 ve switchi B
Viz příklad reálného použití:
stroj:~# dpipe vde_plug /tmp/paterni_soket = vde_plug /tmp/virtualni_soket
|
Řízení virtuálního switche
Při spuštění virtuálního switche se v něm vytvoří soket - ctl
. Skrz něj probíhá řízení switche. Totiž, pokud není uveden parametr -d
, kterým se spustí virtuální switch na pozadí, spustí se na aktuální konzoli ovládací shell, skrz který lze switch řídit.
Management konzole lze provádět prostřednictvím unixového soketu parametrem -M na která se lze připojit aplikací unixterm
Skriptování
Jednoduchý spouštěcí skript pro vytvoření páteřního soketu, na který mohou být připojovány virtuální switche spouštěných strojů:
Poznámky ke skriptu:
- U vde_pcapplug jsou nastavena práva tak, aby se mohl každý uživatel s právy ke spouštění virtuálních strojů připojit na vnější síť.
- Při zápisu PID se musí přičíst jedna, protože PID spuštěného procesu bude o tuto hodnotu vyšší, je PID zachycený skriptem
- Pro vytváření soketů může být použit libovolný adresář, do kterého lze zapisovat.
- Soubor, ve kterém jsou uloženy PID má smysl především proto, abychom při zastavení "vypnuli" pouze procesy spojené s tímto switchem
tap
Konfigurační možnosti "fore" části NIC
Vytvoření síťového rozhraní v prostředí virtuálního stroje zajišťuje část fore, která se od backend části síťového rozhraní liší od pohledu tím, že začíná parametrem nic.
… -net nic,maccaddr=00:00:0a:00:00:0a,if=virtio -net none
…
|
Výše uvedený příklad demonstruje vytvoření síťového rozhraní s MAC adresou 00:00:0a:00:00:0a, které se ve virtuálu "ohlásí" jako virtio zařízení.
Nastavení dalších síťových zařízení se provádí zcela jednoduše - přidáním dalších "párů" volby -net
.
V případě, že je konfigurováno více NIC pro jeden stroj je nutné zajistit, aby nemohlo dojít na síti k nějakému konfliktu - duplicitní MAC adresa, překřížené vlany, aj. |
vlan
Parametr vlan je třeba použít pokud má mít virtuální stroj více síťových rozhraní, které mezi sebou nesmí být vzájemně propojeny. Není-li parametr vlan uveden, nastavuje QEMU automaticky pro všechny NIC vlan 0. Takže v případě, že je každý NIC na úrovni backendu připojen do jiného subnetu, začne mezi nimi propouštět pakety, aniž by s tím spuštěný virtuál měl cokoliv do činění.
macaddr
QEMU pro každé další síťové rozhraní negeneruje automaticky samostatnou MAC adresu, nýbrž používá pořád tu stejnou. Má-li tedy virtuální stroj mít více síťových karet, nebo je-li připojených více virtuálních strojů virtualizovaných přes QEMU do jednoho síťového segmentu, je vhodné pro každé NIC nastavit vlastní MAC adresu.
model
Prostřednictvím konfiguračního parametru model lze vhodnou volbou typu virtuální síťové karty ovlivnit, jaký ovladač virtualizovaný stroj použije pro komunikaci se síťovým rozhraním a tím ovlivnit i rychlost zpracování jeho síťové komunikace.
Jaké modely umí QEMU emulovat, lze zjistit spuštěním QEMU s volbou..
… -net nic,model=?
…
|
Použitelné modely síťových karet z hlediska propustnosti...
- virtio
- Virtio network device je z hlediska konektivity tou nejoptimálnější volbou, pokud má virtuální stroj k dispozici virtio ovladače. QEMU totiž při komunikaci přes virtio nic neemuluje, ale předává pakety ke zpracování přímo do kernelu. Ovladače k virtio pro systémy MS Windows lze stáhnout z webu fy. Red Hat inc.. Ovladač v linuxovém jádře virtuálního stroje se jmenuje
virtio-net
. - e1000
- Emulace skutečné síťové karty Intel 82549EM Gigabit je v QEMU výchozí, pokud však nemá virtualizovaný systém pro tuto síťovou kartu nainstalovaný ovladač, je nutno vyzkoušet některé jiné z následujících zařízení.
- pcnet
- Gigabajtová síťová karta, která se hlásí jako AMD 79c970 [PCnet 32 LANCE]]. Ovladač k ní je součástí vmware tools
- rtl8139
- Emuluje kartu s čipem Realtec. Tento typ 100 megabitové síťové karty patřil mezi nejběžnější síťové karty, které nebyly z produkce Intelu. Výhodné je, že ovladač k této síťové kartě je přímo ve Windows XP
- ne2k_pci
- Realtek RTL-8029(AS) byla pouze 10 megabitová síťová karta, jedna z posledních, které ještě podporovaly koaxiální kabeláž. Tuto síťovou kartu však bylo možné rozchodit i pod DOSem
Speciálně u virtio NIC lze nastavit i další parametry, které umožňují emulovat síťovou kartu na PCI-E, z hlediska běžného nasazení však nejsou tyto parametry podstatné. |
name
Parametr name umožňuje nastavit pro NIC jméno, pod kterým pak bude příslušné rozhraní známé v prostředí monitorovací konzole QEMU.