Outils pour utilisateurs

Outils du site


software:applications:virsh:gerer_les_reseaux

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
software:applications:virsh:gerer_les_reseaux [2024/07/05 08:48] yoannsoftware:applications:virsh:gerer_les_reseaux [2026/07/12 10:14] (Version actuelle) yoann
Ligne 3: Ligne 3:
  
 ====== KVM : Gestion des réseaux via virsh ====== ====== KVM : Gestion des réseaux via virsh ======
 +
 +
 +===== Prérequis =====
 +
 +  - L'utilisateur doit faire parti du groupe ''libvirt'' pour pouvoir interagir avec la CLI ''virsh'' ;
 +  - ''virsh'' doit être lancé en **mode système** via l'option ''%%--connect qemu:///system%%'' (comportement par défaut).
 +
 +
 +<note>
 +Lorsque virsh est exécuté en mode session, les réseaux ne sont pas disponibles/visibles mais les VMs peuvent être connectées aux ponts existants (actifs sur l’hôte).
 +</note>
 +
  
 Lister les réseaux disponibles : Lister les réseaux disponibles :
Ligne 16: Ligne 28:
 </code> </code>
  
-===== Créer un réseau de type pont =====+===== A propos des types de réseaux =====
  
-Comme pour les domaines (VMs) on peut exporter une configuration existante en XML et y apporter les modifications nécessaires à notre nouvelle définition :+:TODO_DOCUPDATE: 
 + 
 +Lors de la création d'un réseau virtuel avec **virt-manager**, on a le choix entre plusieurs modes de connexion : 
 + 
 +  * Le mode **NAT**((**N**etwork **A**ddress **T**ranslation)) permet aux VMs de se connecter à Internet au travers de l’hôte tout en maintenant une isolation vis-à-vis des réseaux locaux et des autre VMs (mode masquarade) 
 +  * Le mode **routé** 
 +  * Le mode **ouvert** 
 +  * Le mode **isolé**(isolated) : les VMs peuvent communiquer entre-elles mais n'accèdent pas à Internet au travers de l'hote hyperviseur. 
 +  * Le mode pool SR-IOV 
 + 
 +===== Créer un réseau isolé avec virsh ===== 
 + 
 +<note> 
 +Comme pour les domaines (définitions de VMs) on peut exporter une configuration existante en XML et y apporter les modifications nécessaires à notre nouvelle connexion via la commande ''**virsh net-dumpxml**'').
  
 <code bash> <code bash>
-virsh net-dumpxml default > vm-internal.xml+virsh net-dumpxml default > my-network.xml
 </code> </code>
 +
 +</note>
 +
 +
 +Pour créer une réseau en mode isolé, il suffit de créer un périphérique de type pont (bridge) sans option de nattage (''%%<forward mode="nat"/>%%'') ou de routage (''%%<forward mode="route"/>%%''). Les VMs connectées à ce pont (vswitch) pourront communiquer entre-elles sans communiquer vers l'extérieur.
 +
 +
 +Ici on souhaite définir un réseau interne isolé pour interconnecter plusieurs VMs sans connexion Internet. 
  
 <file xml vm-internal.xml> <file xml vm-internal.xml>
 <network> <network>
   <name>vm-internal</name>   <name>vm-internal</name>
 +  <title>internal network</title>
 +  <description>vswich without Internet connection, no DHCP.</description>
   <bridge name='virbr1' stp='on' delay='0'/>   <bridge name='virbr1' stp='on' delay='0'/>
 </network> </network>
 </file> </file>
  
-Ici on souhaite définir un réseau interne pour interconnecter plusieurs VMs sans connexion Internet.+Ce premier exemple de configuration est minimaliste. L'hyperviseur ne fournira aucun service d’auto configuration réseau (DHCP ou résolution DNS). Il définit une interface ''virbr1'' (vswitch) sur l'hyperviseur qu'il faudra communiquer aux VMs que l'on souhaite relier 
  
-Une fois le fichier enregistré et modifié, pour définir le nouveau réseau, on peut utiliser les commandes **virsh net-define** (réseau permanent)  ou **virsh net-create** (transitoire/temporaire).+Une fois le fichier enregistré et modifié, pour définir le nouveau réseau. On peut utiliser les commandes 
 +   **virsh net-define** (pour créer un réseau permanent) 
 +   **virsh net-create** (pour un définition transitoire/temporaire).
    
 <code bash> <code bash>
Ligne 68: Ligne 106:
 </note> </note>
  
-===== Ajouter une interface sur une VM =====+===== Joindre un réseau =====
  
-On peut à présent ajouter une interface à chaque VM que l'on souhaite connecter :+Pour qu'une VM puisse joindre le réseau, on définit une nouvelle interface utilisant le pont dédié au réseau :
  
 <note> <note>
Ligne 90: Ligne 128:
 Dans notre cas le réseau ne comporte pas de DHCP : il faudra configurer manuellement et démarrer les interfaces sur chaque VMs pour qu'elles puissent communiquer sur le réseau vm-internal. Dans notre cas le réseau ne comporte pas de DHCP : il faudra configurer manuellement et démarrer les interfaces sur chaque VMs pour qu'elles puissent communiquer sur le réseau vm-internal.
 </note> </note>
 +
 +<note warning>
 +On peut rencontrer quelques difficultés à joindre un réseau de type pont lorsque virsh s'exécute en **mode session**. Confère note [[software/applications/qemu/depannage/failed-to-parse-default-acl-file|Echec de connexion en mode session]].
 +</note>
 +
 +===== Déconnecter une VM d'un réseau =====
 +
 +Pour déconnecter une VM d'un réseau, on retire l'interface vers celui-ci : 
 +
 +<code bash>
 +# Lister toutes les interfaces du domaine et relever la MAC
 +virsh domiflist tethys
 +
 +# Supprimer l'interface en la désignant par sa MAC
 +virsh detach-interface tethys --type bridge --mac "52:54:00:12:2f:ae" --config
 +</code>
  
 ===== Pare-feu ===== ===== Pare-feu =====
Ligne 128: Ligne 182:
 <code> <code>
 insert rule ipfilter outbound position 34 oif "virbr0" tcp dport 22 log prefix "[FW] [ACCCEPT] [RID=62] " level notice counter accept comment "Autorise connexion SSH aux VMs KVM" insert rule ipfilter outbound position 34 oif "virbr0" tcp dport 22 log prefix "[FW] [ACCCEPT] [RID=62] " level notice counter accept comment "Autorise connexion SSH aux VMs KVM"
 +</code>
 +
 +Pour que les VMs puissent avoir accès à Internet l’hôte doit également autoriser la transmission des paquets ([[netadmin:linux:ip-forwarding|forwarding]]) :
 +
 +Dans cet exemple la configuration préexistante trace et mais rejette les transmissions de trafic :
 +
 +<code>
 +list chain ipfilter forward
 +table ip ipfilter {
 +        chain forward { # handle 3
 +                type filter hook forward priority filter; policy drop;
 +                log prefix "[FW] [REJECT] [RID=668] " counter packets 0 bytes 0 reject comment "Refuse toute transmission non explicitement autorisee" # handle 41
 +        }
 +}
 +</code>
 +
 +On peut autoriser les transmissions HTTP et HTTPS en provenance du  
 +
 +<code>
 +insert rule ipfilter forward iif "virbr0" oif "lan0" ct state new tcp dport { 80, 443 } log prefix "[FW] [REJECT] [RID=81] " level notice counter accept comment "Transfert le trafic web pour les VMs KVM"
 +
 +
 +insert rule ipfilter forward ct state established,related counter accept comment "Transfert les trafics des connexions explicitement autorisees"
 </code> </code>
  
Ligne 134: Ligne 211:
   * https://fr.linux-console.net/?p=22230   * https://fr.linux-console.net/?p=22230
   * https://www.techtarget.com/searchitoperations/tip/Use-virsh-commands-to-manage-KVM-networking   * https://www.techtarget.com/searchitoperations/tip/Use-virsh-commands-to-manage-KVM-networking
 +  * [[https://wiki.libvirt.org/VirtualNetworking.html|Les types de réseaux de libvirt (libvirt.org) (en)]]
software/applications/virsh/gerer_les_reseaux.1720169303.txt.gz · Dernière modification : 2024/07/05 08:48 de yoann