I Présentation
Nous allons voir la partie réseau dans KVM. Il va être abordé les bridges qui sont également nommés « ponts » ou « réseaux virtuels » (virtual network) dans KVM.
Un bridge est un switch virtuel. Présent depuis longtemps dans le noyaux Linux, il a permis dans un premier temps de faire un switch à partir des cartes réseaux d’un PC. La où cela devient intéressant c’est la possibilité de brancher des cartes réseaux virtuelles (de vm 🙂 ) et de faire le pont (ou pas ) vers une ou plusieurs cartes physiques et accéder ainsi à d’autres réseaux extérieurs.
L’objectif est donc de montrer comment créer ces switchs et de les associer aux VM gérées par KVM.
Cette présentation a été réalisée sous ubuntu 20.04.
II Management des réseaux
II.1 Visualiser les réseaux KVM (et bridges)
Lister les réseaux virtuels vue par KVM via la comande « virsh » :
xavior@mon_pc:~$ virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------
default active yes yes
mon_reseau_nat active yes yes
mon_reseau_virt active yes yes
Ainsi, nous voyons 3 switchs virtuels déjà existants. Le switch « default » est celui par défaut utilisable directement par KVM. Il propose un accès de type NAT avec le service DHCP. Les 2 autres ont été créés ensuite. Cette commande ne permet pas de lister les réseaux virtuels « externes » à KVM dans un premier.
En effet il est possible de créer des switchs virtuels sans passer par les commandes KVM, puis de les associer dans un deuxième temps. Ce cas sera vu un peu plus loin.
Il est également possible de lister les switchs via la commande « brctl » :
xavior@mon_pc:~$ brctl show
bridge name bridge id STP enabled interfaces
virbr0 8000.5254008d5da7 yes virbr0-nic
virbr1 8000.5254008d5da8 yes virbr1-nic
vnet1
virbr2 8000.5254003671f5 yes virbr2-nic
vnet0
vnet2
En bleu les bridges présents sur la machine hôte. En violet les cartes réseau des VM qui sont actuellement en cours (si elles ne sont pas exécutées, alors les interfaces vnetX ne seront pas vus. Enfin en orange la carte du switch qui est branchée vers le monde extérieur. C’est par celle-ci que les données peuvent sortir ou pas en fonction de ce que l’on souhaite avoir.
La colonne STP indique que le protocole spanning tree est activé sur le bridge.
Autre manière de voir les bridges par le commande « ip » :
xavior@mon_pc:~$ ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether e4:b9:7a:6a:f2:52 brd ff:ff:ff:ff:ff:ff
3: wlp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 5c:5f:67:ac:86:77 brd ff:ff:ff:ff:ff:ff
inet 192.168.217.203/24 brd 192.168.217.255 scope global dynamic noprefixroute wlp2s0
valid_lft 3360sec preferred_lft 3360sec
inet6 fe80::5b11:33ca:5d35:63c3/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:8d:5d:a8 brd ff:ff:ff:ff:ff:ff
inet 192.168.150.254/24 brd 192.168.150.255 scope global virbr1
valid_lft forever preferred_lft forever
5: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr1 state DOWN group default qlen 1000
link/ether 52:54:00:8d:5d:a8 brd ff:ff:ff:ff:ff:ff
6: virbr2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:36:71:f5 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.1/24 brd 192.168.100.255 scope global virbr2
valid_lft forever preferred_lft forever
7: virbr2-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr2 state DOWN group default qlen 1000
link/ether 52:54:00:36:71:f5 brd ff:ff:ff:ff:ff:ff
8: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:8d:5d:a7 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
9: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:8d:5d:a7 brd ff:ff:ff:ff:ff:ff
17: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr2 state UNKNOWN group default qlen 1000
link/ether fe:54:00:1e:bd:e2 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe1e:bde2/64 scope link
valid_lft forever preferred_lft forever
18: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr1 state UNKNOWN group default qlen 1000
link/ether fe:54:00:aa:59:56 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:feaa:5956/64 scope link
valid_lft forever preferred_lft forever
19: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr2 state UNKNOWN group default qlen 1000
link/ether fe:54:00:41:24:45 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fe41:2445/64 scope link
valid_lft forever preferred_lft forever
Par couleur :
- carte de bouclage (blanc) ;
- cartes physiques filaire et wifi de l’hôte,(rose) ;
- les bridges ou switch virtuels (bleu) ;
- les interfaces du bridge (en orange) ;
- les cartes réseaux des VM allumées (violet).
Voir les propriétés d’un réseau :
xavior@mon_pc:~$ virsh net-info --network mon_reseau_virt
Name: mon_reseau_virt
UUID: 3cb297d0-9a6d-4890-8fea-848e33c6ec88
Active: yes
Persistent: yes
Autostart: yes
Bridge: virbr2
Ces informations permettent de savoir :
- si le switch est actif ou non ;
- si il sera chargé à chaque redémmarage de l’hôte ;
- le nom vu sous Linux (ici virbr2).
Pour connaitre le détail d’un réseau et des fonctionnalités mises en oeuvre :
xavior@mon_pc:~$ virsh net-dumpxml mon_reseau_nat
<network connections='1'>
<name>mon_reseau_nat</name>
<uuid>603a985c-7549-4e8e-ae56-e3c3b4f8c987</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:8d:5d:a8'/>
<ip address='192.168.150.254' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.150.50' end='192.168.150.220'/>
</dhcp>
</ip>
</network>
Ainsi ce switch :
- utilise le principe de NAT ;
- la pate WAN possède une mac adresse propre ;
- porte le nom de « virbr1 » ;
- a une plage d’adresse LAN 192.168.150.0/24 et que l’adresse IP de son interface est 192.168.150.254 ;
- délivre un service DHCP pour une plage IP allant de 192.168.150.50 à 220.
Il est aussi possible de visualiser les connexions réseaux par un outil graphique via « virt-manager » :
Après le lancement, cliquer sur « Détails de la connexion » dans le menu de l’application :

Cliquer sur l’onglet « Réseaux virtuels » :

Possibilité de voir l’équivalent de la configuration en XML associée :

Enfin, mais pas la dernière méthode, il est possible de visualiser les bridges via l’interface graphique « nm-connection-editor » :

Avec le détail comme suivant :

II.2 Gestion réseau (switch virtuel)
Sous KVM les swicths sont appelés « réseau » ou « network ». C’est une couche supplémentaire au dessus des bridges et qui permet d’ajouter des services supplémetaires à de simple « bridges ».
Nous allons voir la mise en oeuvre générale de déclaration d’un réseau KVM puis la création :
- d’un réseau supportant le NAT avec le service DHCP ;
- d’un réseau isolé de tout autre réseau ;
- d’un réseau dit « routé » ;
- d’un réseau utilisant un bridge extérieur (avec la création de ce dernier) ;
Enfin nous terminerons par la suppression de ces réseaux ».
II.2.1 Création d’un réseau avec virsh
La création d’un réseau se fait en plusieurs étapes en ligne de commande :
- création à partir d’un fichier xml ;
- activation du réseau ;
- montage automatique (ou pas) du réseau au démarrage de l’hôte.
Le réseau est associé à un bridge. Si ce dernier n’existe pas alors il sera créé automatiquement.
II.2.1.1 Création d’un réseau de type NAT
Donc dans un premier temps nous allons définir le fichier xml que l’on nommera « mon_reseau_nat1 ».
<network>
<name>reseau_NAT1</name>
<forward mode="nat"/>
<domain name="mon_reseau_NAT1"/>
<ip address="192.168.199.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.199.128" end="192.168.199.254"/>
</dhcp>
</ip>
</network>
Dans le fichier xml il est demandé :
- un réseau NATé avec l’Hôte (pas de carte réseau définie, elle sera automatiquement selectionnée) ;
- un réseau local dans la plage d’adresse 192.168.199.0 avec comme passerelle 192.168.199.1 ;
- un service DHCP délivrant des adresses IP de 192.168.199.128 à .254.
Nous allons créer ce réseau avec « virsh net-define » :
xavior@mon_pc:~$ virsh net-define --file mon_reseau_nat1
Network reseau_NAT1 defined from mon_reseau_nat1
Puis nous allons l’activer et faire en sorte qu’il soit démarré à chaque démarrage de l’hôte :
xavior@mon_pc:~$ virsh net-start --network reseau_NAT1
Network reseau_NAT1 started
xavior@mon_pc:~$ virsh net-autostart --network reseau_NAT1
Network reseau_NAT1 marked as autostarted
On vérifie si tout s’est bien passé :
xavior@mon_pc:~$ virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------
default active yes yes
mon_reseau_nat active yes yes
mon_reseau_virt active yes yes
reseau_NAT1 active yes yes
A ce stade le réseau est opérationnel.
Si on regarde maintenant la configuration du réseau « reseau_NAT1 », on s’aperçoit qu’un certain nombre de lignes ont été ajoutées (en vert) :
<network>
<name>reseau_NAT1</name>
<uuid>d701d126-8283-4526-a409-5d9092152925</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr3' stp='on' delay='0'/>
<mac address='52:54:00:16:c7:71'/>
<domain name='mon_reseau_NAT1'/>
<ip address='192.168.199.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.199.128' end='192.168.199.254'/>
</dhcp>
</ip>
</network>
Ainsi automatiquement :
- un « uuid » a été défini ;
- dans le cadre du NAT, les ports de réponse ont été précisés ;
- un bridge nommé « virbr3 » a été défini et créé ;
- une adresse MAC du bridge a été définie.
A savoir qu’il est possible de définir soi-même ces valeurs.
Maintenant nous allons associer ce réseau à la carte réseau de la VM. Pour cela nous allons utiliser « virt-manager« , sélectionner les propriétés de la VM, et se positioner sur la carte réseau. Puis dans « source du réseau » sélectionner le réseau « reseau_NAT1 » :

Enfin lancer la VM et vérifier :

On s’aperçoit ainsi que la carte réseau a bien reçu une adresse IP dans la tranche IP définie, ainsi qu’une passerelle et l’@IP de résolution DNS.
II.2.1.2 Création d’un réseau isolé
Le fichier XML ressemble à celui d’un NAT mais sans les balises « <forward> ». Dans le cas ci-dessous on demande également le service DHCP. Le fichier associé sera « mon_reseau_isole ».
<network>
<name>reseau_isole</name>
<domain name="reseau_isole"/>
<ip address="192.168.102.1" netmask="255.255.255.0">
<dhcp>
<range start="192.168.102.128" end="192.168.102.254"/>
</dhcp>
</ip>
</network>
et les commandes pour activer ce réseau :
xavior@mon_pc:~$ virsh net-define mon_reseau_isole
Network reseau_isole defined from mon_reseau_isole
xavior@mon_pc:~$ virsh net-start reseau_isole
Network reseau_isole started
xavior@mon_pc:~$ virsh net-autostart reseau_isole
Network reseau_isole marked as autostarted
Ce qui donne la définition finale suivante :
xavior@xavior-Latitude-7490:~$ virsh net-dumpxml reseau_isole
<network>
<name>reseau_isole</name>
<uuid>1ae3c735-286f-4411-8a7a-b974a36c990f</uuid>
<bridge name='virbr5' stp='on' delay='0'/>
<mac address='52:54:00:93:b1:5d'/>
<domain name='reseau_isole'/>
<ip address='192.168.102.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.102.128' end='192.168.102.254'/>
</dhcp>
</ip>
</network>
L’adresse IP 192.168.102.1 n’est pas une passerelle mais l’adresse IP du service DHCP.
Ainsi toutes les VM qui ont leurs cartes virtuelles associées à ce réseau virtuel ne pourront pas discuter vers l’extérieur mais seulement entre elles (sauf pour la résolution DNS).
II.2.1.3 Création d’un réseau routé
Ce mode permet de relier une plage d’adresses IP directement vers la ou les VM. Il n’y a donc pas de mécanisme de type « NAT » d’implémenté. C’est principalement utilisé dans le cadre de DMZ ou d’hébergment de serveurs virtuels (VM qui possède sa propre ip publique, CQFD)
Dans ce post il ne sera pas montré en détail ce mode.
II.2.1.4 Création d’un réseau à partir d’un bridge déjà existant
Nous allons créer un réseau virtuel (bridge) de type NAT avec DHCP interne sans passer par les outils virsh. Ensuite nous indiquerons à KVM d’utiliser ce bridge externe.
II.2.1.4.1 Création manuelle via la commande « nmcli »
Création d’un bridge :
La création du pont portera le nom de « br0 ». Ceci pour le distinguer des ponts virtuels créés par « virsh » dont les noms commencent par « virbrX ».
Pour cela nous allons utiliser la commande « nmcli » et commencer par créer le bridge comme suivant :
xavior@mon_pc:~$ nmcli connection add ifname br0 type bridge con-name br0
Connexion « br0 » (c8000ccb-403a-4fda-a7ac-55426f673a6a) ajoutée avec succès.
Ajout d’une interface au réseau. Ce sera une interface physique du PC Hôte :
Toujours avec la commande « nmcli » nous créons une interface réseau associée au bridge qui nous permettra d’accéder au réseau extérieur.
xavior@mon_pc:~$ nmcli connection add type bridge-slave ifname enp0s31f6 master br0
Connexion « bridge-slave-enp0s31f6 » (0962144e-5828-4e0f-ae9b-311a086528e5) ajoutée avec succès.
Un nom arbritraire a été donné à la connexion vers l’interface physique (bridge-slave-enp0s31f6). Il est possible d’en spécifier un manuellement comme « bridge-br0 » qui est souvent utilisé sur d’autres documentation internet. Nous concernant nous allons garder cette appellation.
Activation du pont « br0 » :
Pour activer le switch avec la commande « nmcli » :
xavior@mon_pc:~$ nmcli con up br0
Connexion activée (master waiting for slaves) (Chemin D-Bus actif : /org/freedesktop/NetworkManager/ActiveConnection/68)
Indiquer au pont que la communication est partagée vers l’extérieur (fonction NAT):
xavior@mon_pc:~$ nmcli connection modify br0 ipv4.method shared
A ce stade, le mode DHCP est activé automatiquement. Mais nous n’avons pas défini la plage d’adresses IP. Si on continue sans rien changer, la plage utilisable sera en 10.42.0.1/24.
Indiquer la plage d’adresses IP que l’on souhaite :
xavior@mon_pc:~$ nmcli connection modify br0 ipv4.addresses "192.168.204.1/24"
Pour faire prendre en compte les dernières valeurs, il faut relancer le bridge :
xavior@mon_pc:~$ nmcli connection down br0
Connexion « br0 » désactivée (chemin D-Bus actif : /org/freedesktop/NetworkManager/ActiveConnection/88)
xavior@mon_pc:~$ nmcli connection up br0
Connexion activée (master waiting for slaves) (Chemin D-Bus actif : /org/freedesktop/NetworkManager/ActiveConnection/90)
Vérification :
- via la commande « ip«
xavior@mon_pc:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether e4:b9:7a:6a:f2:52 brd ff:ff:ff:ff:ff:ff
...
62: br0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 22:f6:a6:33:44:48 brd ff:ff:ff:ff:ff:ff
inet 192.168.204.1/24 brd 192.168.204.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
- ou via la commande « nmcli » qui va donner toutes les propriétés du bridge :
xavior@mon_pc:~$ nmcli connection show br0
connection.id: br0
connection.uuid: c8000ccb-403a-4fda-a7ac-55426f673a6a
connection.stable-id: --
connection.type: bridge
connection.interface-name: br0
connection.autoconnect: oui
...
connection.wait-device-timeout: -1
ipv4.method: shared
ipv4.dns: --
ipv4.dns-search: --
ipv4.dns-options: --
ipv4.dns-priority: 0
ipv4.addresses: 192.168.204.1/24
ipv4.gateway: --
ipv4.routes: --
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)
ipv4.routing-rules: --
ipv4.ignore-auto-routes: non
ipv4.ignore-auto-dns: non
ipv4.dhcp-client-id: --
ipv4.dhcp-iaid: --
ipv4.dhcp-timeout: 0 (default)
ipv4.dhcp-send-hostname: oui
ipv4.dhcp-hostname: --
ipv4.dhcp-fqdn: --
ipv4.dhcp-hostname-flags: 0x0 (none)
ipv4.never-default: non
ipv4.may-fail: oui
ipv4.dad-timeout: -1 (default)
ipv6.method: auto
ipv6.dns: --
...
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/Settings/49
GENERAL.ZONE: --
GENERAL.MASTER-PATH: --
IP4.ADDRESS[1]: 192.168.204.1/24
IP4.GATEWAY: --
IP4.ROUTE[1]: dst = 192.168.204.0/24, nh = 0.0.0.0, mt = 425
Les valeurs en majuscules (IP4.XXX) indiquent celles qui sont actuellement prise en compte. Elles changent après l’activation du bridge en fonction des valeurs en minuscule.
II.2.1.4.2 Suppression manuelle via la commande « nmcli »
Il faut supprimer l’interface associé au bridge puis le bridge lui-même.
Ainsi avec « nmcli » :
xavior@mon_pc:~$ nmcli connection delete bridge-slave-enp0s31f6
Connexion « bridge-slave-enp0s31f6 » (0962144e-5828-4e0f-ae9b-311a086528e5) supprimée.
xavior@mon_pc:~$ nmcli connection delete br0
Connexion « br0 » (c8000ccb-403a-4fda-a7ac-55426f673a6a) supprimée.
Vérification :
xavior@mon_pc:~$ nmcli connection show
NAME UUID TYPE DEVICE
xavior 6652228b-eb27-4dc4-8ac2-47ae71436486 wifi wlp2s0
virbr0 3e8e35b6-6a63-494a-863f-25e9737a62f5 bridge virbr0
virbr1 39874e38-0033-49da-9032-a637055e8142 bridge virbr1
virbr2 e46b7321-eb5d-40f8-9338-a2c9c87ec639 bridge virbr2
virbr3 ec16a556-92bb-4c37-9cb6-ada06a254bb3 bridge virbr3
virbr4 c28f2679-0cd3-4241-bcfe-eb7fdb8b882c bridge virbr4
virbr5 8eeeb4d8-9075-47f3-bc10-9ac8a97d91d9 bridge virbr5
Connexion filaire 1 57aebe66-000e-3a04-a5cd-d90f02846365 ethernet --
Pif_Paf_Pouf_5G f6293849-a986-46d6-b051-c262b755ad9a wifi --
xavchrys2 acf9fb68-84e6-442e-9aca-5831ff0a268b wifi --
A ce stade il n’y a plus de bridge.
II.2.1.4.3 Création via une interface graphique
Il est possible de créer un bridge via une interface graphique. Nous allons utiliser la commande « nm-connection-editor ».
xavior@mon_pc:~$ nm-connection-editor &
[7] 351950
[6] Fini nm-connection-editor
Ainsi la fenêtre suivante apparaît :

Nous pouvons voir l’existence de bridge (pont) déjà présents (qui ont été créés avec virsh ici). Nous allons maintenant créer notre propre pont externe à KVM.
Pour cela cliquer sur le bouton « + » en bas à gauche :

Dans la boite déroulante, choisir « Pont » puis cliquer sur le bouton « Créer » :

A ce stade, le pont est créé. Nous allons maintenant ajouter une interface physique qui permettra de faire le lien vers l’extérieur.
Sous « Pont entre connexions », cliquer sur le bouton « Ajouter » :

Selectionner « Ethernet » puis cliquer sur le bouton « Créer » :

On va laisser le nom donné par l’outil graphique. Pour rappel en ligne de commande le nom était « bridge-slave-enp0s31f6« .
A ce stade il n’est pas neccessaire de définir manuellement une interface physique dans la liste ‘Périphérique ». Ce sera fait automatiquement.
Cliquer sur le bouton « Enregistrer » pour retrouver la fenêtre suivante :

On remarque que l’interface physique « Esclave bridge0 1 » est présente dans la liste « Pont entre connexions ».
Nous allons maintenant faire en sorte que le bridge communique vers l’extérieur. Pour cela cliquer sur l’onglet « Paramètres IPv4 » :

Dans la liste « Méthode », sélectionner le mode « Partagé avec d’autres ordinateurs« . A ce stade le bridge communiquera vers l’extérieur et un réseau DHCP est activé.
Pour spécifier la plage IP du DHCP il faut l’indiquer dans « Adresse (optionnel) ». Pour cela cliquer sur le bouton « Ajouter » et renseigner comme suivant :

Une fois fait cliquer sur le bouton « Enregistrer ». L’écran suivant fait apparaître le nom bridge :

Ainsi nous avons notre bridge « Connexion pont 1 » (« br0″ quand il a été créé manuellement) et l’association à la carte physique ‘Esclave bridge0 1 ».
A ce stade la configuration est terminée.
Mais il va falloir activer manuellement ce pont :
xavior@mon_pc:~$ nmcli connection up "Connexion pont 1" Connexion activée (master waiting for slaves) (Chemin D-Bus actif : /org/freedesktop/NetworkManager/ActiveConnection/93) xavior@mon_pc:~$ nmcli connection up "Esclave bridge0 1" Connexion activée (chemin D-Bus actif : /org/freedesktop/NetworkManager/ActiveConnection/95)
Vérification :
xavior@mon_PC:~$ nmcli connection show
NAME UUID TYPE DEVICE
Connexion pont 1 74e84b60-8e9b-4499-a04b-ede32c150ad3 bridge bridge0
xavior 6652228b-eb27-4dc4-8ac2-47ae71436486 wifi wlp2s0
virbr0 3e8e35b6-6a63-494a-863f-25e9737a62f5 bridge virbr0
virbr1 39874e38-0033-49da-9032-a637055e8142 bridge virbr1
virbr2 e46b7321-eb5d-40f8-9338-a2c9c87ec639 bridge virbr2
virbr3 ec16a556-92bb-4c37-9cb6-ada06a254bb3 bridge virbr3
virbr4 c28f2679-0cd3-4241-bcfe-eb7fdb8b882c bridge virbr4
virbr5 8eeeb4d8-9075-47f3-bc10-9ac8a97d91d9 bridge virbr5
Esclave bridge0 1 3c356e22-93b2-445b-95e8-ac0f5eaf6b58 ethernet enp0s31f6
Connexion filaire 1 57aebe66-000e-3a04-a5cd-d90f02846365 ethernet --
Pif_Paf_Pouf_5G f6293849-a986-46d6-b051-c262b755ad9a wifi --
xavchrys2 acf9fb68-84e6-442e-9aca-5831ff0a268b wifi --
A ce stade le pont est créé et utilisable.
II.2.1.4.4 Association du bridge au réseau KVM :
Nous allons maintenant indiquer à KVM d’utiliser le bridge (et ainsi de ne pas le faire créér).
Ainsi on crée un fichier XML nommé « mon_reseau_pont1 » qui contiendra les données suivantes :
<network >
<name>Connexion_pont_1</name>
<forward mode="bridge"/>
<bridge name="Connexion pont 1"/>
</network>
Ainsi on spécifie le mode « bridge » pour indiquer qu’il faut utiliser un bridge déjà existant ainsi que le nom du bridge à utiliser (« connexion pont 1 »)
Maintenant on l’enregistre dans KVM :
xavior@mon_pc:~$ virsh net-define --file mon_reseau_pont1
Network Connexion_pont_1 defined from mon_reseau_pont1
xavior@mon_pc:~$ virsh net-start --network Connexion_pont_1
Network Connexion_pont_1 started
xavior@mon_pc:~$ virsh net-autostart --network Connexion_pont_1
Network Connexion_pont_1 marked as autostarted
Et pour bien s’assurer que ce pont est pris en compte avec KVM :
xavior@mon_pc:~$ virsh net-list Name State Autostart Persistent ------------------------------------------------------ Connexion_pont_1 active yes yes default active yes yes mon_reseau_br0 active yes yes mon_reseau_nat active yes yes mon_reseau_NAT2 active yes yes mon_reseau_route1 active yes yes mon_reseau_virt active yes yes reseau_isole active yes yes
A ce stade c’est terminé.
II.2.1.4.5 Tests
Nous allons voir au sein d’un VM si cela fonctionne. Pour cela on choisit une VM déjà installée et on définit le réseau virtuel avec ce pont :

Puis après avoir lancé la VM, on vérifie bien que cela marche : et bien non 🙁

Le nom du pont est trop long …
Après avoir renommer le nom du brigde et refait la laison kvm :
xavior@mon_pc:~$ virsh net-list Name State Autostart Persistent ------------------------------------------------------ default active yes yes mon_reseau_nat active yes yes mon_reseau_NAT2 active yes yes mon_reseau_route1 active yes yes mon_reseau_virt active yes yes Pont_1 active yes yes reseau_isole active yes yes xavior@mon_pc:~$ nmcli connection show NAME UUID TYPE DEVICE Pont1 e235568f-8857-47ec-a83f-51290d1f74d0 bridge Pont1 xavior 6652228b-eb27-4dc4-8ac2-47ae71436486 wifi wlp2s0 virbr0 53c8ad8f-e8d4-4ac5-bafb-9d73f8de34eb bridge virbr0 virbr1 24b475b2-dfde-4a63-ae88-5673f3a44482 bridge virbr1 virbr2 23e7bcfd-0ba7-4271-9541-e7bce4f672f3 bridge virbr2 virbr3 69ef9a3b-7c1c-4346-931e-ac07a6bed648 bridge virbr3 virbr4 ec3ee72d-7a23-4b20-b513-efbee061f02e bridge virbr4 virbr5 60a82af1-fed5-4497-beb3-c135ee7952af bridge virbr5 Esclave Pont1 1 d5d39a4d-edd6-40b7-9d10-039893f6ae33 ethernet enp0s31f6 Connexion filaire 1 57aebe66-000e-3a04-a5cd-d90f02846365 ethernet -- Pif_Paf_Pouf_5G f6293849-a986-46d6-b051-c262b755ad9a wifi -- xavchrys2 acf9fb68-84e6-442e-9aca-5831ff0a268b wifi --
Et maintenant en image :

🙂
II.2.1.4.6 Pourquoi utiliser ce mode
Pemièrement pour des raisons de performances et ne pas passer par la gestion du module libvirt (virsh). En revanche les options avancées comme le DHCP ou le DNS géré par libvirt ne seront pas utilisables.
Ce mode est également utilisé pour utiliser d’autres switchs virtuels tel que « OpenVSwitch » par exemple, ou ceux comme nous l’avons intégrés au noyau Linux.
II.2.2 Suppression d’un réseau
Après avoir créé un réseau avec virsh, nous allons maintenant voir comment le supprimer :
xavior@mon_pc:~$ virsh net-destroy --network reseau_NAT1
Network reseau_NAT1 destroyed
A ce stade le réseau « reseau_NAT1 » est juste désactivé …
xavior@mon_pc:~$ virsh net-list --all
Name State Autostart Persistent
------------------------------------------------------
default active yes yes
mon_reseau_nat active yes yes
mon_reseau_virt active yes yes
reseau_NAT1 inactive yes yes
Il faut maintenant utiliser cette commande pour enlever définitivement ce réseau :
xavior@mon_pc:~$ virsh net-undefine --network reseau_NAT1
Network reseau_NAT1 has been undefined
et en vérifiant en listant les réseaux virtuels, le réseau « reseau_NAT1 » a bien disparu :
xavior@mon_pc:~$ virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------
default active yes yes
mon_reseau_nat active yes yes
mon_reseau_virt active yes yes
Et côté VM, l’accès réseau est coupé. Il faudra associé sur la carte réseau de la VM un autre réseau.
III Aller plus loin et ressources
Nous avons vu une introduction globale au réseaux virtuels sous KVM et Linux.
Pour aller plus loin :
- créer une VM avec plusieurs cartes réseaux virtuelles associées à des switchs virtuels différents ;
- mettre en oeuvre le mode « routed » ;
- utiliser un switch virtuel de type OpenVSwitch ;
- réseau commun antre 2 hyperviseurs KVM ;
- vision des réseaux côté « IPATBLES » et voir différence quand managé par KVM(libvirt) ou par linux(nmcli) ;
- etc.
Ressources internet :
- vmnet –> cartes virtuelles (nommée également TAP) des VM branchées sur un bridge
- Ressources KVM (libvirt) :
- Gestion bridge (Linux)