# 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](MAC-ARP-a-prepinani) v softwaru. Fyzická síťovka se do něj zapojí jako jeden port a virtuální stroje jako další porty.

```mermaid
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:

```bash
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](VLANy), 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 → `Network` → `vmbr0` → 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](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](NAT-a-port-forwarding) a forwarding — viz [iptables](iptables) nebo [nftables](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](Docker-a-firewall) a [Linux firewall](Linux-firewall).

```bash
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](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](Site-v-Dockeru) 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

```bash
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í.
