2 votes

Interface de pont pour les VMs KVM avec accès à l'Internet ?

Je crée une interface de pont pour mes machines virtuelles KVM :

ip link add name br0 type bridge
ip addr add 172.20.0.1/24 dev br0
ip link set dev br0 up

Je crée des VMs KVM :

virt-install --name $VM_NAME1 --network=bridge:br0,mac=$VM_MAC1
virt-install --name $VM_NAME2 --network=bridge:br0,mac=$VM_MAC2

Maintenant, je veux donner un accès Internet aux VMs :

brctl addif enp3s0 br0

enp3s0 est mon interface primaire. Dès que j'exécute cette commande, mon hôte perd son IP et son accès à Internet. Même lorsque je lui donne une IP, le problème persiste :

dhclient enp3s0

Ni l'hôte, ni les VMs n'ont accès à l'Internet.

4voto

Jarrod Points 562

Lorsque vous ajoutez votre contrôleur Ethernet hôte au pont br0 (connecté à une VM), vous créez effectivement deux nouveaux appareils sur le réseau (deux appareils avec de nouvelles adresses MAC) au lieu de l'ancien. Dans ce cas, votre pont et votre VM devraient chacun obtenir une nouvelle IP. Maintenant, la partie délicate est que votre FAI / société d'hébergement veut que votre MAC reste le même que le MAC de votre contrôleur Ethernet physique. Lorsque vous activez le pont, votre FAI ne peut pas identifier les nouveaux périphériques, ce qui entraîne une absence de connectivité Internet.

Ce dont vous avez besoin, c'est d'une NAT, afin que votre VM utilise l'adresse IP de l'hôte pour accéder à Internet. Vous pouvez le configurer avec les commandes suivantes :

ip link add name br0 type bridge
ip addr add 172.20.0.1/24 dev br0
ip link set dev br0 up
sysctl -w net.ipv4.ip_forward=1
iptables --table nat --append POSTROUTING --out-interface enp3s0 -j MASQUERADE
iptables --insert FORWARD --in-interface br0 -j ACCEPT

Après cela, vous devriez être en mesure d'accéder à l'Internet à partir de vos VM (Vous n'avez pas besoin d'exécuter l'option brctl )

2voto

iwaseatenbyagrue Points 3533

Je pense que la solution la plus simple consiste à ne pas ajouter votre carte réseau au pont et à utiliser la redirection et le masquage.

En d'autres termes, faites quelque chose comme :

  • sysctl -w net.ipv4.ip_forward=1
  • iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X