ťařina
Obsah Soubory
Virtualizace a kontejnery

Proxmox a sítě

Aktualizováno 4 min čtení 606 slov

Proxmox a sítě

Proxmox je Debian s webovým rozhraním, takže síť pod ním je normální linuxová síť. Zmatek dělá hlavně to, že se konfiguruje na třech místech naráz: v rozhraní Proxmoxu, v /etc/network/interfaces a uvnitř samotných VM.

vmbr, čili linuxový most

vmbr0 není nic proxmoxového. Je to obyčejný linuxový switch v softwaru. Fyzická síťovka se do něj zapojí jako jeden port a virtuální stroje jako další porty.

flowchart TD
    LAN[Fyzická síť] --- E[enp1s0]
    E --- BR[vmbr0<br/>linuxový most]
    BR --- H[Proxmox hostitel<br/>192.168.1.5]
    BR --- V1[VM 100]
    BR --- V2[VM 101]
    BR --- C1[LXC 200]

Adresu má most, ne fyzická síťovka. To je nejčastější zdroj zmatku: enp1s0 je bez adresy a to je správně.

/etc/network/interfaces:

auto lo
iface lo inet loopback

iface enp1s0 inet manual

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.5/24
    gateway 192.168.1.1
    bridge-ports enp1s0
    bridge-stp off
    bridge-fd 0

Po ruční editaci:

ifreload -a          # aplikuje bez restartu

VLAN-aware bridge

Tohle je ta funkce, kvůli které tuhle stránku píšu. Umožňuje dávat jednotlivé VM do různých VLAN, aniž bys pro každou stavěl vlastní most.

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.5/24
    gateway 192.168.1.1
    bridge-ports enp1s0
    bridge-stp off
    bridge-fd 0
    bridge-vlan-aware yes
    bridge-vids 2-4094

Nebo v rozhraní: Datacenter → uzel → Networkvmbr0 → zaškrtnout VLAN aware.

Pak u každé VM nastavíš VLAN Tag v nastavení síťového zařízení a VM je v té VLANě. Uvnitř VM se nic nenastavuje — o tagování se stará most, stejně jako u fyzického switche na access portu.

Port na fyzickém switchi, do kterého je Proxmox zapojený, musí být trunk s povolenými potřebnými VLANami. Bez toho ti tagovaný provoz nikam neprojde. Pro UniFi to znamená nastavit v Port Manager tagované VLANy.

Hostitel ve VLANě

Když chceš mít samotný Proxmox v jiné VLANě než výchozí:

auto vmbr0
iface vmbr0 inet manual
    bridge-ports enp1s0
    bridge-vlan-aware yes
    bridge-vids 2-4094

auto vmbr0.10
iface vmbr0.10 inet static
    address 192.168.10.5/24
    gateway 192.168.10.1

Most zůstane bez adresy a ta se přesune na virtuální rozhraní vmbr0.10, které je tagované do VLANy 10.

Tohle je moment, kdy se snadno odřízneš. Než to uděláš, měj přístup ke konzoli — IPMI, iDRAC, nebo alespoň fyzickou klávesnici.

Vnitřní síť bez fyzického portu

Most bez bridge-ports je izolovaná síť jen mezi VM. Užitečné pro provoz mezi aplikací a databází, který nemá opustit hostitele:

auto vmbr1
iface vmbr1 inet static
    address 10.99.0.1/24
    bridge-ports none
    bridge-stp off
    bridge-fd 0

Když má taková síť mít přístup ven, musíš na hostiteli zapnout NAT a forwarding — viz iptables nebo nftables.

Agregace linek

Dva kabely místo jednoho, kvůli propustnosti nebo redundanci:

auto bond0
iface bond0 inet manual
    bond-slaves enp1s0 enp2s0
    bond-miimon 100
    bond-mode 802.3ad
    bond-xmit-hash-policy layer2+3

auto vmbr0
iface vmbr0 inet static
    address 192.168.1.5/24
    gateway 192.168.1.1
    bridge-ports bond0
    bridge-vlan-aware yes
    bridge-vids 2-4094

Režim 802.3ad (LACP) vyžaduje podporu na switchi a nastavenou agregaci na protější straně. Když ji switch neumí, použij active-backup — nezvýší propustnost, ale přežije výpadek kabelu.

Realistické očekávání: LACP nezrychlí jedno spojení. Rozděluje provoz mezi linky podle hashů, takže jeden přenos souboru pojede pořád po jedné lince. Pomůže při víc souběžných spojeních.

Firewall v Proxmoxu

Proxmox má vlastní vrstvu firewallu na třech úrovních: datacentrum, uzel a jednotlivá VM. Zapisuje si vlastní pravidla do netfilteru.

Platí tu totéž co u Dockeru: ufw status ti o nich neřekne. Viz Docker a firewall a Linux firewall.

nft list ruleset | less
pve-firewall status
pve-firewall compile        # ukáže, co Proxmox vygeneroval

Doporučení: buď proxmoxový firewall, nebo vlastní pravidla, ne obojí. Když chceš jemnou kontrolu, vypni proxmoxový a piš nftables ručně. Když chceš jednoduchost, používej proxmoxový a nesahej na netfilter jinak.

Firewall pro VM se zapíná na dvou místech naráz — v nastavení VM a na síťovém zařízení. Zapomenutí druhého je klasika.

LXC versus VM

LXC kontejnery sdílí jádro hostitele. Síť jde přímo přes most, jsou lehčí a startují okamžitě. Nevýhoda: některé věci uvnitř nefungují, typicky Docker v neprivilegovaném kontejneru vyžaduje šamanské zásahy.

VM mají vlastní jádro a chovají se jako samostatný stroj. Těžší, ale bez překvapení.

Doporučení: Docker provozuj ve VM, ne v LXC. Ušetříš si hodiny hledání, proč něco nefunguje. LXC nech na věci, které jsou samy o sobě jednoduché — Pi-hole, reverse proxy, malé služby.

Diagnostika

ip -br addr                    # přehled adres
bridge link show               # co je v mostě
bridge vlan show               # VLANy na portech mostu
ifreload -a                    # aplikace /etc/network/interfaces
journalctl -u pve-firewall -f

bridge vlan show je nejužitečnější příkaz při ladění VLAN — ukáže ti, které tagy jsou na kterém portu povolené.

Problém Příčina
VM nemá síť zapomenutý VLAN tag, nebo port na switchi není trunk
Hostitel nedostupný po změně špatná brána, nebo adresa na síťovce místo na mostu
VM se nevidí navzájem jsou v různých VLANách, chová se to správně
Pomalá síť mezi VM v nastavení VM je model e1000 místo virtio

Ten poslední bod je snadné přehlédnout. virtio je paravirtualizovaný ovladač a je řádově rychlejší než emulovaná Intel karta. Používej ho vždycky, když to hostovaný systém umí.