Zdravím,
VirtualBox to opravdu umí. Jelikož, ale na server to není stále ono tak bych také raději uvítal jak virtualizovat více strojů pomocí KVMtak aby každý virtuální systém mohl mít vlastní veřejnou IP. Nějak se toho nemůžu dobrat. Na serveru mám jednu síťovou kartu.
Pár postupů jsem odzkoušel, ale moc nezadařilo. Proto bych uvítal článek v češtině o KVM a síťování.
Vašek
Toto je výsek ze startovacího skriptu, co používám.
Předpokládá existující bridge br0:
# vytvoříme tap rozhraní pro jednotlivé stroje a přidáme je do bridge br0 tunctl -p -t vm0 brctl addif br0 vm0 ifconfig vm0 up tunctl -p -t vm1 brctl addif br0 vm1 ifconfig vm1 up ... # spustíme KVM mašiny kvm \ -name vm0 -pidfile /kvm/vm0/kvm.pid -daemonize \ -m 768 -mem-path /mnt/hugetlb \ -drive file=/dev/mapper/vm0,format=raw,index=0,if=ide,boot=on \ -net nic,vlan=0,model=virtio,macaddr=a0:00:00:00:00:01 -net tap,vlan=0,ifname=vm0,script=no \ -serial none -parallel none \ -monitor telnet:127.0.0.1:4000,server,nowait \ -vnc 127.0.0.1:0 kvm \ -name vm1 -pidfile /kvm/vm1/kvm.pid -daemonize \ -m 1024 -mem-path /mnt/hugetlb \ -drive file=/dev/mapper/vm1,format=raw,index=0,if=ide,boot=on \ -net nic,vlan=1,model=virtio,macaddr=a0:00:00:00:01:01 -net tap,vlan=1,ifname=vm1,script=no \ -serial none -parallel none \ -monitor telnet:127.0.0.1:4001,server,nowait \ -vnc 127.0.0.1:1 ...
Popis:
Spustíme KVM a udáním jméne (vm0…), zadám si cestu k PID souboru v daemon režimu. Přidělil jsem paměť (768/1024 MiB) v HugeTLB. Následně jsou tam cesty k diskům emulovaným jako IDE rozhraní. Virtuálové budou bez sériových a paralelních portů, monitor strojů běží v telnet režimu na portech 4000… a VNC rozhraní je definováno jako poslední 0…
No a nyní k síti: ze zde nepodstatných důvodů si pakety značkuji do VLAN, používá se virtio s definovanou mac adresou (pro každý stroj jinou, pozor, aby bit 0 v bytu 0 mac nebyl 1, ty se užívají pro multicast (http://www.cisco.com/warp/public/cc/techno/tity/prodlit/ipmlt_wp/ipmlt_w2.jpg), používá se TAP, zadáno jméno a určeno, že se nemají používat skripty pro ovládání rozhraní (to jsme již udělali manuálně – osvědčilo se mi to více).
Jednoduché, snad to pomůže. Pak je samozřejmě potřeba zkonfigurovat iptables, forwardování packetů, pokud není aktivní… ale to je již síťařina mimo KVM.
Petr
Pokud nemáte nějaký zásadní důvod proč nepoužít libvirt, tak to jde i bez toho zběsilého skriptování. Bridge pouze mezi hostitelem a virtuály se nadefinují přímo v libvirt (virsh net-define), bridge ve kterých má být i nějaká fyzická síťovka hostitele se nadefinují v startup skriptech způsobem vlastním dané distribuci (/etc/sysconfig/network-scripts v rh-like, /etc/network/interfaces v debian-like atp.) a ve definici virtuálu se pak jen uvede do jakého existujícího bridge se má virtuální síťovka připojit.
Jasně, nic proti, já speciální startovací/inicializační skripty nemám rád kvůli lidové tvořivosti, zkuste něco takového opravovat po kolegovi který je zrovna v Antarktidě, nebo po sobě po x letech. YMMV. Relativně snesitelné to je v OpenBSD, kde řešení přes skripty má tradici, které pokud se správce drží, tak mají ty skriptíky určitou pevnou strukturu a hlavně jsou extrémně přehledné.
Já mám na serverech většinou RHEL (na pár vývojových Fedoru) a úplně v pohodě jsou všechny vypečenosti nastavené standardním způsobem v konfigurácích typu „klíč=hodnota“, občas xml. Včetně šifrování disků, RAID a LVM, iSCSI a FC iniciátorů s multipathingem, komplexní konfigurace sítě (IPv4 i IPv6, vícero routovacích tabulek, iptables, iptables6, bonding, vlany, brigde, OpenVPN a IPsec tunely), KVM a Xen hypervizory ovládané přes libvirt. Je fakt, že občas jsem musel ty distribuční skripty skripty luštit abych zjistil, jak co nastavit (dokumentace ke speciálnějším věcem moc není), ale mnohokrát se to vyplatilo. Upravit řádek „klíč=hodnota“ zvládne i moje sekretářka, správně zasáhnout do custom skriptu aniž by něco neposr^H^Hkazil většinou nesvede ani „certifikovaný“ specialista …