Je viens d'installer KVM sur mon serveur Ubuntu selon ce guide: https://help.ubuntu.com/community/KVM/Installation
Puis préparé un réseau ponté comme indiqué ici: https://help.ubuntu.com/community/KVM/Networking
Ensuite, j'ai créé une machine virtuelle avec virt-manager. J'ai essayé plusieurs fois mais l'invité ne parvient pas à se connecter au réseau! De l'aide?
ifconfig:
br0 Link encap:Ethernet HWaddr d0:27:88:b0:e4:38
inet addr:192.168.20.100 Bcast:192.168.20.255 Mask:255.255.255.0
inet6 addr: fe80::d227:88ff:feb0:e438/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:62 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10493 (10.4 KB) TX bytes:8433 (8.4 KB)
eth0 Link encap:Ethernet HWaddr d0:27:88:b0:e4:38
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:62 errors:0 dropped:0 overruns:0 frame:0
TX packets:63 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:11361 (11.3 KB) TX bytes:8479 (8.4 KB)
Interrupt:41
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
virbr0 Link encap:Ethernet HWaddr 5a:8c:57:95:af:3b
inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
spectacle brctl:
bridge name bridge id STP enabled interfaces
br0 8000.d02788b0e438 no eth0
virbr0 8000.000000000000 yes
showmacs brctl br0:
port no mac addr is local? ageing timer
1 5c:d9:98:67:b6:28 no 48.33
1 d0:27:88:b0:e4:38 yes 0.00
1 e0:2a:82:f9:6c:09 no 0.00
route ip:
default via 192.168.20.1 dev br0 metric 100
192.168.20.0/24 dev br0 proto kernel scope link src 192.168.20.100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
* Dans l'invité * Je n'ai pas pu copier-coller les informations de l'invité car je ne peux pas y accéder. Il n'a obtenu aucune IP de DHCP. Ne fonctionnera pas même après l'avoir configuré manuellement.
server
networking
kvm
network-bridge
THpubs
la source
la source
ifconfig
,brctl show
,brctl showmacs br0
etip route
. Sur l'invité:ifconfig
,ip route
,ping 8.8.8.8
,ping <your internet router>
ettraceroute 8.8.8.8
. Je ne peux pas dire que j'ai configuré kvm comme vous l'avez fait, mais j'ai obtenu un pontage pour travailler en utilisant lakvm
commande. J'ai dû déconnecter le sans fil pour que mon hôte se connecte à Internet et, comme le disent les instructions que vous avez citées, vous devez vous connecter à Internet avec Ethernet.brctl showmacs br0
liste ci-dessus?Réponses:
Préliminaires
Cette suite a fonctionné pour moi pour Ubuntu 12.04. Vous devez désactiver le pare-feu de votre ordinateur pendant que vous testez cela afin qu'il n'interfère pas.
Le fichier / etc / default / qemu-kvm doit être tel qu'initialement installé.
Vous aurez besoin d'avoir bridge-utils qemu-kvm et libvirt-bin installé . Tous les utilisateurs utilisant des machines virtuelles doivent être ajoutés au groupe libvirtd.
Il ne semble plus être nécessaire d'ajouter la capacité CAP_NET_ADMIN.
Configuration du réseau
Le mode réseau par défaut est le mode utilisateur, également appelé SLIRP. Il utilise un pont virbr0 prédéfini qui est routé NAT vers l'ordinateur invité. Le routage NAT utilise la fonction ip_forwarding du noyau et iptables . Le mode pont utilise un pont virtuel dans l'invité auquel l'interface Ethernet (non numérotée) se connecte, et sur lequel l'hôte et l'invité ont leurs interfaces réseau.
Les diagrammes suivants peuvent rendre les différences plus claires:
Vous pouvez voir comment le réseau d'utilisateurs par défaut est défini avec:
Je peux configurer le mode ponté avec les approches suivantes:
Dans / etc / network / interfaces (à partir de la partie passerelle du message que vous mentionnez dans votre question):
Redémarrer; et assurez-vous que la mise en réseau sans fil n'est pas active. Vérifiez la route IP par défaut avec
ip route
. Il doit utiliser l'interface br0.NB Si votre Ethernet n'est pas connecté lorsque cette modification est effectuée, vous devez avoir votre câble Ethernet branché et obtenir un transporteur ou le démarrage se bloquera pendant deux minutes et vous n'aurez pas de capacité réseau C'est parce que l'interface eth0, par étant dans ce fichier, doit apparaître avant que le démarrage puisse continuer normalement.
NB Généralement, vous ne pouvez pas utiliser un réseau sans fil au lieu de eth0 en raison de leur incapacité à utiliser plusieurs adresses MAC (j'en déduis qu'ils ont besoin d'une seconde pour le pont).
Comme alternative, vous pouvez désactiver l'utilisation d'Ethernet et vous assurer qu'il n'a pas d'adresse IP et qu'il n'y a pas de route par défaut configurée avec
ip route
. Ensuite:Vous pouvez également fournir une adresse IP statique ici, ainsi que définir la route et l'adresse DNS par défaut. Pour cet exemple
dhclient
fait cela.Voici ma table de route:
Utilisation de kvm
Je peux ensuite démarrer une machine kvm pontée avec:
Le
-netdev tap
paramètre fait de sudo une exigence. Au démarrage de la machine virtuelle, qemu-kvm exécute les commandes suivantes:Cela se fait par / etc / qemu-ifup
L'interface vnet0 de la machine virtuelle est ajoutée au pont br0 car la route par défaut ci-dessus utilise cette interface de pont. Si ce n'était pas le cas, l'interface tap à la place serait ajoutée à l'interface virbr0. Comme ce n'est pas connecté à Internet, NAT serait utilisé pour connecter l'invité à l'hôte et à Internet, dans mes expériences. Vous pouvez diriger le vnet0 vers un pont particulier dans / etc / default / qemu-kvm. En utilisant virt-manager ci-dessous, vous pouvez explicitement indiquer à quel pont se connecter.
En raison des commandes ci-dessus émises par qemu-kvm et du
-netdev tap,id=tunnel,ifname=vnet0
paramètre, la machine virtuelle vm est connectée au tunnel vnet0 et le tunnel est connecté au pont br0.Je peux maintenant directement ssh dans cette machine virtuelle invitée à partir d'un autre ordinateur de mon réseau.
Mon hôte
ifconfig
(notez l'interface vnet0 qui apparaît sur mon réseau lorsque la machine virtuelle est en cours d'exécution):Ma configuration de pont lors de l'exécution de la machine virtuelle:
Notez que l'interface vnet0 de la machine virtuelle et l'interface eth0 sont connectées au pont br0.
Et les MAC sur l'interface br0:
Notez que l'interface br0 connecte mon ordinateur hôte au même pont utilisé par l'invité.
Vous pouvez vérifier que vous êtes ponté plutôt que NAT routé vers votre propre réseau en utilisant
traceroute 8.8.8.8
. Si le premier nœud est le routeur de votre réseau plutôt que l'adresse IP de l'invité, votre réseau devrait fonctionner correctement.Consultez cette documentation .
virt-manager
Assurez-vous que vous avez installé
virt-manager
ethal
. Lehal
package est une dépendance suggérée pourvirt-manager
et est utilisé pour déterminer la configuration réseau de votre système lors de la création ou de la modification d'invités.Tout en ayant le pont br0 défini comme ci-dessus, j'ai créé une machine virtuelle avec virt-manager comme suit:
J'ai pu accéder directement au reste de mon réseau domestique et à Internet à partir de cet invité. J'ai également pu y accéder depuis l'autre ordinateur Ubuntu (non hôte, non invité) sur mon réseau domestique.
Voici la très longue
kvm
commande exécutée par virt-manager (pour comparaison avec EApubs ou toute autre personne ayant des problèmes avec cela):Voici la partie réseau de la description de la machine virtuelle dans /etc/libvirt/qemu/quantal.xml
Selon ce lien, pour des performances et une fiabilité, il peut être préférable de définir le modèle de périphérique réseau sur
virtio
, vous pouvez le faire en utilisant virt-viewer en appuyant sur le bouton i , en allant au paramètre NIC et en définissant le "Modèle de périphérique "àvirtio
. Vous pouvez également ajouter ceci au XML ci-dessus en ajoutant la ligne:En résumé
Tout cela a pris le 12.04 était:
-device e1000,netdev=tunnel -netdev tap,id=tunnel,ifname=vnet0
, ou créez une machine virtuelle avec virt-manager, en spécifiant le pont réseau br0 sous le panneau Étape 4-> Options avancées.Aucune autre modification n'a été nécessaire pour la mise en réseau, les capacités, les modèles ou les configurations.
Pour exposer un service de votre nouvel invité à Internet, vous devez:
N'oubliez pas de tester et de réactiver le service de pare-feu pour votre ordinateur hôte. Il peut avoir besoin de n'importe quelle entrée pour transmettre le trafic à l'invité.
Voir https://help.ubuntu.com/community/KVM/Installation , https://help.ubuntu.com/community/KVM/Networking et https://help.ubuntu.com/12.04/serverguide/libvirt. html .
la source
ps aux | grep kvm
).brctl show
comme vous l'avez dans votre question?) Quelle version d'Ubuntu utilisez-vous? C'est peut-être la différence. Quelle version de virt-manager? (Le mien est 0.9.1-1ubuntu5.1).Si le comportement que vous voyez est l'hôte peut accéder à l'invité, et l'invité peut accéder à l'hôte, mais l'invité ne peut pas accéder à d'autres machines sur le réseau ou vice versa ... probablement le pare-feu de l'hôte bloque l'accès.
Voir: https://bugs.launchpad.net/ubuntu/+source/ufw/+bug/573461
Plus précisément, cette section: "La dernière étape consiste à désactiver netfilter sur le pont:
la source
Ce sont les deux scripts que j'utilise pour créer un pont pour
qemu-kvm
.Tout d'abord, laissez l'hôte devenir un routeur IP.
Script
ip-router.sh
:Ensuite, créez l'
tun-tap
interface etbridge
celle ci avec votre interface par défaut (généralement celle avec une connexion Internet).Script
create-qemu-bridged-tuntap.sh
:J'utilise ces scripts quotidiennement, donc ils devraient aussi bien fonctionner pour vous. Vous devrez installer un paquet pour que tout cela fonctionne. En utilisant:
vous pouvez voir quel package doit avoir
COMMAND
. Par exemple, pour voir quel package doit avoirbrctl
, exécutez simplement:et vous aurez:
En utilisant la même approche pour toutes les commandes de ces scripts, vous devez (au moins) exécuter cette
aptitude
ligne de commande:Enfin, vous pouvez lancer le script principal (en tant qu'utilisateur normal):
En cours d'exécution,
ip addr
vous devriez voir unebr0
interface avec une adresse IP192.168.1.1
, comme spécifié dans lecreate-qemu-bridged-tuntap.sh
script:C'est
host address
comme vu par leguest
. A l'inverse, l'invité aura comme adresse IP192.168.1.95
(encore une fois, cela peut être facilement modifié à l'intérieur du script principal).Maintenant, en utilisant
virt-manager
, il vous suffit de configurer votre nic invité pour l'utiliserbr0
comme interface physique.À l'intérieur du
guest
, il vous suffit de donnereth0
une adresse IP à192.168.1.95
et tout devrait bien se passer.la source
cat /proc/sys/net/ipv4/ip_forward
donné0
. L'activer et le persister a résolu le problème pour moi, les instructions de ce post .