Esses métodos estão fazendo coisas fundamentalmente diferentes. Para entender o porquê, você precisa entender o modelo em camadas de rede. Para nossos propósitos aqui, as camadas 1, 2 e 3 são importantes:
- A camada 1 é a camada física - especifica coisas como quais cabos você pode usar, quais padrões de tensão / corrente representam 1s e 0s nesse cabo, como os dispositivos em cada extremidade de um cabo negociam em qual taxa de bits eles operam etc.
- A camada 2 é a camada de link - isso especifica o idioma em que cada extremidade de um cabo se comunica. Os dispositivos Ethernet nessa camada têm coisas como quadros e endereços MAC.
- A camada 3 é a camada de rede - especifica como os dispositivos usam um link direto da camada 2 para outro dispositivo para alcançar um terceiro dispositivo que eles não podem alcançar diretamente na camada 2. Os dispositivos dessa camada têm endereços IP e tabelas de roteamento.
MACVLAN / MACVTAP
O MACVLAN cria um dispositivo de camada virtual 2 ou de camada de link, com seu próprio endereço MAC, que compartilha a camada 1 ou física com um dispositivo existente. O caso mais obviamente compreensível é quando você tem um dispositivo Ethernet conectado a uma rede e cria um dispositivo MACVLAN com base nesse dispositivo Ethernet; agora você tem dois "dispositivos" Ethernet com endereços MAC diferentes, mas que transmitem seus quadros no mesmo cabo. Vou falar um pouco mais sobre o MACVTAP.
As interfaces MACVLAN podem interagir de várias maneiras diferentes com a interface Ethernet existente, principalmente quando um quadro aparece em uma das interfaces que é endereçada à outra:
- No modo privado , o quadro é jogado fora; não é possível que as duas interfaces se comuniquem entre si, apenas com dispositivos externos.
- No modo vepa , o quadro é enviado sobre a camada física como qualquer outro quadro. Se você tiver o dispositivo conectado a um comutador inteligente o suficiente para detectar que o quadro precisa ser enviado de volta pela mesma porta em que chegou, ele será recebido pela mesma camada física que o enviou e a camada 2 será use o MAC para enviá-lo para a interface de rede pretendida.
- No modo de ponte , quando um quadro aparece em um dispositivo, ele é verificado para ver se é destinado ao outro e, se for o caso, é enviado para lá sem passar pela camada 1.
- Existem também alguns modos mais obscuros.
Observe que as interfaces MACVLAN têm uma restrição importante: elas não são capazes de aprender sobre endereços. Portanto, você não pode conectar uma interface MACVLAN a um segundo dispositivo físico e espera poder alcançar esse segundo dispositivo físico pelo primeiro. Isso funciona com a interface Ethernet original, mas não com uma interface MACVLAN conectada a ela.
TUN / TAP
Uma interface TAP também é um novo dispositivo virtual da camada 2, mas sem a camada 1 anexada. Em vez disso, um programa pode obter um descritor de arquivo representando a camada física. Ele pode gravar dados brutos do quadro Ethernet nesse descritor de arquivo e o kernel os tratará como qualquer outro pacote Ethernet que receber em uma interface física real.
O grande problema das interfaces TAP é que a camada física está no modo de usuário; qualquer software com as permissões apropriadas pode gerar quadros Ethernet da maneira que desejar e transformá-los em algo que o kernel trata da mesma forma que uma interface física real. Isso os torna muito úteis para coisas como VPNs e encapsulamento; você pode escrever qualquer tipo de software de encapsulamento que desejar no espaço do usuário e não há necessidade de se intrometer no espaço do kernel para colocar os quadros na pilha de rede, basta criar um dispositivo TAP e gravar os quadros no seu descritor de arquivo.
Os dispositivos TUN são exatamente como os dispositivos TAP, exceto que operam na camada 3, em vez da camada 2, e o software no modo de usuário precisa gravar pacotes IP brutos no descritor de arquivo em vez de quadros Ethernet brutos.
Voltando aos dispositivos MACVTAP , essas são uma espécie de confusão entre as interfaces MACVLAN e TAP. Como as interfaces TAP, um programa no modo usuário pode obter um descritor de arquivo e gravar quadros Ethernet brutos nele. Como uma interface MACVLAN, esses quadros são enviados pela camada física de um dispositivo Ethernet real. Isso permite que você adapte facilmente o software que foi escrito para usar dispositivos TAP para usar um dispositivo MACVLAN.
VNet
Isso é conceitualmente semelhante à rede TUN / TAP, mas possui um plano de controle mais desenvolvido (para que o software no modo usuário possa configurar a interface com mais flexibilidade) e um plano de dados mais otimizado (para que você possa mover mais os dados pelo dispositivo de rede virtual) eficientemente).
Tudo isso faz coisas semelhantes, mas tem recursos ligeiramente diferentes. Todos eles podem ser usados para conectar uma VM a uma rede Ethernet:
- Um produto de virtualização pode pegar quadros Ethernet do convidado e gravá-los no descritor de arquivo para um dispositivo TAP. Esse dispositivo TAP pode receber seu próprio endereço IP pelo host, ou pode escravizar uma ponte junto com uma interface Ethernet para compartilhar o endereço IP do host, ou as tabelas de ip podem ser configuradas para encaminhar o tráfego usando NAT.
- Um produto de virtualização pode que os quadros Ethernet do convidado e os gravem no descritor de arquivo para um dispositivo MACVTAP; estes são transmitidos diretamente na camada física de um dispositivo Ethernet, efetivamente dando à VM um dispositivo Ethernet "real" (embora observe que é possível criar dispositivos MACVLAN / MACVTAP para outros tipos de interfaces de rede, como pontes).
- Um produto de virtualização pode conectar um driver virtio no convidado ao driver virtio no host para uma rede muito eficiente.