Ces méthodes font des choses fondamentalement différentes. Pour comprendre pourquoi, vous devez comprendre le modèle de réseautage en couches. Pour nos besoins ici, les couches 1, 2 et 3 sont importantes:
- La couche 1 est la couche physique - elle spécifie des éléments tels que les câbles que vous pouvez utiliser, quels modèles de tension / courant représentent 1 et 0 sur ce câble, comment les périphériques à chaque extrémité d'un câble négocient le débit binaire sur lequel ils fonctionnent, etc.
- La couche 2 est la couche de liaison - elle spécifie quelle langue les choses à chaque extrémité d'un câble se parlent. Les périphériques Ethernet de cette couche ont des éléments tels que des trames et des adresses MAC.
- La couche 3 est la couche réseau - elle spécifie comment les appareils utilisent un lien direct de la couche 2 vers un autre appareil pour atteindre un troisième appareil qu'ils ne peuvent pas atteindre directement à la couche 2. Les appareils de cette couche ont des adresses IP et des tables de routage.
MACVLAN / MACVTAP
MACVLAN crée un périphérique virtuel de couche 2 ou de couche liaison, avec sa propre adresse MAC, qui partage la couche 1 ou la couche physique avec un périphérique existant. Le cas le plus compréhensible est celui où vous avez un périphérique Ethernet branché sur un réseau et où vous créez un périphérique MACVLAN basé sur ce périphérique Ethernet; vous avez maintenant deux "périphériques" Ethernet avec des adresses MAC différentes mais qui transmettent tous les deux leurs trames sur le même câble. Je parlerai de MACVTAP un peu plus loin.
Les interfaces MACVLAN peuvent interagir de plusieurs manières différentes avec l'interface Ethernet existante, notamment lorsqu'une trame apparaît sur l'une des interfaces qui est adressée à l'autre:
- En mode privé , le cadre est jeté; il n'est pas possible que les deux interfaces communiquent entre elles, uniquement avec des appareils externes.
- En mode vepa , la trame est envoyée sur la couche physique comme n'importe quelle autre trame. Si vous avez branché l'appareil sur un commutateur suffisamment intelligent pour repérer que la trame doit ensuite être renvoyée sur le même port sur lequel elle est arrivée, elle sera reçue par la même couche physique qui l'a envoyée, puis la couche 2 utilisez le MAC pour l'envoyer à l'interface réseau prévue.
- En mode pont , lorsqu'une trame apparaît sur un appareil, elle est vérifiée pour voir si elle est destinée à l'autre et si oui, elle y est envoyée sans passer par la couche 1.
- Il existe également quelques modes plus obscurs.
Notez que les interfaces MACVLAN ont une restriction importante: elles ne sont pas capables d'apprendre l'adresse. Vous ne pouvez donc pas relier une interface MACVLAN à un deuxième périphérique physique et vous attendre à pouvoir atteindre ce deuxième périphérique physique par-dessus le premier. Cela fonctionne avec l'interface Ethernet d'origine mais pas avec une interface MACVLAN qui lui est attachée.
TUN / TAP
Une interface TAP est également un nouveau périphérique virtuel de couche 2 mais sans couche 1 qui lui est attachée. Au lieu de cela, un programme peut obtenir un descripteur de fichier représentant la couche physique. Il peut ensuite écrire des données de trame Ethernet brutes dans ce descripteur de fichier et le noyau les traitera comme tout autre paquet Ethernet qu'il reçoit sur une véritable interface physique.
La grande chose au sujet des interfaces TAP est que la couche physique est en mode utilisateur; n'importe quel logiciel avec les autorisations appropriées peut générer des trames Ethernet comme bon lui semble et les insérer dans quelque chose que le noyau traite de la même manière qu'une véritable interface physique. Cela les rend très utiles pour des choses comme les VPN et le tunneling; vous pouvez écrire n'importe quel type de logiciel de tunneling que vous aimez dans l'espace utilisateur et il n'est pas nécessaire de se mêler de l'espace du noyau pour obtenir les trames dans la pile réseau, il vous suffit de créer un périphérique TAP et d'écrire les trames dans son descripteur de fichier.
Les périphériques TUN sont exactement comme les périphériques TAP, sauf qu'ils fonctionnent sur la couche 3 au lieu de la couche 2 et que le logiciel en mode utilisateur doit écrire des paquets IP bruts dans le descripteur de fichier au lieu de trames Ethernet brutes.
Pour en revenir aux périphériques MACVTAP , il s'agit d'une sorte de confusion entre les interfaces MACVLAN et TAP. Comme les interfaces TAP, un programme en mode utilisateur peut obtenir un descripteur de fichier et y écrire des trames Ethernet brutes. Comme une interface MACVLAN, ces trames sont ensuite envoyées sur la couche physique d'un véritable périphérique Ethernet. Cela vous permet d'adapter facilement un logiciel écrit pour utiliser des appareils TAP pour utiliser un appareil MACVLAN à la place.
VNet
Ceci est conceptuellement similaire à la mise en réseau TUN / TAP mais a un plan de contrôle plus développé (de sorte que le logiciel en mode utilisateur l'utilisant peut configurer l'interface de manière plus flexible) et un plan de données plus optimisé (afin que vous puissiez déplacer les données via le périphérique réseau virtuel plus efficacement).
Tous ces éléments font des choses similaires mais ont des capacités légèrement différentes. Tous peuvent être utilisés pour connecter une machine virtuelle à un réseau Ethernet:
- Un produit de virtualisation peut prendre des trames Ethernet de l'invité et les écrire dans le descripteur de fichier pour un périphérique TAP. Ce périphérique TAP peut se voir attribuer sa propre adresse IP par l'hôte, ou il peut être asservi à un pont avec une interface Ethernet pour partager l'adresse IP de l'hôte, ou iptables peut être configuré pour transférer le trafic sur celui-ci à l'aide de NAT.
- Un produit de virtualisation peut que les trames Ethernet de l'invité et les écrire dans le descripteur de fichier pour un périphérique MACVTAP; ceux-ci sont ensuite transmis directement sur la couche physique d'un périphérique Ethernet, ce qui donne à la machine virtuelle un «véritable» périphérique Ethernet (bien qu'il soit possible de créer des périphériques MACVLAN / MACVTAP pour d'autres types d'interfaces réseau telles que des ponts).
- Un produit de virtualisation peut connecter un pilote virtio dans l'invité au pilote virtio dans l'hôte pour une mise en réseau très efficace.