Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: domácí lab - jak nastavit síť v KVM  (Přečteno 4662 krát)

joeedit

  • Návštěvník
  • Příspěvků: 61
domácí lab - jak nastavit síť v KVM
« kdy: 21 Července 2015, 17:49:55 »
Zdravím,

pro účely samostudia jsem si zřídil malý domácí lab (viz přiložený obrázek).

Domácí podmínky (manželka) mi neumožňují zapojení po kabelu - proto wifi - server musí být pro svou hlučnost v přízemí (IBM x3400).
Po vytvoření prvního virtuálu se mi nedaří z laptopu spojení jak přes ssh (Virtual manager, terminál), tak ani ping. V routeru už jsem zkoušel nastavit statickou cestu pro síť 192.168.122.0, ale bez úspěchu. V KVM je možno vytvořit několik druhů virtuálních sítí, kde je možné nastavit routování nebo NAT pro jednotlivé síťové adaptéry, ale ani po přečtení několika článků o síťování v KVM jsem to nerozchodil. Virtuálům potřebuji přidělovat statické IP - jeden z nich bude jako web server.

Poradíte jak nastavit síťování v KVM?

Předem díky!

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:domácí lab - jak nastavit síť v KVM
« Odpověď #1 kdy: 21 Července 2015, 22:25:13 »
Nemam ubuntu, ale princip je naprosto stejny, akorat to musis udelat ubunt-isch cestou ... zacal jsem ti psat skoro obrovske howto, ale od tohodle tohle forum fakt neni .. na internetu je spousta navodu, v kostce vsak:

a) lze to delat pres virsh http://wiki.libvirt.org/page/Main_Page

b) nebo to lze delat klasickou cestou pres qemu-kvm

https://duckduckgo.com/?q=linux+kvm+bridged+networking&t=opensuse
http://www.linux-kvm.org/page/Networking

c) jde to samozrejme delat i *ubuntu cestou ;)

https://help.ubuntu.com/community/KVM/Networking


Ja osobne to pouzivam na ruznych serverech jinak, muzu ti ukazat svuj skript, kterej si muzes upravit dle libosti. Ve scriptu mam pomoci bridge, muzes to udelat samozrejme pomoci NAT,

Kód: [Vybrat]
#!/bin/bash


_date=`date +%Y%m%d%H%M%S`;
exec 2>>/rest/kvm_vm0/nodevm0.log;
echo \!invoked at $_date 1>&2;

_powerdown_timeout=60;

#set -x

start_vm() {
        qemu-kvm() {
                /usr/bin/kvm $@;
        };

        test ! -f /rest/kvm_vm0/nodevm0.pid || {
                echo pidfile found, doublecheck that vm doesn\'t run and remove pidfile;
                return 1;
        };

        qemu-kvm -pidfile /rest/kvm_vm0/nodevm0.pid \
        -drive file=/rest/kvm_vm0/nodevm0.raw,index=0,if=virtio,media=disk \
        -cdrom /rest/kvm_vm0/CentOS-6.6-x86_64-minimal.iso -boot c \
        -netdev type=tap,script=no,id=nodevm0,ifname=nodevm0 -device virtio-net-pci,netdev=nodevm0 \
        -netdev type=tap,script=no,id=nodevm1,ifname=nodevm1 -device virtio-net-pci,netdev=nodevm1 \
        -smp 4 -m 6192 -k en-us -usbdevice tablet -localtime \
        -monitor unix:/rest/kvm_vm0/instance,server,nowait \
        -vga qxl -spice port=5909,addr=127.0.0.1,disable-ticketing &


        sleep 1;
        ip link set nodevm0 up;
        ip link set nodevm1 up;
        brctl addif br0 nodevm0;
        brctl addif br1 nodevm1;
};

kill_vm() {
        brctl delif br0 nodevm0;
        brctl delif br1 nodevm0;
        cat /rest/kvm_vm0/nodevm0.pid|xargs kill;
        rm -f /rest/kvm_vm0/nodevm0.pid;
};

stop_vm() {
        _going_down_sec=0;
        echo system_powerdown < /dev/tty | nc -6U /rest/kvm_vm0/instance;
        while [ "$_going_down_sec" -le "$_powerdown_timeout" ]; do
                test -d /proc/`cat /rest/kvm_vm0/nodevm0.pid` || { rm -f /rest/kvm_vm0/nodevm0.pid && return 0; };
                sleep 1;
                ((_going_down_sec++));
        done
        return 1;

};

status_vm() {

        if [ -f "/rest/kvm_vm0/nodevm0.pid" ]; then
                ps --no-header -p `cat /rest/kvm_vm0/nodevm0.pid` -o pid,args;
                return 0;
        fi
        echo pidfile doesn\'t exist;
        return 0;
};

usage() {

        echo `basename $0` start\|stop\|kill\|status;

};

#####################
#### main()
#####################

case $1 in
        start)
                start_vm
                ;;
        kill)
                kill_vm
                ;;
        stop)
                stop_vm
                ;;
        status)
                status_vm
                ;;
        *)
                usage
                ;;
esac



jedine, co skript v tomto pripade potrebuje je bridge, kterej je pripoji do site (na hostovi) .. eg ukazka, jak se nastavuje bridge na debianu (konkretne ze stejneho serveru, na jakem je pouzit skript vyse ;))

Kód: [Vybrat]
# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
#iface eth0 inet dhcp

auto br0
#iface br0 inet dhcp
iface br0 inet static
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off
        address 10.0.182.144
        netmask 255.255.255.0
        gateway 10.0.182.1

auto br1
iface br1 inet manual
        bridge_ports eth1
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off
#       address 172.16.0.1
#       netmask 255.255.192.0

^^ muj vyse uvedeny *priklad (s realnyma hodnotama) ti dava kompletni reseni tveho problemu - samozrejme po uprave v bridged modu (tedy ze rozhrani te masiny jsou zapojeny primo do tve LAN)

pokud bys chtel NAT mod (tedy zadne bridge a routovani mezi tema rozhranima), tak to bohuzel zadnou ukazku z debianu nebo ubuntu nemam, neb mam vse na centosu a nebo suse, nicmene princip je nasledujici (vzdy stejny at uz pro kvm a nebo vbox): na to rozhrani, za kterem je VM s nastavenou adresou priradis nejakou adresu a pres tu routujes tu virtualni masinu, eg u me na ntb virtualka vboxu (kde mam podobnej setup jako v kvm, mam vyple vsechny veci ve vbox ze mi vytvari jen rozhrani s adresou a zbytek si delam sam). Konecny vysledek by mel vypadat nejak takto

Kód: [Vybrat]
# ip -4 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
       valid_lft forever preferred_lft forever
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    inet 192.168.1.53/24 brd 192.168.1.255 scope global wlan0
       valid_lft forever preferred_lft forever
4: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    inet 192.168.255.1/24 brd 192.168.255.255 scope global vboxnet0
       valid_lft forever preferred_lft forever


# ip r
default via 192.168.1.1 dev wlan0
127.0.0.0/8 dev lo  scope link
169.254.0.0/16 dev wlan0  scope link
192.168.1.0/24 dev wlan0  proto kernel  scope link  src 192.168.1.53
192.168.255.0/24 dev vboxnet0  proto kernel  scope link  src 192.168.255.1

# iptables-save
# Generated by iptables-save v1.4.21 on Tue Jul 21 22:23:53 2015
*nat
:PREROUTING ACCEPT [868:80369]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [10238:636981]
:POSTROUTING ACCEPT [10238:636981]
-A PREROUTING -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.255.10:3389
-A POSTROUTING -s 192.168.255.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jul 21 22:23:53 2015
# Generated by iptables-save v1.4.21 on Tue Jul 21 22:23:53 2015
*raw
:PREROUTING ACCEPT [872086:1288730191]
:OUTPUT ACCEPT [538702:45143824]
COMMIT
# Completed on Tue Jul 21 22:23:53 2015
# Generated by iptables-save v1.4.21 on Tue Jul 21 22:23:53 2015
*filter
:INPUT DROP [670:32380]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [538702:45143824]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0,wlan0 -p tcp -m tcp --dport 445 -j DROP
-A INPUT -i eth0,wlan0 -p tcp -m tcp --dport 139 -j DROP
-A INPUT -p tcp -m tcp --dport 3389 -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 445 -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 139 -j ACCEPT
-A FORWARD -s 192.168.255.0/24 -j ACCEPT
-A FORWARD -d 192.168.255.0/24 -j ACCEPT
COMMIT
# Completed on Tue Jul 21 22:23:53 2015

zdravim

ps. prosim bud shovivavy pri cteni skriptu nad vskutku odpudivou nekazni navratovych hodnot jednotlivych funkci a vubec navratovyma hodnotama, co skript vraci
pps. ve virtualce musis zapnout acpi (melo by fungovat out-of-the-box aby ti fungovala ta vypinaci metoda - tedy ciste vypnuti - ktere mam ve funkci stop_vm()
« Poslední změna: 22 Července 2015, 00:18:29 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

joeedit

  • Návštěvník
  • Příspěvků: 61
Re:domácí lab - jak nastavit síť v KVM
« Odpověď #2 kdy: 21 Července 2015, 22:29:43 »
moc díky! návod krok za krokem jsem ani nečekal a tak rozsáhlou odpověď už vůbec ne ;-)

ráno to začnu studovat - se síťařinou jsem vždycky dost bojoval, tak ještě jednou moc díky!

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:domácí lab - jak nastavit síť v KVM
« Odpověď #3 kdy: 21 Července 2015, 23:45:37 »
podle me ale budes mit problem s nastavenim toho bridge modu pres tu wifi ... budes to muset udelat routovane, eg:

1) normalne vytvoris tu (ty) virtualky - eg muj skript vyse, das jim jen jedno inteerface .. zkus si pozorne precist ten skript, je fakt jednoduchej, udelej si z nej templejt na spousteni i ostatnich virtualek ... staci jen na zacatek dat do promennych to, co ja v nem mam **za-hard-kodene

2) pouzijes ten bridge (staci jen jeden) tak, ze pridas ty virtualky do prazdneho bridge (opet muj skript + obsah etc/interfaces, zde jen vytvoris prazdnej bridge s adresou, nedas do nej fyzicke rozhrani, vsechny prikazy tam jsou ..). V NAT vypisu vyse bridge nepouzivam a MASQUERADIM (misto staticky routuji - viz nize) primo pres to rozhrani te VM .. ty ten bridge pouzij, protoze do nej budes dale vkladat rozhrani vsech dalsich VMs)

3) zapnes na serveru forwarding, tzn budes mit v etc/sysctl.conf ```net.ipv4.ip_forward = 1''' a ``sysctl -a | grep forw''' vypise ze to mas zapnute ... Mj. kdyz pohledis na vystup z predchoziho prikazu, tak ti bude zjevne, ze je mozne pouze selektivne pozapinat forward jen na pozadovanych rozhranich, nemusis na vsech ... kdyby te zajimalo co je "mc", tak vez, ze to je multicast

4.1) bud nastavis pomoci iptables masqueradu (prosim vygugli si, jsou to dva radky a je to v mem prikladu s NATem kompletni prikazy - tedy skoro ;)) .. pokud budes nastavovat MASQUERADE, tak to porad nebude v tom skriptu, normalne nastav firewall na systemove urovni s pravidlama, jaky potrebujes ... iptables je jedno, ze ty masiny nebezi a ty interfacy treba ne-existuji ..

4.2) a nebo - coz je na male siti mnohem hezci - budes routovat statickyma routama, tzn nastavis na svem dhc serveru, aby jen predaval, ze do site (napr) 10.0.0.0/24 se da dostat pres 192.168.1.200/32 (eg plna adresa ma 32 bitu, zapis 192.168.1.200/24 je v podstate sitarky neplatnej :D, tvoje routovaci tabulka nebo iptables by byly desne zklamany kdybys tam jako cil zapsal 192.168.1.200/24 ... :P)

5.1) kdyz to budes chtit mit uplne vychytane, tak si muzes per-VM vytvorit system services (eg systemd a nebo init.d - ja to tak delam) a dokonce si timto mezi nima udelat ruzne zavislosti (eg virtualni cluster) na urovni init subsystemu

5.2) Pokud ti nepujde nic z vyse uvedeneho a nebo te to nebude bavit, tak muzes pouzit libvirt a jeho virsh (viz spousta dokumentace na netu), kterej ti doslova vsechno pomuze udelat skrze jeho rozhrani .... to stejne napr. umi i virt-manager (z redhatu - mozna je i na ubuntu, u me v suse je v baliku virt-manager), coz je graficke UI ke kvm/libvirt, tzn muzes ignorovat vse co jsem az dosud napsal a spokojit se s posledni radou v tomto bode ...
« Poslední změna: 22 Července 2015, 00:39:39 od ntz_reloaded »
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:domácí lab - jak nastavit síť v KVM
« Odpověď #4 kdy: 24 Července 2015, 12:59:30 »
hmm. vypada to, ze jsem se rozepisoval zcela zbytecne
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

joeedit

  • Návštěvník
  • Příspěvků: 61
Re:domácí lab - jak nastavit síť v KVM
« Odpověď #5 kdy: 31 Července 2015, 14:16:54 »
urcite ses zbytecne nerozepisoval, proste ted nestiham a navic mam obyc wifi adaptery od tplinku, takze opravdu musim vyresit zapojeni pres kabel bo asi neumi bridgovani

dalsi vec - nejdriv stejne zkusim rozchodit 3 fyzicke servery - o vikendu mi dorazi dalsi dva ibm x3400 - na nich si vyzkousim, ze mi funguje vse jak potrebuju a pak to teprve prenesu do virtualu - zjistuju, ze to neni sranda a taky to chce trochu casu si s tim pohrat ;-)

ntz_reloaded

  • Lokaj
  • Závislák
  • ***
  • Příspěvků: 3735
  • skill :: ur home erly
Re:domácí lab - jak nastavit síť v KVM
« Odpověď #6 kdy: 31 Července 2015, 18:09:16 »
nemusis to samozrejme delat pres BRIDGE ale pomoci NAT
tikejte mi, taky Vam tikam ...
song of the day - openSUSE, openindiana, DuckDuckGo
The noise ain't noise anymore, who's to blame, WHO'S TO BLAME ??

 

Provoz zaštiťuje spolek OpenAlt.