
Ce billet aborde la configuration des VLANs pour une VM reliée à un OpenVswitch.
Configuration avec VLAN
Configuration manuelle
La première possibilité qui vient à l'esprit est d'ajouter manuellement le VLAN après que la VM soit lancée. Avec l'exemple de configuration cité plus haut, la carte réseau de la VM sera automatiquement branchée sur notre br0 OpenVswitch. La partie visible sur l'hyperviseur de cette carte réseau "virtuelle" est un périphérique de type tap. Le nom de ce tap est configurable dans la libvirt ainsi que dans le fichier XML de la VM. Par défaut il sera préfixé vnet et suffixé par un identifiant numérique. Admettons que notre VM soit la seule de l'hyperviseur, logiquement il y aura donc un tap "vnet0" (vu comme port et interface) dans notre br0. Voyons voir:
[root@hyperviseur01 ~]# ovs-vsctl show c5f92e84-adaa-4b87-beac-c7f6c8129a7c Bridge "br0" Port "vnet0" Interface "vnet0" Port "br0" Interface "br0" type: internal ovs_version: "2.4.0"
[root@hyperviseur01 ~]# ovs-vsctl set port vnet0 tag=99 [root@hyperviseur01 ~]# ovs-vsctl show c5f92e84-adaa-4b87-beac-c7f6c8129a7c Bridge "br0" Port "vnet0" tag: 99 Interface "vnet0" Port "br0" Interface "br0" type: internal ovs_version: "2.4.0"
Configuration via la libvirt
<vlan>
<tag id='99'/>
</vlan>
Il est aussi possible de définir plusieurs VLAN en utilisant la balise trunk et non tag. Mais il faudra du coup "tagguer" vos interfaces dans l'OS de la VM. Classique quand il faut utiliser plusieurs VLAN. Mais quand un seul VLAN est utilisé, un seul tag, il s'agit d'un "access port", et il n'y a rien à faire de particuler dans l'OS de la VM.
Je décrirais peut être plus tard dans un autre billet une méthode plus répandue mais que je trouve plus contraignante qui passe toujours par la libvirt mais via la configuration d'un réseau/switch virtuel (notre br0) dans lequel il est possible de définir des portgroups. C'est au niveau des portgroups du switch qu'il faut définir les VLANs. Ensuite dans la configuration de la VM il faut la relier à ces portgroups. C'est moins direct vu qu'il faut modifier deux fichiers de configuration, mais ça rajoute une couche d'abstraction qui dans certains cas peut être utile.
En attendant, voici le bloc complet de configuration de l'interface réseau de ma VM:
<interface type='bridge'>
<mac address='52:54:00:06:7e:aa'/>
<source bridge='br0'/>
<vlan>
<tag id='99'/>
</vlan>
<virtualport type='openvswitch'/>
<model type='virtio'/>
</interface>
Et voici l 'état de mon br0 après avoir démarrer 2 VMs:
[root@hyperviseur01 ~]# ovs-vsctl show
c5f92e84-adaa-4b87-beac-c7f6c8129a7c
Bridge "br0"
Port "vnet0"
tag: 99
Interface "vnet0"
Port "br0"
Interface "br0"
type: internal
Port "vnet1"
tag: 99
Interface "vnet1"
ovs_version: "2.4.0"
Voilà, les 2 VMs étant sur le VLAN 99 elles communiquent bien ensemble.