Comment utiliser le réseautage ponté avec Libvirt et KVM

Comment utiliser le réseautage ponté avec Libvirt et KVM

LibVirt est un logiciel gratuit et open source qui fournit une API pour gérer divers aspects des machines virtuelles. Sur Linux, il est couramment utilisé en conjonction avec KVM et QEMU. Entre autres choses, Libvirt est utilisé pour créer et gérer les réseaux virtuels. Le réseau par défaut créé lorsque libvirt est utilisé est appelé «par défaut» et utilise Nat (Traduction d'adresse réseau) et transfert de paquets pour connecter les systèmes imités au monde «extérieur» (le système hôte et Internet). Dans ce tutoriel, nous verrons comment créer une configuration différente en utilisant Réseautage ponté.

Dans ce tutoriel, vous apprendrez:

  • Comment créer un pont virtuel
  • Comment ajouter une interface physique à un pont
  • Comment rendre la configuration du pont persistante
  • Comment modifier les règles du micrologiciel pour permettre le trafic vers la machine virtuelle
  • Comment créer un nouveau réseau virtuel et l'utiliser dans une machine virtuelle
Comment utiliser le réseautage ponté avec Libvirt et KVM

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Distribution indépendante
Logiciel libvirt, iproute, brctl
Autre Privilèges administratifs pour créer et manipuler l'interface de pont
Conventions # - nécessite que les commandes Linux sont exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux sont exécutées en tant qu'utilisateur non privilégié régulier

Le réseau «par défaut»

Quand libvirt est utilisé et le libvirtd Daemon est en cours d'exécution, un réseau par défaut est créé. Nous pouvons vérifier que ce réseau existe en utilisant le vif L'utilité, qui, à la majorité de la distribution Linux, est généralement livrée avec le libvirt-client emballer. Pour invoquer l'utilitaire afin qu'il affiche tous les réseaux virtuels disponibles, nous devons inclure le filet Sous-commande:

$ sudo virsh net-list - tout 


Dans l'exemple ci-dessus, nous avons utilisé le --tous option pour s'assurer aussi le inactif Les réseaux sont inclus dans le résultat, ce qui devrait normalement correspondre à celui affiché ci-dessous:

Nom State Autostart Persistent -------------------------------------------- Par défaut actif Oui oui 

Pour obtenir des informations détaillées sur le réseau, et éventuellement la modifier, nous pouvons invoquer VIRSH avec le modifier sous-commande à la place, fournissant le nom du réseau comme argument:

$ sudo virsh net-edit par défaut 

Un fichier temporaire contenant le xml La définition du réseau sera ouverte dans notre éditeur de texte préféré. Dans ce cas, le résultat est le suivant:

 par défaut 168F6909-715C-4333-A34B-F74584D26328          

Comme nous pouvons le voir, le réseau par défaut est basé sur l'utilisation du virbr0 pont virtuel, et utilise Nat Connectivité basée pour connecter les machines virtuelles qui font partie du réseau au monde extérieur. Nous pouvons vérifier que le pont existe en utilisant le IP commande:

$ ip lien show type pont 

Dans notre cas, la commande ci-dessus renvoie la sortie suivante:

5: VIRBR0: MTU 1500 QDISC NOQUEUE STAT MODE DU MODE DE DOWN DE DÉFAUT DÉFAUT Qlen 1000 Link / Ether 52: 54: 00: 48: 3F: 0C BRD FF: FF: FF: FF: FF: FF 

Pour montrer les interfaces qui font partie du pont, nous pouvons utiliser le IP commande et requête uniquement pour les interfaces qui ont le virbr0 Bridge comme maître:

$ ip lien show maître virbr0 

Le résultat de l'exécution de la commande est:

6: Virbr0-NIC: MTU 1500 QDISC FQ_CODEL MASTER VIRBR0 Mode Down Mode par défaut Par défaut Qlen 1000 Link / Ether 52: 54: 00: 48: 3f: 0c BRD FF: FF: FF: FF: FF: FF 

Comme nous pouvons le voir, il n'y a qu'une seule interface actuellement attachée au pont, virbr0-nic. Le virbr0-nic L'interface est une interface Ethernet virtuelle: il est créé et ajouté automatiquement au pont, et son objectif est juste de fournir une stable MAC Adresse (52: 54: 00: 48: 3F: 0C Dans ce cas) pour le pont.

D'autres interfaces virtuelles seront ajoutées au pont lorsque nous créons et lançons des machines virtuelles. Pour le bien de ce tutoriel, j'ai créé et lancé une machine virtuelle Debian (Buster); Si nous relancons la commande que nous avons utilisée ci-dessus pour afficher les interfaces d'esclaves de pont, nous pouvons en voir un nouveau a été ajouté, vnet0:

$ ip lien show maître virbr0 6: virbr0-nic: mtu 1500 qdisc fq_codel maître virbr0 mener le mode de bas en mode défaut par défaut Qlen 1000 lien / éther 52: 54: 00: 48: 3f: 0c BRD FF: FF: FF: FF: FF : FF 7: VNET0: MTU 1500 QDISC FQ_CODEL MASTER VIRBR0 MODE INCONNU MODE DE DÉFAUT DE DÉFAUT QLEN 1000 LIEN / ETher Fe: 54: 00: E2: FE: 7B BRD FF: FF: FF: FF: FF: FF 

Aucune interface physique ne devrait jamais être ajoutée au virbr0 pont, puisqu'il utilise Nat Pour fournir une connectivité.

Utilisez un réseautage ponté pour les machines virtuelles

Le réseau par défaut fournit un moyen très simple d'atteindre la connectivité lors de la création de machines virtuelles: tout est «prêt» et fonctionne hors de la boîte. Parfois, cependant, nous voulons réaliser un ponts complet connexion, où les appareils invités sont connectés à l'hôte Lan, sans utiliser Nat, Nous devons créer un nouveau pont et partager l'une des interfaces Ethernet physiques hôtes. Voyons comment faire ce pas par étape.

Créer un nouveau pont

Pour créer un nouveau pont, nous pouvons toujours utiliser le IP commande. Disons que nous voulons nommer ce pont BR0; Nous exécuterions la commande suivante:

$ sudo ip lien Ajouter un pont de type BR0 

Pour vérifier que le pont est créé, nous faisons comme avant:

$ sudo lien show type pont 5: Virbr0: MTU 1500 QDISC NOQUEUE Mode Down Mode Par défaut Par défaut Qlen 1000 lien / Ether 52: 54: 00: 48: 3f: 0c BRD FF: FF: FF: FF: FF: FF 8 : BR0: MTU 1500 QDISC NOOP State Down Mode Groupe par défaut Par défaut Qlen 1000 Link / Ether 26: D2: 80: 7C: 55: DD BRD FF: FF: FF: FF: FF: FF 

Comme prévu, le nouveau pont, BR0 a été créé et est maintenant inclus dans la sortie de la commande ci-dessus. Maintenant que le nouveau pont est créé, nous pouvons procéder et y ajouter l'interface physique.

Ajout d'une interface Ethernet physique au pont

Dans cette étape, nous ajouterons une interface physique hôte au pont. Notez que vous ne pouvez pas utiliser votre principale interface Ethernet dans ce cas, car dès qu'il est ajouté au pont, vous perdriez la connectivité, car il perdra son adresse IP. Dans ce cas, nous utiliserons une interface supplémentaire, ENP0S29U1U1: Ceci est une interface fournie par un adaptateur Ethernet à USB attaché à ma machine.

Nous nous assurons d'abord que l'état d'interface est en place:

$ sudo ip lien set enp0s29u1u1 up 

Pour ajouter l'interface au pont, la commande à exécuter est la suivante:

$ sudo ip lien set ENP0S29U1U1 Master BR0 

Pour vérifier que l'interface a été ajoutée au pont, à la place:

$ sudo ip lien show maître BR0 3: ENP0S29U1U1: MTU 1500 QDISC FQ_CODEL MASTER BR0 MODE UP MODE DE DÉFAUT DE DÉFAUT DE DÉFAUT QLEN 1000 LINK / ETHER 18: A6: F7: 0E: 06: 64 BRD FF: FF: FF: FF: FF: FF: FF: FF: ff 

Attribuer une adresse IP statique au pont

À ce stade, nous pouvons attribuer une adresse IP statique au pont. Disons que nous voulons utiliser 192.168.0.90/24; Nous courions:

$ sudo ip adresse Ajouter le dev Br0 192.168.0.90/24 

Pour très que l'adresse a été ajoutée à l'interface, nous exécutons:

$ ip addr show BR0 9: BR0: MTU 1500 QDISC NOQUEUE STATE UP GROUP DEALUAUX QLEN 1000 Lien / Ether 26: D2: 80: 7C: 55: DD BRD FF: FF: FF: FF: FF: FF INET 192.168.0.90/24 Scope Global Br0 valid_lft Forever Preferred_lft Forever […] 


Rendre la configuration persistante

La configuration de notre pont est prête, cependant, telle qu'elle est, elle ne survivra pas à un redémarrage de la machine. Pour rendre notre configuration persistante, nous devons modifier certains fichiers de configuration, en fonction de la distribution que nous utilisons.

Debian et dérivés

Sur la famille de distributions Debian, nous devons être sûrs que le ponts Le package est installé:

$ sudo apt-get install-utils-utils 

Une fois le package installé, nous devons modifier le contenu du / etc / réseau / interfaces déposer:

# Ce fichier décrit les interfaces réseau disponibles sur votre système # et comment les activer. Pour plus d'informations, voir les interfaces (5). # L'interface du réseau Loopback Auto LO LO LO LO INET LOOPBACK # Spécifiez que l'interface physique qui doit être connectée au pont # doit être configurée manuellement, pour éviter les conflits avec NetworkManager IFACE ENP0S29U1U1 INET manuel # Les paramètres de pont BR0 Auto Br0 BR0 BR0 INET STATIQUE Bridge_ports ENP0S29U1U1 Adresse 192.168.0.90 Broadcast 192.168.0.255 Masque de réseau 255.255.255.0 passerelle 192.168.0.1 

Famille de distributions Red Hat

Sur la famille des distributions Red Hat, Fedora incluse, nous devons manipuler les scripts de réseau à l'intérieur du / etc / Sysconfig / Script de réseau annuaire. Si nous voulons le pont pas Pour être géré par NetworkManager, ou nous utilisons une distribution plus ancienne avec une ancienne version de NetworkManager qui n'est pas capable de gérer les commutateurs réseau, nous devons installer le scripts de réseau emballer:

$ sudo dnf installer des scripts de réseau 

Une fois le package installé, nous devons créer le fichier qui configurera le BR0 pont: / etc / Sysconfig / Network-Scripts / IFCFG-BR0. À l'intérieur du fichier, nous plaçons le contenu suivant:

Device = Br0 type = Bridge bootProto = aucun iPaddr = 192.168.0.90 passerelle = 192.168.0.1 masque de réseau = 255.255.255.0 onboot = oui delay = 0 nm_controlled = 0 

Que nous modifions ou créons le fichier utilisé pour configurer l'interface physique que nous nous connecterons au pont, dans ce cas / etc / sysconfig / réseau-scripts / ifcfg-enp0s29u1u1:

Type = Ethernet bootProto = Aucun name = ENP0S29U1U1 Device = ENP0S29U1U1 OnBoot = Yes Bridge = Br0 Delay = 0 nm_Controlled = 0 

Avec nos configurations prêtes, nous pouvons démarrer le réseau Service et activez-le au démarrage:

$ sudo systemctl Active --now Network 

Désactivation du netfilter pour le pont

Pour permettre à tout le trafic d'être transmis au pont, et donc aux machines virtuelles qui y sont connectées, nous devons désactiver Netfilter. Ceci est nécessaire, par exemple, pour que la résolution DNS fonctionne dans les machines invitées attachées au pont. Pour ce faire, nous pouvons créer un fichier avec le .confli extension à l'intérieur du / etc / sysctl.d Répertoire, appelons-le 99-NetFilter-Pridge.confli. À l'intérieur, nous écrivons le contenu suivant:

filet.pont.Bridge-nf-Call-ip6tables = 0 net.pont.Bridge-nf-Call-ipables = 0 net.pont.Bridge-nf-Call-Arptables = 0 

Pour charger les paramètres écrits dans le fichier, nous nous assurons que le br_netfilter Le module est chargé:

$ sudo modprobe br_netfilter 

Pour charger automatiquement le module au démarrage, créons le / etc / modules-charge.d / br_netfilter.confli Fichier: il ne doit contenir que le nom du module lui-même:

br_netfilter 


Une fois le module chargé, pour charger les paramètres que nous avons stockés dans le 99-NetFilter-Pridge.confli Fichier, nous pouvons exécuter:

$ sudo sysctl -p / etc / sysctl.D / 99-NetFilter-Bridge.confli 

Création d'un nouveau réseau virtuel

À ce stade, nous devons définir un nouveau «réseau» à utiliser par nos machines virtuelles. Nous ouvrons un fichier avec notre éditeur préféré et écoutons le contenu suivant à l'intérieur, plutôt que de l'enregistrer en tant que réseau plégé.xml:

 réseau plégé    

Une fois le fichier prêt, nous transmettons sa position comme argument au définir le net vif Sous-commande:

$ sudo virsh net-définie-network.xml 

Pour activer le nouveau réseau et faire pour qu'il soit mis en œuvre automatique, nous devons courir:

$ sudo virsh net-start pontsworks $ sudo virsh net-itostart punged finetwork 

Nous pouvons vérifier que le réseau a été activé en exécutant le VIRSH NET-LIST
Commande, à nouveau:

$ sudo virsh Net-list nom d'État autostart persistant ---------------------------------------- ------------ Network ponté actif OUI oui par défaut actif oui oui 

Nous pouvons maintenant sélectionner le réseau par nom lorsque vous utilisez le --réseau option:

$ sudo virgin-install \ --vcpus = 1 \ --mory = 1024 \ --cdrom = debian-10.8.0-AMD64-DVD-1.ISO \ - - Disk SIZE = 7 \ --os-Variant = Debian10 \ --network Network = Network pontée 

Si vous utilisez le manager Interface graphique, nous pourrons sélectionner le réseau lors de la création de la nouvelle machine virtuelle:

Conclusions

Dans ce tutoriel, nous avons vu comment créer un pont virtuel sur Linux et connecter une interface Ethernet physique afin de créer un nouveau «réseau» à utiliser dans des machines virtuelles gérées avec LibVirt. Lorsque vous utilisez ce dernier, un réseau par défaut est fourni pour la commodité: il fournit une connectivité en utilisant NAT. Lorsque vous utilisez un réseau ponté comme celui que nous configurons dans ce tutoriel, nous améliorerons les performances et ferons les machines virtuelles partie du même sous-réseau de l'hôte.

Tutoriels Linux connexes:

  • Une introduction à l'automatisation Linux, des outils et des techniques
  • Masterring Bash Script Loops
  • Choses à installer sur Ubuntu 20.04
  • Comment travailler avec l'API WooCommerce REST avec Python
  • Comment configurer un serveur OpenVPN sur Ubuntu 20.04
  • Fichiers de configuration Linux: 30 premiers
  • Mint 20: Mieux que Ubuntu et Microsoft Windows?
  • Ubuntu 20.04 astuces et choses que vous ne savez peut-être pas
  • Choses à faire après l'installation d'Ubuntu 20.04 Focal Fossa Linux
  • Comment exécuter le Raspberry Pi OS dans une machine virtuelle avec…