KVM, acte IV : Le réseautage
Suite de la série d’articles sur KVM :
- Présentation et installation
- Manipulation des VMs
- Gestion du stockage
- Gestion du réseau
- Jongler avec ses VMs comme le manchot du logo
Alors autant le dire tout de suite, le réseau avec KVM, ça peut vite tourner à la grosse galère, surtout si vous utilisez les Vlans.
Mais bon, on y arrive quand même !
Comme sur les autres systèmes de virtualisation, le réseau virtuel peut être sous trois formes :
- Le réseau virtuel isolé : Les VMs de ce réseau peuvent parler entre elles mais sont complètement isolées du vrai réseau. Utilisé à des fins de tests uniquement, et encore, sans Internet, on ne peut pas faire grand chose.
- Le Nat, comme si vous étiez dans un réseau privé : Les VMs du même réseau peuvent se parler, peuvent sortir vers l’extérieur mais on ne peut pas rentrer de l’extérieur vers une VM natée (sauf faire des règles de redirection de port). C’est ce que j’utilise pour les tests.
- Le bridge, crée un switch virtuel, comme si la carte physique de l’hôte était sur le même switch que la carte virtuelle de l’invité. C’est ce que j’utilise en production.
Pour gérer le réseau, KVM utilise DNSMasq et des règles IPTables.
Création de réseau via un fichier XML
L’interface de Virt-Manager est assez limitée, il vaut mieux utiliser des fichiers XML :
On prend le réseau default comme exemple et on l’exporte en XML :
virsh net-dumpxml default > reseau.xml
On édite avec vi le fichier reseau.xml, puis on le ré-injecte dans virsh :
virsh define reseau.xml
Exemple de fichier XML pour un réseau bridge
D’abord créer un bridge sur la machine hôte avec brctl (installer bridge-utils si ce n’est pas déjà fait) :
apt-get install bridge-utils brtcl addbr br0 brctl addif br0 eth0
Exemple de fichier XML associé :
reseau-br1 9e6fd777-5012-4610-b7c6-1e45f2ee787f
Et on le démarre une première fois et pour toujours :
virsh net-start br0 virsh net-autostart br0
Exemple de fichier XML pour un réseau NAT
nat 9e6fd777-60b5-4610-b7c6-1e45f2ee787f
Et on le démarre une première fois et pour toujours :
virsh net-start nat virsh net-autostart nat
Et pour finir : réseau Bridge + Vlan !
Je disais au début qu’en général, on utilise les réseau bridge en production. Oui, mais en production, on utilise aussi les Vlan, donc on va avoir plusieurs interfaces virtuelles qui seront bridgées.
Et, c’est là que ça peut devenir compliqué !
D’abord un schéma, puis des explications :
VM1 eth0 ------\ Bridge KVM Vlan Hôte KVM Switch \___ br-vlan10 ---- eth0.10 ---- eth0 ----------- g0/1 trunk VM2 / eth0 ------/
On a une interface physique (eth0), connectée sur un port trunk de switch (port trunk chez Cisco = port taggé chez les autres).
Côté switch :
conf t interface g0/1 switchport mode trunk switchport trunk allowed vlan 10
Cette interface est découpée en sous-interfaces (ici eth0.10 est associé au vlan 10) :
# installer le paquet vlan apt-get install vlan # Créer une interface eth0.10 associée au vlan 10 vconfig add eth0 10
Il ne vous reste plus qu’à créer un bridge pour KVM et un réseau bridge :
<pre class="code">brtcl addbr br10
brctl addif br10 eth0.10
<p>
Et pour automatiser le tout dans /etc/network/interfaces :
</p>
<pre># Interface physique
auto eth0
Une entrée par Vlan
iface eth0.10 inet manual vlan_raw_device eth0
Interface virtuelle
auto br-vlan10 iface br-vlan10 inet manual bridge_ports eth0.10 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off up /sbin/ifconfig $IFACE up || /bin/true
Enjoy !