Kvm-Virtualization

如何在 Fedora19 中使用 KVM 使橋接網路工作

  • June 9, 2014

我試圖在 Fedora-19 主機系統上設置幾個虛擬機,使用傳統的橋接網路設備(br0、br1 等)。我以前在舊版本的 Fedora(16、14 等)上做過很多次,而且效果很好。但是,由於我無法弄清楚的原因,該橋似乎無法在 Fedora19 中執行。雖然我可以從 VM 內部成功連接到外部世界(本地網路 + 網際網路),但沒有任何東西可以從外部(本地網路)與 VM 通信。我指的是像 ping 一樣微不足道的事情。從虛擬機內部,我可以成功 ping 任何東西(0% 丟包)。但是,在虛擬機外部(在主機上,或同一網路上的任何其他系統上),我在 ping 虛擬機的 IP 地址時看到 100% 的封包遺失。

我的第一個問題很簡單,還有其他人在 F19 中成功地完成了這項工作嗎?如果是這樣,您需要遵循哪些步驟?

我根本沒有使用 NetworkManager,它的所有網路服務。任何地方都沒有涉及防火牆(iptables 和防火牆服務目前被禁用)。這是目前主機配置:

# brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.38eaa792efe5   no      em2
                           vnet1
br1     8000.38eaa792efe6   no      em3
br2     8000.38eaa792efe7   no      em4
                           vnet0
virbr0      8000.525400db3ebf   yes     virbr0-nic

# more /etc/sysconfig/network-scripts/ifcfg-em2
TYPE=Ethernet
BRIDGE="br0"
NAME=em2
DEVICE="em2"
UUID=aeaa839e-c89c-4d6e-9daa-79b6a1b919bd
ONBOOT=yes
HWADDR=38:EA:A7:92:EF:E5
NM_CONTROLLED="no"

# more /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
NM_CONTROLLED="no"
BOOTPROTO=dhcp
NAME=br0
DEVICE="br0"
ONBOOT=yes

# ifconfig em2 ;ifconfig br0
em2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet6 fe80::3aea:a7ff:fe92:efe5  prefixlen 64  scopeid 0x20<link>
       ether 38:ea:a7:92:ef:e5  txqueuelen 1000  (Ethernet)
       RX packets 100093  bytes 52354831 (49.9 MiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 25321  bytes 15791341 (15.0 MiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
       device memory 0xf7d00000-f7e00000  

br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 10.31.99.226  netmask 255.255.252.0  broadcast 10.31.99.255
       inet6 fe80::3aea:a7ff:fe92:efe5  prefixlen 64  scopeid 0x20<link>
       ether 38:ea:a7:92:ef:e5  txqueuelen 0  (Ethernet)
       RX packets 19619  bytes 1963328 (1.8 MiB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 11  bytes 1074 (1.0 KiB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

/etc/libvirt/qemu/foo.xml 的相關部分(有此問題的 VM 之一):

<interface type='bridge'>
     <mac address='52:54:00:26:22:9d'/>
     <source bridge='br0'/>
     <model type='virtio'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

# ps -ef | grep qemu
qemu      1491     1 82 13:25 ?        00:42:09 /usr/bin/qemu-system-x86_64 -machine accel=kvm -name cuda-linux64-build5 -S -machine pc-0.13,accel=kvm,usb=off -cpu SandyBridge,+pdpe1gb,+osxsave,+dca,+pcid,+pdcm,+xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+monitor,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme -m 16384 -smp 6,sockets=6,cores=1,threads=1 -uuid 6e930234-bdfd-044d-2787-22d4bbbe30b1 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/cuda-linux64-build5.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=localtime -no-shutdown -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=/var/lib/libvirt/images/cuda-linux64-build5.img,if=none,id=drive-virtio-disk0,format=raw,cache=writeback -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -netdev tap,fd=25,id=hostnet0,vhost=on,vhostfd=26 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:26:22:9d,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 127.0.0.1:1 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5

如果需要,我可以提供更多資訊。謝謝!

不知何故,我是個白痴,忽略了實際配置虛擬機內部的靜態 IP 地址,他們仍在隨機獲取 DHCP 分配的 IP。顯然,嘗試連接到(尚未)綁定到網路介面(VM 內部)的靜態 IP 永遠不會起作用。

引用自:https://serverfault.com/questions/529163