Questi metodi stanno facendo cose sostanzialmente diverse. Per capire perché, è necessario comprendere il modello a più livelli di rete. Per i nostri scopi qui, i livelli 1, 2 e 3 sono importanti:
- Il livello 1 è il livello fisico: specifica cose come i cavi che è possibile utilizzare, quali schemi di tensione / corrente rappresentano 1 e 0 su quel cavo, in che modo i dispositivi alle estremità di un cavo negoziano la velocità di trasmissione in cui operano e così via.
- Il livello 2 è il livello del collegamento: questo specifica quali lingue gli elementi alle estremità di un cavo comunicano tra loro. I dispositivi Ethernet a questo livello hanno elementi come frame e indirizzi MAC.
- Il livello 3 è il livello di rete: specifica come i dispositivi utilizzano un collegamento di livello 2 diretto a un altro dispositivo per raggiungere un terzo dispositivo che non possono raggiungere direttamente al livello 2. I dispositivi in questo livello hanno indirizzi IP e tabelle di routing.
MACVLAN / MACVTAP
MACVLAN crea un dispositivo di livello 2 o link virtuale, con un proprio indirizzo MAC, che condivide il livello 1 o il livello fisico con un dispositivo esistente. Il caso più evidentemente comprensibile è quando si dispone di un dispositivo Ethernet collegato a una rete e si crea un dispositivo MACVLAN basato su quel dispositivo Ethernet; ora hai due "dispositivi" Ethernet con indirizzi MAC diversi ma che trasmettono entrambi i loro frame sullo stesso cavo. Parlerò di MACVTAP un po 'più in basso.
Le interfacce MACVLAN possono interagire in diversi modi con l'interfaccia Ethernet esistente, in particolare quando appare una trama su una delle interfacce che è indirizzata all'altra:
- In modalità privata , il frame viene gettato via; non è possibile che le due interfacce comunichino tra loro, solo con dispositivi esterni.
- In modalità vepa , il frame viene inviato sul livello fisico come qualsiasi altro frame. Se il dispositivo è collegato a uno switch abbastanza intelligente da individuare che il frame deve essere rispedito giù dalla stessa porta su cui è arrivato, allora verrà ricevuto dallo stesso layer fisico che lo ha inviato e quindi il layer 2 utilizzare il MAC per inviarlo all'interfaccia di rete desiderata.
- In modalità bridge , quando un frame appare su un dispositivo, viene controllato per vedere se è destinato all'altro e, in tal caso, viene inviato lì senza passare attraverso il layer 1.
- Ci sono anche un paio di modalità più oscure.
Si noti che le interfacce MACVLAN hanno un'importante limitazione: non sono in grado di indirizzare l'apprendimento. Quindi non è possibile collegare un'interfaccia MACVLAN a un secondo dispositivo fisico e aspettarsi di essere in grado di raggiungere quel secondo dispositivo fisico sul primo. Funziona con l'interfaccia Ethernet originale ma non con un'interfaccia MACVLAN ad essa collegata.
TUN / TAP
Un'interfaccia TAP è anche un nuovo dispositivo di livello 2 virtuale ma senza livello 1 collegato. Invece, un programma può ottenere un descrittore di file che rappresenta il livello fisico. Può quindi scrivere dati di frame Ethernet grezzi in quel descrittore di file e il kernel li tratterà come qualsiasi altro pacchetto Ethernet che riceve su una vera interfaccia fisica.
La cosa importante delle interfacce TAP è che il livello fisico è in modalità utente; qualsiasi bit di software con le autorizzazioni appropriate può generare frame Ethernet nel modo che preferisce e inserirli in qualcosa che il kernel considera lo stesso di una vera interfaccia fisica. Questo li rende molto utili per cose come VPN e tunneling; puoi scrivere qualunque tipo di software di tunneling ti piaccia nello spazio utente e non c'è bisogno di immischiarsi nello spazio del kernel per inserire i frame nello stack di rete, basta creare un dispositivo TAP e scrivere i frame nel suo descrittore di file.
I dispositivi TUN sono esattamente come i dispositivi TAP, tranne per il fatto che operano al livello 3 anziché al livello 2 e il software in modalità utente deve scrivere pacchetti IP grezzi nel descrittore di file anziché in frame Ethernet grezzi.
Tornando ai dispositivi MACVTAP , si tratta di una sorta di confusione tra le interfacce MACVLAN e TAP. Come le interfacce TAP, un programma in modalità utente può ottenere un descrittore di file e scrivere in esso frame Ethernet grezzi. Come un'interfaccia MACVLAN, questi frame vengono quindi inviati sul livello fisico di un dispositivo Ethernet reale. Ciò consente di adattare facilmente il software scritto per utilizzare i dispositivi TAP per utilizzare invece un dispositivo MACVLAN.
VNET
Questo è concettualmente simile alla rete TUN / TAP ma ha un piano di controllo più sviluppato (quindi il software in modalità utente che lo utilizza può configurare l'interfaccia in modo più flessibile) e un piano dati più ottimizzato (in modo da poter spostare i dati attraverso il dispositivo di rete virtuale più in modo efficiente).
Tutti questi fanno cose simili ma hanno capacità leggermente diverse. Tutti possono essere utilizzati per connettere una VM a una rete Ethernet:
- Un prodotto di virtualizzazione può prendere frame Ethernet dal guest e scriverli nel descrittore di file per un dispositivo TAP. A quel dispositivo TAP può essere assegnato il proprio indirizzo IP dall'host, oppure può essere asservito a un bridge insieme a un'interfaccia Ethernet per condividere l'indirizzo IP dell'host, oppure iptables può essere configurato per inoltrare il traffico su di esso utilizzando NAT.
- Un prodotto di virtualizzazione può quel frame Ethernet dal guest e scriverli nel descrittore di file per un dispositivo MACVTAP; questi vengono poi trasmessi direttamente sul livello fisico di un dispositivo Ethernet, dando alla VM un dispositivo Ethernet "reale" (sebbene si noti che è possibile creare dispositivi MACVLAN / MACVTAP per altri tipi di interfacce di rete come i bridge).
- Un prodotto di virtualizzazione può connettere un driver virtio nel guest al driver virtio nell'host per un networking molto efficiente.