La solution retenue pour les communications réseau entre système hôte et machine virtuelle utilise la fonction TUN/TAP du noyau Linux. Cette solution est utilisée dans toutes les sections suivantes de ce document.
Indépendamment du contexte de la virtualisation, TUN/TAP est une fonction de réception et de transmission de paquets entre le noyau et les programmes de l'espace utilisateur. Cette fonction peut être vue comme une simple interface point à point ou Ethernet qui, au lieu de recevoir les paquets d'un média physique, les reçoit du programme de l'espace utilisateur. De même, cette interface au lieu d'envoyer les paquets vers un média physique, les transmet au programme de l'espace utilisateur.
Dans le contexte de ce document, le programme de l'espace mémoire utilisateur est l'instance virtuelle de système d'exploitation. L'interface réseau TUN/TAP devient un canal de communication réseau entre le système hôte et un système virtualisé. Par analogie, on peut assimiler ce canal de communication à un cordon de brassage qui relie le système de commutation de circuit fourni par le système hôte à l'interface Ethernet du système virtualisé.
La création d'une interface TAP doit se faire par l'intermédiaire d'un programme de l'espace utilisateur. En fonction des usages, plusieurs outils différents permettent de manipuler ces interfaces. On peut citer tunctl qui fait partie du paquet uml-utilities. L'acronyme UML correspond à User Mode Linux une solution qui permet «d'imbriquer» l'exécution de plusieurs systèmes Linux. On peut aussi citer openvpn qui appartient au paquet éponyme. Il s'agit là de manipuler le tunnel correspondant au réseau virtuel.
Cette section se décompose en deux parties consacrées à la mise en œuvre d'une interface TAP. La première propose une configuration d'interface à partir de la session utilisateur alors que la deuxième propose une configuration permanente au niveau système sur la distribution Debian GNU/Linux.
Configuration manuelle d'une interface TAP
Aujourd'hui, la commande ip du paquet iproute2 est devenue le «couteau suisse» des manipulations réseau. C'est elle que l'on utilise le plus souvent.
La création d'une interface utilise la syntaxe suivante :
$sudoip tuntap add mode tap dev tap1 group kvm multi_queue
![]()
$ip addr ls tap1 14: tap1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether f6:98:ad:8f:8e:c1 brd ff:ff:ff:ff:ff:ff$sudo ip link set dev tap1 up![]()
$ip addr ls tap1 14: tap1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000 link/ether f6:98:ad:8f:8e:c1 brd ff:ff:ff:ff:ff:ff
|
L'utilisation de sudo suppose que les droits aient été délégués au préalable. Soit l'utilisateur a été intégré au groupe système %kvm ALL=(ALL) NOPASSWD: /usr/bin/ovs-vsctl, /sbin/ip, /usr/sbin/iotop |
|
|
L'attribution de l'interface tap1 au groupe système L'option |
|
|
Pour être utilisable, l'interface tap1 doit être activée. Pour reprendre l'analogie entre canal de communication mémoire et cordon de brassage, on peut considérer que la prise réseau dispose d'un «interrupteur». La commande d'ouverture de cet interrupteur est symétrique à celle présentée dans la copie d'écran ci-dessus : |
Configuration système d'une interface TAP
Pour généraliser l'utilisation d'une interface TAP, il est possible de la paramétrer directement au niveau système dans le fichier de configuration des interfaces réseau. Voici un extrait de fichier /etc/network/interfaces.
auto tap1
iface tap1 inet manual
up ip tuntap add mode tap dev $IFACE group kvm multi_queue
up ip link set dev $IFACE up
down ip link set dev $IFACE down
down ip tuntap del mode tap dev $IFACE
À partir de cet exemple, il est possible de créer autant de «cordons de brassage» que nécessaire sur le système hôte.
Pour conclure cette section, on dispose maintenant d'interfaces qui sont utilisées dans la suite du document pour connecter les instances de systèmes virtuels aux ports du commutateur réseau du système hôte.



