我正在尝试在 Fedora-19 主机系统上设置几台虚拟机,并使用传统的桥接网络设备(br0、br1 等)。我之前已使用旧版本的 Fedora(16、14 等)做过很多次这样的操作,而且一切正常。但是,由于我无法弄清楚的原因,桥接似乎在 Fedora19 中无法正常工作。虽然我可以从虚拟机内部成功连接到外界(本地网络 + 互联网),但是外部(本地网络)无法与虚拟机通信。我指的是像 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(存在此问题的虚拟机之一)中的相关部分:
<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
如果需要,我可以提供更多信息。谢谢!
答案1
不知何故,我是个白痴,忘记实际配置虚拟机内的静态 IP 地址,而它们仍然会随机获取 DHCP 分配的 IP。显然,尝试连接到尚未绑定到网络接口(虚拟机内)的静态 IP 是行不通的。