Comment utiliser le réseautage ponté avec Libvirt et KVM
- 2401
- 757
- Maxence Arnaud
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
Exigences et conventions logicielles utilisées
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…