qemu-kvm / virsh: pas de connectivité réseau lors de l'utilisation d'un réseau ponté

5

J'ai un problème avec la virtualisation via libvirt / qemu-kvm, dans lequel ma configuration pour la mise en réseau pontée ne semble pas fonctionner correctement. J'ai suivi tous les tutoriels que je pouvais trouver et passais des heures et des heures sur des forums, mais en vain.

L’hôte et l’invité utilisent Centos6.

Voici la mise en place pour l'hôte:

[root@node2 ~]# ifconfig -a
bridge0   Link encap:Ethernet  HWaddr BC:30:5B:E8:C0:4F  
          inet addr:10.59.190.253  Bcast:10.59.190.255  Mask:255.255.255.0
          inet6 addr: fe80::be30:5bff:fee8:c04f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5315 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3350 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:316961 (309.5 KiB)  TX bytes:3943630 (3.7 MiB)

eth0      Link encap:Ethernet  HWaddr BC:30:5B:E8:C0:4F  
          inet6 addr: fe80::be30:5bff:fee8:c04f/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:5286 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5325 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:409939 (400.3 KiB)  TX bytes:4095006 (3.9 MiB)
          Interrupt:16 Memory:c0000000-c0012800 

eth1      Link encap:Ethernet  HWaddr BC:30:5B:E8:C0:50  
          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:1000 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Interrupt:17 Memory:c2000000-c2012800 

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:28 errors:0 dropped:0 overruns:0 frame:0
          TX packets:28 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2832 (2.7 KiB)  TX bytes:2832 (2.7 KiB)

sit0      Link encap:IPv6-in-IPv4  
          NOARP  MTU:1480  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)

vnet0     Link encap:Ethernet  HWaddr FE:54:00:3A:C5:C9  
          inet6 addr: fe80::fc54:ff:fe3a:c5c9/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:492 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:0 (0.0 b)  TX bytes:29516 (28.8 KiB)

J'ai deux adaptateurs physiques, eth0 et eth1. eth1 est actuellement débranché et n'est pas utilisé dans cette configuration. eth0 est ponté vers bridge0. bridge0 utilise DHCP pour obtenir sa configuration réseau. Les adaptateurs utilisent les configurations suivantes:

[root@node2 network-scripts]# cat ifcfg-eth0
DEVICE="eth0"
NM_CONTROLLED="no"
ONBOOT=yes
HWADDR=BC:30:5B:E8:C0:4F
BRIDGE=bridge0
[root@node2 network-scripts]# cat ifcfg-bridge0
DEVICE=bridge0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=dhcp
DELAY=0
NM_CONTROLLED=no

... et iptables sont configurés comme suit:

[root@node2 network-scripts]# iptables --list-rules
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5900 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -m physdev --physdev-is-bridged -j ACCEPT 
-A FORWARD -m physdev --physdev-is-bridged -j ACCEPT 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

Donc, c'est la mise en place. J'ai ensuite utilisé la commande suivante pour créer et installer une image d'invité Centos6:

virt-install --name=centos-bridge-test --disk path=/var/lib/libvirt/images/centos6-minimal,size=5 --vnc --ram=512 --cdrom=/var/lib/libvirt/images/CentOS-6.0-x86_64-minimal.iso --vnclisten=0.0.0.0 -b bridge0  

D'après ce que j'ai compris, cette configuration aurait dû suffire pour que le réseau ponté «fonctionne correctement ». Toutefois, lorsque je démarre l'invité à l'aide de la commande virsh ( virsh start centos-bridge-test ), il ne dispose pas de connectivité réseau.

Voici un dump XML du domaine libvirt:

[root@node2 network-scripts]# virsh dumpxml centos-bridge-test
<domain type='kvm' id='7'>
  <name>centos-bridge-test</name>
  <uuid>5d611267-2feb-c6f7-7a48-29f9695a4a75</uuid>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='rhel6.0.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/var/lib/libvirt/images/centos6-minimal'/>
      <target dev='hda' bus='ide'/>
      <alias name='ide0-0-0'/>
      <address type='drive' controller='0' bus='0' unit='0'/>
    </disk>
    <disk type='block' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <alias name='ide0-1-0'/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>
    <controller type='ide' index='0'>
      <alias name='ide0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:3a:c5:c9'/>
      <source bridge='bridge0'/>
      <target dev='vnet0'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/1'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/1'>
      <source path='/dev/pts/1'/>
      <target port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-gb'/>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='dynamic' model='selinux'>
    <label>system_u:system_r:svirt_t:s0:c384,c608</label>
    <imagelabel>system_u:object_r:svirt_image_t:s0:c384,c608</imagelabel>
  </seclabel>
</domain>

L’interface semble être configurée correctement (en consultant la documentation de libvirt).

Donc, chaque fois que je lance l'invité, il n'y a pas de connectivité réseau.

[root@localhost ~]# ifconfig -a
eth0       Link encap:Ehternet  HWaddr 52:54:00:3A:C5:C9
           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:1000 
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
           Interrupt:10 Base address:0x6000

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)

Edit: notez que eth0 n’est pas ici, donc j’ai exécuté ifup eth0 pour obtenir l’adaptateur, qui donne alors le résultat suivant:

[root@localhost ~]# ifconfig -a
eth0       Link encap:Ehternet  HWaddr 52:54:00:3A:C5:C9
           inet6 addr: fe80::5054:ff:fe3a:c5c9/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets65 errors:0 dropped:0 overruns:0 frame:0
           TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000 
           RX bytes:3896 (3.8 KiB)  TX bytes:398 (398.0 b)

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)

... et lorsque je tente d'accéder au réseau pour une adresse interne ou externe, je reçois ceci:

[root@localhost ~]# ping 10.59.190.253
connect: Network is unreachable
[root@localhost ~]# ping www.google.com
ping: unknown host www.google.com
[root@localhost ~]# ping 173.194.66.99
connect: Network is unreachable

Informations supplémentaires: Ce qui suit est quelques informations supplémentaires demandées dans les commentaires pour cette question. Ces commandes ont été exécutées à partir de l'hôte avec l'invité en cours d'exécution:

[root@node2 network-scripts]# brctl show
bridge name         bridge id               STP enabled     interfaces
bridge0             8000.bc305be8c04f       no              eth0
                                                            vnet0
[root@node2 network-scripts]# ps -ef | grep qemu
qemu      1597     1  0 11:28 ?        00:00:25 /usr/libexec/qemu-kvm -S -M rhel6.0.0 -enable-kvm -m 512 -smp 1,sockets=1,cores=1,threads=1 -name centos-bridge-test -uuid 5d611267-2feb-c6f7-7a48-29f9695a4a75 -nodefconfig -nodefaults -chardev socket,id=monitor,path=/var/lib/libvirt/qemu/centos-bridge-test.monitor,server,nowait -mon chardev=monitor,mode=control -rtc base=utc -boot c -drive file=/var/lib/libvirt/images/centos6-minimal,if=none,id=drive-ide0-0-0,boot=on,format=raw,cache=none -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -drive if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=20,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:3a:c5:c9,bus=pci.0,addr=0x3 -chardev pty,id=serial0 -device isa-serial,chardev=serial0 -usb -vnc 0.0.0.0:0 -k en-gb -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
root      2815 32057  0 14:31 pts/0    00:00:00 grep qemu

J'apprécierais vraiment toute aide possible en ce moment! Si vous avez besoin de moi pour vous fournir d'autres configurations, etc., veuillez me le faire savoir.

Edit: J'utilise une installation minimale de Centos6, je n'ai donc installé aucun gestionnaire de fenêtres. J'essaie donc de tout faire via virsh et virsh-install, et j'aimerais éviter d'utiliser virsh-manager. Merci.

a.pollock
la source
bon travail affichant toutes ces données, mais il y a une autre chose requise: démarrer la VM, et obtenir brctl showetps -ef |grep qemu
dyasny
@dyasny Merci de me l'avoir fait savoir. J'ai ajouté cette information à la question.
a.pollock
@dyasny J'ai modifié la question pour ajouter le résultat de ifconfig sur l'invité après avoir exécuté ifup eth0 . Cela devrait fournir des informations supplémentaires.
a.pollock

Réponses:

3

La réponse à cette question était que, parce que j'avais effectué une installation non graphique de Centos 6 minimal sur les invités, les interfaces réseau n'avaient pas été automatiquement configurées pour fonctionner. Mon manque de connaissance de la virtualisation et de Centos signifiait que je supposais que cela serait réglé pour moi, mais je me suis trompé dans cette hypothèse.

Correction: je devais entrer dans ifcfg-eth0 sur les invités et activer ONBOOT = yes et BOOTPROTO = dhcp , puis redémarrer la carte réseau via ifdown eth0 puis ifup eth0 . Après cela, les invités ont reçu des adresses IP et tout a fonctionné comme prévu.

a.pollock
la source
1
oh wow, c'est comme vérifier le câble d'alimentation pour un serveur qui ne démarrerait pas :)
dyasny
J'ai le même problème. J'ai installé Ubuntu et je souhaite installer centos dans Ubuntu. J'ai installé avec succès, mais lorsque je vais redémarrer, aucune erreur de périphérique amorçable ne se produit. puis-je écrire ONBOOT = yes dans ubuntu eth0.
Suresh
J'ai eu ce même problème et ma solution changeais de BOOTPROTO noneà static(j'attribuer une adresse IP manuellement)
Castis
0

OK, les réglages semblent bons. Cela laisse
1. essayer de désactiver complètement iptables 2. basculer le périphérique réseau de RTL à virtio

Voici comment j'ai configuré IPTables normalement: http://fpaste.org/OKG5/

Dyasny
la source
Merci beaucoup pour vos commentaires. Voici comment cela s'est passé: 1. J'ai désactivé iptables en exécutant le service iptables stop , puis j'ai redémarré le réseau avec le redémarrage du réseau de services et confirmé que iptables était désactivé avec iptables -L , qui affiche ACCEPT dans son ensemble. J'ai redémarré l'invité et essayé d'accéder au réseau et j'ai rencontré les mêmes problèmes. Notez également que je devais exécuter ifup eth0 pour obtenir l'adaptateur.
a.pollock
2. Je ne savais pas trop comment faire cela. Un rapide coup d'œil sur le site Web libvirt m'a amené à ajouter <model type = 'virtio'> au domaine XML sous l'élément interfaces. Après cela, je répète l'invité, mais j'ai toujours le même problème. Si je me suis trompé en voulant faire passer le périphérique réseau de RTL à virtio, faites-le moi savoir. J'apprécie vraiment l'aide que vous avez apportée jusqu'à présent!
a.pollock
la machine virtuelle obtient-elle réellement une adresse IP de DHCP?
Dyasny
Cela ne semble pas, non. eth0 ne semble pas être en place au départ. Je dois exécuter ifup eth0 pour l'obtenir, et même dans ce cas, il ne semble pas avoir d'adresse IPv4 (il semble cependant qu'il y ait une adresse IPv6). J'ai mis à jour la question avec l'impression de ifconfig -a avant et après avoir évoqué eth0 .
a.pollock
J'ai vérifié les journaux sur le serveur DHCP et celui-ci ne reçoit aucune demande DHCP du système d'exploitation invité.
a.pollock