Una macchina virtuale ha bisogno di una scheda di rete, e quella scheda deve essere collegata a qualcosa. Nell'hypervisor quel «qualcosa» è uno switch virtuale, quasi sempre un bridge Linux. Capire come funziona permette di mettere le VM nella rete giusta, separare i servizi in VLAN e sfruttare più schede fisiche senza sorprese.
Il bridge: uno switch dentro l'host
Un bridge Linux si comporta come uno switch di rete. Vi si collegano:
- una o più interfacce fisiche dell'host, che fanno da uplink verso la rete reale;
- le interfacce virtuali delle macchine virtuali e dei container.
Le VM collegate allo stesso bridge si vedono tra loro e raggiungono la rete fisica come se fossero computer collegati allo switch di casa. Ricevono indirizzi dal DHCP del router, e il router le vede con il loro indirizzo MAC.
In Proxmox VE l'installazione crea un bridge chiamato vmbr0, collegato alla scheda di rete principale, e assegna a quel bridge l'indirizzo IP dell'host. Su Debian la configurazione si trova in /etc/network/interfaces:
auto vmbr0
iface vmbr0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
bridge-ports enp1s0
bridge-stp off
bridge-fd 0
L'indirizzo IP sta sul bridge, non sulla scheda fisica: è un dettaglio che confonde spesso chi modifica la configurazione a mano.
VLAN: più reti sullo stesso cavo
Le VLAN permettono di dividere una rete fisica in più reti logiche, per esempio una per la gestione, una per i servizi, una per i dispositivi domotici. Il traffico di ogni VLAN viaggia con un'etichetta, il tag dello standard 802.1Q.
Per portarle all'hypervisor, la porta dello switch a cui è collegato deve essere configurata come trunk: trasporta più VLAN con tag, ed eventualmente una VLAN senza tag, detta nativa.
Bridge VLAN-aware
Il modo più semplice in Proxmox è rendere il bridge VLAN-aware. Si attiva un'opzione sul bridge, e da quel momento a ogni scheda di rete virtuale si può assegnare un VLAN tag. La VM non sa nulla delle VLAN: riceve traffico normale, mentre il bridge aggiunge e toglie le etichette.
auto vmbr0
iface vmbr0 inet manual
bridge-ports enp1s0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
L'indirizzo di gestione dell'host può stare su un'interfaccia VLAN dedicata, per esempio vmbr0.10, così l'host è raggiungibile solo dalla rete di amministrazione.
Errori comuni con le VLAN
- Porta dello switch non configurata come trunk: le VM con tag non comunicano.
- VLAN nativa diversa tra switch e host: il traffico senza tag finisce nella rete sbagliata.
- Firewall del router che non consente il traffico tra VLAN quando serve, o lo consente quando non dovrebbe.
- Perdita dell'accesso all'host modificando la rete da remoto: conviene avere una console fuori banda, o applicare le modifiche con un meccanismo che torni indietro se non si conferma.
Bonding: più schede fisiche insieme
Se l'host ha due o più schede di rete, si possono unire in un bond e usare il bond come porta del bridge. Le modalità principali:
| Modalità | Cosa fa | Richiede lo switch |
|---|---|---|
| active-backup | una scheda attiva, l'altra di riserva | no |
| balance-alb | distribuzione adattiva del carico | no |
| 802.3ad (LACP) | aggregazione negoziata con lo switch | sì, supporto LACP |
active-backup è la scelta più semplice per la tolleranza ai guasti: se un cavo o una porta si guastano, il traffico passa sull'altra scheda. LACP distribuisce il traffico tra più collegamenti, ma una singola connessione usa comunque una sola scheda: due link da 1 gigabit non danno un trasferimento da 2 gigabit per un solo file.
Reti interne e isolate
Un bridge non deve per forza avere una porta fisica. Un bridge senza uplink crea una rete interna: le VM collegate comunicano tra loro ma non con l'esterno. È utile per:
- un laboratorio di prova isolato dalla rete di casa;
- il collegamento tra un'applicazione e il suo database, che non deve essere raggiungibile da altri;
- una VM con un router o firewall virtuale, che fa da unico punto di passaggio tra la rete interna e il bridge esterno.
Open vSwitch e SDN
Open vSwitch è uno switch virtuale più avanzato, con funzioni come il mirroring del traffico e protocolli di tunnel. Proxmox lo supporta, e offre anche una funzione SDN che gestisce zone e VLAN dall'interfaccia, utile soprattutto nei cluster. Nel mio lavoro, per un homelab con uno o due nodi, il bridge Linux VLAN-aware resta la soluzione più semplice e robusta: Open vSwitch ha senso quando servono funzioni che il bridge non offre.
In sintesi
- Il bridge Linux è uno switch virtuale che collega VM e schede fisiche; l'IP dell'host sta sul bridge.
- Un bridge VLAN-aware permette di assegnare un tag VLAN a ogni scheda virtuale.
- La porta dello switch verso l'host deve essere un trunk con VLAN nativa coerente.
- Il bonding active-backup dà tolleranza ai guasti senza configurare lo switch; LACP richiede il suo supporto.
- Bridge senza uplink creano reti interne isolate per laboratori e servizi interni.