KVM (konfigurace sítě)

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání
Model qemu networking.svg

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.

Poznámka 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

Poznámka
… -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)
Poznámka 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.

Poznámka Vytvoření virtuálního switche..
vde_switch -d -s /tmp/dalsi_soket
Poznámka 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í:

Poznámka
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ámka
#!/bin/bash
if [ "$1" == "" ]; then
    exit 0;
    fi
if [ "$1" == "start" ]; then
    if [ -f "/tmp/paterni_soket.pid" ]; then
	echo "Virtuální switch je zapnutý" && exit 0
	fi
    # Vytvoření páteřního soketu přes který mohou lézt virtuály ven
    vde_switch -d -s /tmp/paterni_soket &
    echo $(($!+1)) > /tmp/paterni_soket.pid
    # Propojení páteřního soketu s rozhraním eth0
    vde_pcapplug -m 660 -g kvm -s /tmp/paterni_soket eth0 &
    echo $(($!+1)) >> /tmp/paterni_soket.pid
elif [ "$1" == "stop" ]; then
    kill $(</tmp/paterni_soket.pid)
    rm /tmp/paterni_soket.pid
else
    echo "Použití: $0 [ start | stop ] "
fi

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.

Poznámka
… -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í.

Poznámka NIC zařízení, které by se vytvořilo na základě výše uvedené konfigurace by mělo nastaven backend na none, což znamená, že by vůbec nebylo připojeno k síti. Pokud by tato volba nebyla uvedena, bylo by automaticky na straně backendu připojené přes NAT (backend user)

Nastavení dalších síťových zařízení se provádí zcela jednoduše - přidáním dalších "párů" volby -net.

Upozornění 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..

Poznámka
… -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
Poznámka 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.