Il networking virtuale, una volta compreso come funzionano VMware ESX e le macchine virtuali che girano su di esso, è un argomento semplice da capire: una rete virtuale permette di collegare in rete le macchine virtuali così come si fa per le macchine fisiche. Così come esistono switch fisici, dove si collegano i cavi di rete dei vari PC, allo stesso modo esistono switch virtuali configurabili all'interno di un host ESX. Gli switch virtuali possono essere collegati con la rete fisica semplicemente associandoli ad una o più interfacce di rete disponibili nel server che ospita ESX.
Gli switch virtuali consentono alle macchine virtuali sullo stesso host ESX Server di comunicare tra loro utilizzando gli stessi protocolli utilizzati negli switch fisici, senza la necessità di hardware di rete aggiuntivo; vi è inoltre pieno supporto alle VLAN (standard 802.1Q).
Le stesse macchine virtuali, così come PC o server reali, possono essere dotate di una o più schede Ethernet, ognuna delle quali con proprio indirizzo IP e indirizzo MAC. Dal punto di vista della rete, le macchine virtuali hanno le stesse proprietà delle macchine fisiche.
Le componenti chiave del virtual networking sono pertanto due:
- Le interfacce di rete virtuali, utilizzate dalle singole macchine virtuali.
- Gli switch virtuali (vSwitch), che collegano le macchine virtuali tra loro e con la rete fisica sfruttando gli uplink dati dalle interfacce fisiche dell'host ESX. Uno vSwitch può collegare i propri uplink a una o più schede Ethernet fisiche, con la possibilità di fare NIC Teaming (cioè di aggregare più canali Ethernet).
Interfacce di rete virtuali
Esistono cinque diversi tipi di interfacce di rete virtuali, tutte con propri indirizzi MAC e strettamente operanti sul livello 2 della pila OSI.
Tre sono adattatori Ethernet destinati alle macchine virtuali:
- VMXNET - è un dispositivo paravirtualizzato che funziona solo se VMware Tools è installato nel sistema operativo guest. Un dispositivo di paravirtualizzazione è progettato specificatamente per operare in un ambiente virtualizzato. Supporta sistemi sia a 32bit che a 64bit, e supporta funzioni avanzate come TCP Segmentation Offload (TSO) e Jumbo Frames. Quando, durante la creazione di una macchina virtuale, si seleziona l'adattatore di rete in modalità "flessibile" (Flexible Adapter), vmxnet è l'adattatore che viene utilizzato dal sistema operativo guest dopo aver installato VMware Tools. Fra i dispositivi vmxnet, si distinguono l'Enhanced VMXNET, reso disponibile a partire da VMware ESX 3.5, e il vmxnet generation 3 (VMXNET3), introdotto con VMware ESX 4.0.
- VLANCE - è un dispositivo virtuale che fornisce l'emulazione delle interfacce Ethernet Lance AMD pcnet32. E' compatibile con la maggior parte dei sistemi guest a 32-bit. Questo adattatore viene utilizzato quando la macchina virtuale ha l'interfaccia di rete in modalità "flessibile" è VMware Tools non è stato ancora installato nel sistema operativo guest.
- E1000 - è un dispositivo virtuale che fornisce l'emulazione dell'adattatore Ethernet Intel E1000. E' utilizzato principalmente su macchine virtuali a 64-bit.
Gli altri adattatori di rete virtuale sono:
- VSWIF - dispositivo simile agli adattatori paravirtualizzati vmxnet, utilizzato solo dalla console di servizio ESX Server (non su ESXi, dove la console di servizio non esiste).
- VMKNIC - dispositivo virtuale del VMkernel, ossia lo strato software che gestisce la maggior parte delle risorse fisiche sugli host ESX/ESXi. Il vmknic viene utilizzato dallo stack TCP/IP per i servizi di VMotion, NFS e iSCSI.
In generale, per tutte le interfacce di rete virtuali, funzioni come velocità e impostazioni duplex, tipiche delle reti fisiche, non hanno rilevanza, perché tutto il processo di trasferimento dei dati avviene nella RAM del sistema host ESX/ESXi, istantaneamente e senza possibilità di collisioni.
Quale interfaccia utilizzare?
- Per ottenere le prestazioni migliori, utilizzare l'adattatore di rete paravirtualizzato VMXNET3. Le condizioni sono che la macchina virtuale abbia un virtual hardware versione 7 e che i VMware Tools siano installati nel sistema operativo della VM stessa.
- Per quei sistemi operativi che non dovessero supportare VMXNET3, o nel caso in cui non venga utilizzato un hardware virtuale versione 7, il consiglio è di utilizzare l'Enhanced VMXNET. Anche in questo caso i VMware Tools devono essere installati nel sistema operativo guest.
- In caso di problemi con l'Enhanced VMXNET, utilizzare un'interfaccia in modalità "flessibile" (Flexible Adapter).
Ricordiamo che VMXNET3 ed Enhanced VMXNET supportano i jumbo frames, diversamente dalle interfacce E1000 e vlance.
Importante: la velocità di rete riportata dai sistemi operativi delle macchine virtuali non riflette necessariamente la reale velocità sull'interfaccia di rete fisica. Ad esempio, può succedere di impiegare un'interfaccia vlance e rilevare che il sistema operativo riporti una velocità di 10Mbps, nonostante l'ìinterfaccia fisica di appoggio sia a 1Gbps. Il problema è dato dall'emulazione, tuttavia ESX non sarà limitato ad una velocità di soli 10Mbps, ma trasferirà i pacchetti alla massima velocità concessa dall'adattatore di rete fisica, nel nostro esempio a 1Gbps.
Nell'immagine qui sotto, possiamo vedere la fase di creazione di una macchina virtuale (in modalità avanzata) dove viene chiesto che tipo di interfaccia di rete utilizzare.
Gli switch virtuali (Virtual Switch)
Cominciamo col dire che funzionano come gli switch reali. Come qualsiasi switch Ethernet, operano al livello 2 (Data Link) del modello OSI e mantengono una tabella di MAC address (mac-address table) aggiornata ogni volta che il traffico attraversa lo switch.
Tuttavia, a differenza degli switch fisici, non necessitano di alcuna fase di apprendimento degli indirizzi MAC per la compilazione della MAC-Address table, perchè conoscono in modo autoritativo quali sono i dispositivi collegati su ogni porta. Inoltre, a regime, gli switch virtuali non aggiornano la tabella di inoltro con informazioni provenienti dalla rete fisica. Questo pone al riparo da attacchi di denial of service o tentativi di worm o virus che provano a scansionare host vulnerabili da infettare .
Gli switch virtuali non possono condividere una stessa interfaccia fisica. Una volta assegnata un'interfaccia fisica ad uno switch virtuale, questa non è più disponibile per gli altri.
A differenza del mondo reale, nelle reti virtuali di VMware si è obbligati ad utilizzare una topologia di rete a livello singolo, ossia non c'è possibilità di interconnettere switch multipli: il vantaggio è che non possono generarsi loop di rete, pertanto il protocollo Spanning Tree, non essendo necessario, non esiste. Questa caratteristica è chiamata "Virtual Switch Isolation".
Pur essendo vero che gli switch virtuali non sono collegabili tra loro, bisogna aggiungere che possono essere messi in comunicazione passando per la rete fisica. Chiaramente se due o più switch virtuali vengono connessi tra di loro tramite la rete fisica esterna, sono possibili tutte le problematiche che si presentano con switch reali nelle reti ethernet.
Per maggiori informazioni sugli switch, vedere l'articolo Switch e tecniche di switching. Per maggiori informazioni sullo Spanning Tree, vedere l'articolo STP - Spanning Tree Protocol.
Porte virtuali (Virtual Ports)
Le porte di uno switch virtuale forniscono le connessioni alle macchine virtuali così come le porte con connettore RJ-45 di uno switch fisico forniscono connessione ai dispositivi in rete. Ogni switch virtuale può avere fino a 1.016 porte virtuali, con un limite complessivo di 4.096 porte per tutti gli switch virtuali di un singolo host ESX/ESXi.
Uplinks e porte di uplink (Uplink Ports)
Le porte di uplink sono le porte di un vSwitch associate ad una o più interfacce fisiche Ethernet di un host ESX/ESXi, e permettono il collegamento della rete virtuale con quella fisica. Le interfacce fisiche Ethernet degli host ESX/ESXi che permettono la connessione tra la rete virtuale e la rete fisica sono pertanto dette "uplinks".
E' possibile configurare gli switch virtuali senza uplink, come spiegato nel paragrafo "Creazione di uno switch virtuale" più avanti.
Si usa questa modalità quando lo switch virtuale deve fornire connessione a macchine virtuali protette da un firewall, anch'esso installato all'interno di una VM. In tal caso il firewall virtuale avrà più interfacce virtuali, ed una di esse risulterà collegata allo switch privo di uplink.
Chiaramente per tutto il traffico interno alla rete virtuale, gli uplinks nono sono necessari.
Gruppi di porte (Port Groups)
I gruppi di porte costituiscono una funzionalità del virtual networking non presente nelle reti fisiche. Un Port Group può essere visto come insieme di caratteristiche ben precise che accomuna un preciso numero di porte. In sostanza, definisce tutte le caratteristiche di ogni porta. Proprio per questo motivo, quando si desidera collegare una macchina virtuale ad un particolare tipo di porta, è sufficiente specificare il nome del Port Groups a cui collegarla.
Fra le caratteristiche che si possono definire a monte vi sono:
• Nome del Virtual Switch di appartenenza
• VLAN ID e politiche per il tagging e il filtraggio (è concesso che diversi gruppi di porte possano avere lo stesso VLAN ID)
• Politica di Teaming (unione uplink, bilanciamento, ordine di failover, etc..)
• Opzioni di sicurezza
• Parametri di traffic shaping
Gestione del virtual networking
Viene effettuata tramite VMware vSphere Client. Una volta connessi all'host ESX, bisogna andare sul tab "Configuration", quindi su "Networking".
Creazione di un gruppo di porte (Port Group)
1) All'interno del tab "Configuration", andiamo nella sezione "Networking" (voce nel menu a sinistra), quindi selezioniamo la voce "Add Networking". |
2) Selezioniamo la prima opzione. |
3) Utilizziamo lo switch esistente: in questo modo verrà creato un gruppo di porte all'interno dello vSwitch0. |
4) Un Port Group può essere visto come insieme di caratteristiche ben precise che accomuna tutte le porte appartenenti al gruppo stesso. In questo passaggio possiamo definira il VLAN ID, nel nostro esempio uguale a 20. Se non si vogliono utilizzare VLAN, lasciare il valore predefinito (0). |
5) Prima di cliccare su Finish possiamo vedere un riepilogo di quanto configurato. |
6) Per collegare una macchina virtuale ad un Port Group, o meglio una o più interfacce virtuali della VM, è sufficiente specificare il nome del Port Group a cui collegare l'interfaccia. |
7) Ecco un riepilogo. Possiamo vedere che ora la macchina virtuale con Ubuntu Server ha un'interfaccia all'interno del Port Group "VLAN 20". |
Creazione di uno switch virtuale (Virtual Switch o vSwitch)
1) All'interno del tab "Configuration", andiamo nella sezione "Networking" (voce nel menu a sinistra), quindi selezioniamo la voce "Add Networking". |
2) Selezioniamo la prima opzione. Sino a questo punto i passaggi sono gli stessi che portano alla creazione di un Port Group. |
3) Creiamo un nuovo switch virtuale. |
4) La creazione di un nuovo virtual switch comporta la creazione di un primo Port Group. Diamo un nome al gruppo e un VLAN ID se necessario. Nel nostro esempio il gruppo raccoglierà macchine da proteggere in DMZ dietro un firewall. Il nostro switch sarà privo di uplinks: deve semplicemente fornire connessione a macchine virtuali protette da un firewall (anch'esso installato su una macchina virtuale). In tal caso il firewall avrà più interfacce virtuali, ed almeno una di esse sarà collegata allo switch appena creato. |
5) Dopo aver terminato la procedura, possiamo vedere un riepilogo di quanto configurato. Nella rete virtuale è stato aggiunto un nuovo switch, vSwitch1, con il Port Group "DMZ". |