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/04/17 22:34] yoannsoftware:applications:virsh:gerer_les_reseaux [2025/11/02 09:57] (Version actuelle) yoann
Ligne 16: Ligne 16:
 </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. 
 +  * Le mode **routé** 
 +  * Le mode **ouvert** 
 +  * Le mode **isolé**(isolated) permet de définir un réseau privé entre l'hyperviseur et les machines virtuelles. 
 +  * Le mode pool SR-IOV 
 + 
 +===== Créer un réseau isolé avec virsh ===== 
 + 
 +Comme pour les domaines (VMs) on peut exporter une configuration existante en XML et y apporter les modifications nécessaires à notre nouvelle définition.
  
 <code bash> <code bash>
 virsh net-dumpxml default > vm-internal.xml virsh net-dumpxml default > vm-internal.xml
 </code> </code>
 +
 +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>
Ligne 31: Ligne 45:
 </file> </file>
  
-Ici on souhaite définir un réseau interne pour interconnecter plusieurs VMs sans connexion.+Le fichier de configuration est minimaliste. L'hyperviseur ne fournit aucun service réseau (DHCP ou résolution DNS). Il définit une interface ''virbr1'' sur l'hyperviseur qu'il faudra communiquer aux VMs que l'on souhaite relier
  
-Une fois le fichier enregistré, on peut utiliser les commandes **virsh net-define** pour définir le nouveau réseau ou **virsh net-create** pour démarrer l+ 
 +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).
    
 <code bash> <code bash>
-virsh net-define vm-internal.xml+# Création du réseau permanent à partir du fichier XML 
 +virsh net-define --validate --file vm-internal.xml
  
 +# Lister les réseaux
 virsh net-list --all  virsh net-list --all 
  Name          State      Autostart   Persistent  Name          State      Autostart   Persistent
Ligne 44: Ligne 61:
  vm-internal   inactive   no          yes  vm-internal   inactive   no          yes
  
 +# Activer le réseau
 virsh net-start vm-internal virsh net-start vm-internal
  
Ligne 61: Ligne 79:
 On note que le pont d'accès au réseau est **virbr1** : il faudra fournir ce pont aux VMs que l'on souhaite interconnecter. On note que le pont d'accès au réseau est **virbr1** : il faudra fournir ce pont aux VMs que l'on souhaite interconnecter.
    
 +<note>
 +Les fichiers de configuration des réseaux persistants sont stockés dans le répertoire ''/etc/libvirt/qemu/networks/''
 +</note>
 +
 +===== Ajouter une interface sur une VM =====
 +
 On peut à présent ajouter une interface à chaque VM que l'on souhaite connecter : On peut à présent ajouter une interface à chaque VM que l'on souhaite connecter :
 +
 +<note>
 +Si l'on souhaite conserver l'interface et la connexion au réseau après redémarrage, ajouter l'argument **%%--persistent%%** 
 +</note>
  
 <code bash> <code bash>
-Connecte la VM file-server au réseau vm-internal +Connexion permanente de la VM ftp-server au réseau vm-internal 
-virsh attach-interface --type bridge --source virbr1 --model virtio file-server --live+virsh attach-interface --persistent --type bridge --source virbr1 --model virtio ftp-server
  
-# Connecte la VM debian12-amd64-novideo au réseau vm-internal +# Connecte ponctuellement la VM file-server déjà démarrée au réseau vm-internal 
-virsh attach-interface --type bridge --source virbr1 --model virtio debian12-amd64-novideo --live+virsh attach-interface --live --type bridge --source virbr1 --model virtio file-server  
 + 
 +# Connecte ponctuellement la VM debian12-amd64-novideo déjà démarée au réseau vm-internal 
 +virsh attach-interface --live --type bridge --source virbr1 --model virtio debian12-amd64-novideo
 </code> </code>
  
 <note> <note>
-Dans notre cas le réseau ne comporte pas de DHCP : il faudra configurer manuellement les interfaces et les démarrer 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>
 +
 +===== Pare-feu =====
 +
 +Selon la politique de filtrage appliquée sur l'hôte exécutant le service de virtualisation KVM, des règles supplémentaires peuvent être nécessaires.
 +
 +Lorsqu'une VM démarre, elle rejoint le réseau virtuel de type pont "virbr0" c'est via ce réseau qu'elle accède à Internet au travers de la connexion de l’hôte.
 +
 +Dans l'exemple ci dessous le filtrage préexistant refuse le trafic entrant permettant l'auto-configuration de l'interface de la VM :
 +
 +<file>
 +juil. 05 09:28:02 node-7c87 kernel: [FW] [REJECT] [RID=666] IN=virbr0 OUT= MAC=ff:ff:ff:ff:ff:ff:52:54:00:1d:20:08:08:00 SRC=0.0.0.0 DST=255.255.255.255 LEN=328 TOS=0x10 PREC=0x00 TTL=128 ID=0 PROTO=UDP SPT=68 DPT=67 LEN=308
 +</file>
 +
 +On introduit une règle de filtrage supplémentaire autorisant les requêtes DHCPDISCOVER entrant par l'interface "virbr0" :
 +
 +Depuis **nft** en mode interactif :
 +<code>
 +insert rule ipfilter inbound position 17 iif "virbr0" ip daddr 255.255.255.255 udp sport 68 udp dport 67 log prefix "[FW] [ACCEPT] [RID=18] " level notice counter accept comment "Autorise autoconfiguration VMs KVM"
 +</code>
 +
 +KVM utilise dnsmasq pour fournir la configuration aux VMs, selon la politique de filtrage en place il faudra également autorisé le trafic sortant :
 +
 +<file>
 +juil. 05 10:00:32 node-7c87 dnsmasq-dhcp[1698]: DHCPDISCOVER(virbr0) 192.168.122.43 52:54:00:1d:20:08
 +juil. 05 10:00:32 node-7c87 dnsmasq-dhcp[1698]: DHCPOFFER(virbr0) 192.168.122.43 52:54:00:1d:20:08
 +juil. 05 10:00:32 node-7c87 dnsmasq-dhcp[1698]: Error sending DHCP packet to 192.168.122.43: Operation not permitted
 +juil. 05 10:00:32 node-7c87 kernel: [FW] [REJECT] [RID=667] IN= OUT=virbr0 SRC=192.168.122.1 DST=192.168.122.43 LEN=328 TOS=0x00 PREC=0xC0 TTL=64 ID=13364 PROTO=UDP SPT=67 DPT=68 LEN=308
 +</file>
 +
 +Ici on insère une règle de filtrage (depuis nft en mode interactif) :
 +
 +<code>
 +insert rule ipfilter outbound position 39 oif "virbr0" udp sport 67 udp dport 68 log prefix "[FW] [ACCCEPT] [RID=61] " level notice counter accept comment "Autorise autoconfiguration VMs KVM (DHCPOFFER)"
 +</code>
 +
 +Pour autoriser les connexions SSH :
 +<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"
 +</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>
  
 ===== Références ===== ===== Références =====
software/applications/virsh/gerer_les_reseaux.1713393243.txt.gz · Dernière modification : 2024/04/17 22:34 de yoann