KVM, acte IV : Le réseautage

IMG_0023

Suite de la série d’articles sur KVM :

  1. Présentation et installation
  2. Manipulation des VMs
  3. Gestion du stockage
  4. Gestion du réseau
  5. 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é :

<network>
  <name>reseau-br1</name>
  <uuid>9e6fd777-5012-4610-b7c6-1e45f2ee787f</uuid>
  <forward mode='bridge'/>
  <bridge name='br0' />
  <mac address='52:54:00:24:C6:11'/>
</network>

 

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

 

<network>
  <name>nat</name>
  <uuid>9e6fd777-60b5-4610-b7c6-1e45f2ee787f</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <mac address='52:54:00:24:C6:1F'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254' />
    </dhcp>
  </ip>
</network>

 

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 :

brtcl addbr br10
brctl addif br10 eth0.10

Et pour automatiser le tout dans /etc/network/interfaces :

# 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 !

 

 

Sur le même sujet :