A Gentoo-ban az a szép, hogy rendszerépítés közben az ember folyamatosan tanul. Egyrészt megtanulja, hogy mi hol van a rendszerben, másrészt pedig rájön, hogy kell levezetni a keletkező feszültséget, ami akkor jelentkezik, mikor fél óra konfigurálás után jobb esetben nem indul, rosszabb esetben nem fordul a kernel.
Apropó vicc: Mit csinál az elméleti fizikus, ha úrrá lesz rajta az idegesség? Papírt és ceruzát vesz elő és levezeti.
Cél
Azt szeretnénk elérni, hogy a libvirt és a rajta keresztül kezelt virtuális gépek (esetemben KVM alatt futók) ki tudjanak szólni a külvilágba. Ha a külvilág az n-edik VLAN-on található, akkor oda. Továbbá szeretnénk, hogy a virtuális gépeket kattogtatós módszerrel lehessen piszkálgatni virt-manager-en aka. „Virtuális gép vezérlőpulton” keresztül.
Első lépés
A következő programok kellenek: qemu és libvirt. A qemu alapértelmezett flagjei tökéletesek, és a libvirt is majdnem jó, mindössze a virt-network-öt kell hozzáadni, hogy tudja kezelni a virtuális hálózatokat is. Ennek függősége a dnsmasq is, hozzá pedig a script flag. A virt-network azon funkcióját, amihez a dnsmasq kellene, nem fogjuk használni, így futnia sem kell, egyszerűen csak függőség. Tehát a packages.use-ba ez kerül:
app-emulation/libvirt virt-network net-dns/dnsmasq script
Szükséges kernel beállítások
Ez részben nekem is dokumentáció, hogy mit pontosan merre találok. Nem nagyon vagyok hajlandó még egyszer eljátszani a „merre vagy te kis szemét” játékot. Fontos, hogy a beállítások (helyei) a 3.15.10-hardened-r1 (Gentoo) kernel alapján készültek, szóval ha nem találod a helyükön, akkor valaki megint átpakolta őket…
Folyamatosan haladunk, fentről lefelé feloldva az esetleges beállításbeli függőségeket, így kövesd az elejétől a dolgokat, mert nem tudok (és akarok) minden függőséget minden beállításnál leírni. A menuconfig-ban megszokott jelöléseket használom. Tehát [*]
beleforgatva, <M>
pedig modul.
Kiindulópontunk: Networking support > Networking options. Ha jobban tetszik: chroot. :)
Itt vagyunk: >
Kernel opció: CONFIG_BRIDGE
Beállítás: <M> 802.1d Ethernet Bridging
Kernel opció: CONFIG_BRIDGE_IGMP_SNOOPING
Beállítás: [*] IGMP/MLD snooping
Kernel opció: CONFIG_BRIDGE_VLAN_FILTERING
Beállítás: [*] VLAN filtering
Kernel opció: CONFIG_VLAN_8021Q
Beállítás: <M> 802.1Q/802.1ad VLAN support
Kernel opció: CONFIG_VLAN_8021Q_GVRP
Beállítás: [*] GVRP (GARP VLAN Registration Protocol) support
Kernel opció: CONFIG_VLAN_8021Q_MVRP
Beállítás: [*] MBRP (Multiple VLAN Registration Protocol) support
Kernel opció: CONFIG_NETFILTER_ADVANCED
Függősége: [*] Network packet filtering framework (Netfilter)
Itt van: Network packet filtering framework (Netfilter) >
Beállítás: [*] Advanced netfilter configuration
Itt vagyunk: > Network packet filtering framework (Netfilter)
Kernel opció: CONFIG_BRIDGE_NF_EBTABLES
Beállítás: <M> Ethernet Brdige tables (ebtalbes) support
Itt vagyunk: > Network packet filtering framework (Netfilter) > Ethernet Bridge tables (ebtables) support
Kernel opció: CONFIG_BRIDGE_EBT_T_NAT
Beállítás: <M>ebt: nat table support
Kernel opció: CONFIG_BRIDGE_EBT_MARK_T
Beállítás: <M> ebt: mark target support
Kitartást, nincs már sok hátra!
Itt vagyunk: > Network packet filtering framework (Netfilter) > Core Netfilter Configuration
Kernel opció: CONFIG_NETFILTER_XT_MARK
Beállítás: <M> nfmark target and match support
Kernel opció: CONFIG_NETFILTER_XT_CONNMARK
Függősége: <M> Netfilter connection tracking support (CONFIG_NT_CONNTRACK)
Beállítás: <M> ctmark target and match support
Kernel opció: CONFIG_NETFILTER_XT_TARGET_CHECKSUM
Függősége:
Itt vagyunk: > Network packet filtering framework (Netfilter) > IP: Netfilter Configuration
<M> IP tables support (required for filtering/masq//NAT) (CONFIG_IP_NF_TABLES)
<M> Packet mangling (CONFIG_IP_NF_MANGLE)
Beállítás: <M> CHECKSUM target support
Itt vagyunk >
Kernel opció: CONFIG_NET_SCH_HTB
Függősége: [*] QoS and/or fair queueing (CONFIG_NET_SCHED)
Ezen belül van: QuS and/or fair queuing -->
Beállítás: <M> Hierarchical Token Bucket (HTB)
Itt vagyunk: > QoS and/or fair queuing
Kernel opció: CONFIG_NET_SCH_SFQ
Beállítás: <M> Stochastic Fairness Queueing
Kernel opció: CONFIG_NET_SCH_INGRESS
Függősége: [*] Actions (CONFIG_NET_CLS_ACT)
Beállítás: <M> Ingress Qdisc
Kernel opció: CONFIG_NET_CLS_FW
Beállítás:<M> Netfilter mark (FW)
Kernel opció:CONFIG_NET_CLS_U32
Beállítás: <M> Universal 32bit comparasions w/ hashing (u32)
Kernel opció:CONFIG_NET_ACT_POLICE
Beállítás: <M>Traffic Plicing
Majdnem végeztünk. Már csak annyi dolgod van, hogy telepíted a bridge-utils-t és ízlés szerint konfigurálod a hálózatodat.
~# emerge -avD bridge-utils
Itt pedig egy példa konfiguráció a /etc/conf.d/net
-be:
bridge_br1="eno2" rc_net_need_br1="net.eno2" brctl_br1="setfd0 sethello 1 stp off" # config_br1="192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" routes_br1="default via 192.168.0.1" dns_servers_br1="8.8.8.8" # vlans_br1="2, 3" config_br1_2="null" config_br1_3="null"
Kész. Innentől annyi virtuális gépet pakolsz be, amennyit csak szeretnél és arra a VLAN-ra, amelyikre csak szeretnéd. :)