KVM (konfigurace sítě)

Z DCEwiki
Skočit na navigaci Skočit na vyhledávání

Nastavení sítě lze realizovat u QEMU několika způsoby. QEMU samo o sobě obsahuje DHCP server, takže lze v případě nutnosti spuštěný virtuální stroj připojit do sítě přes NAT, aniž by bylo třeba cokoliv složitě nastavovat.

Pro přímé připojení virtuálního stroje k internetu je možno použít:

  • nastavení přes TUN/TAP
  • nastavení přes bridge
  • VDE

Použití VDE (Virtual Distributed Etherenet) mi přišlo jako nejflexibilnější, protože nevyžaduje žádné složité zásahy do stávající síťové infrastruktury hostitelského stroje a také není problém aktivovat identické zapojení na cílovém stroji při migraci.

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" == "start" ]; 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