我无法通过使用Xen和libvirt运行的虚拟机访问networking。 我一直在尝试不同的东西,在网上阅读类似的post几天,但我真的坚持在这一点上。 如果有人能提供一些见解,将不胜感激。
我有一个虚拟机,我在主机上运行一个网桥设置为br0和192.168.60.0/24子网上的接口eth0。 libvirtconfigurationxml的networking部分是:
<interface type='bridge'> <mac address='ff:a0:d1:e5:07:de'/> <source bridge='br0'/> <script path='/etc/xen/scripts/vif-bridge'/> <model type='virtio' /> </interface>
当我启动VM时,在主机上创build一个vif6.0接口,并且ifconfig输出是:
br0 Link encap:Ethernet HWaddr 00:A0:D1:C3:07:DE inet addr:192.168.60.33 Bcast:192.168.60.255 Mask:255.255.255.0 inet6 addr: fe80::2a0:d1ff:fee5:7de/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:13 errors:0 dropped:0 overruns:0 frame:0 TX packets:40 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:3570 (3.4 KiB) TX bytes:3508 (3.4 KiB) eth0 Link encap:Ethernet HWaddr 00:A0:D1:C3:07:DE inet6 addr: fe80::2a0:d1ff:fee5:7de/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 b) TX bytes:492 (492.0 b) Interrupt:19 Memory:fe8f0000-fe900000 vif6.0 Link encap:Ethernet HWaddr FE:FF:FF:FF:FF:FF inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:80 errors:0 dropped:0 overruns:0 frame:0 TX packets:6 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:500 RX bytes:6660 (6.5 KiB) TX bytes:468 (468.0 b) virbr0 Link encap:Ethernet HWaddr 00:00:00:00:00:00 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING 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)
'brctl show'输出似乎显示正确configuration的网桥:
br0 8000.00a0d1e507de no eth0 vif6.0
虚拟机中的ifcfg-eth0内容是:
DEVICE=eth0 BOOTPROTO=static HWADDR=FF:A0:D1:E5:07:DE IPADDR=192.168.60.133 NETMASK=255.255.255.0 ONBOOT=yes
并在虚拟机ifconfig的输出看起来像我所期望的:
eth0 Link encap:Ethernet HWaddr FF:A0:D1:E5:07:DE inet addr:192.168.60.133 Bcast:192.168.60.255 Mask:255.255.255.0 inet6 addr: fe80::fda0:d1ff:fee5:7de/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:80 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:468 (468.0 b) TX bytes:7780 (7.5 KiB)
但是当我尝试SSH或ping另一台计算机时,我得到“没有路由到主机”。
在主机系统上使用tcpdump我试图看看是否可以缩小问题的位置:
# tcpdump -vv -i vif6.0 tcpdump: WARNING: vif6.0: no IPv4 address assigned tcpdump: listening on vif6.0, link-type EN10MB (Ethernet), capture size 96 bytes 14:49:40.833997 arp who-has 192.168.60.35 tell 192.168.60.133 14:49:41.833314 arp who-has 192.168.60.35 tell 192.168.60.133 14:49:42.833309 arp who-has 192.168.60.35 tell 192.168.60.133
所以当我尝试ssh到192.168.60.35时,虚拟机发出一个arp who-has分组。 我认为这意味着虚拟机内的设置是可以的,这是主机系统的一个问题。 如果我用br0的接口运行tcpdump,那么我不会看到这些ARP包。
我的想法是,在以某种方式进入桥之前封包被阻塞。 我试着添加一个iptables规则来解决这个问题:-A FORWARD -m physdev –physdev-is-bridged -j ACCEPT,但是没有成功。 我也尝试了以下内容:
/sbin/sysctl -w net.bridge.bridge-nf-call-ip6tables=0 /sbin/sysctl -w net.bridge.bridge-nf-call-iptables=0 /sbin/sysctl -w net.bridge.bridge-nf-call-arptables=0 /sbin/sysctl -w net.ipv4.ip_forward=1
没有影响。
有什么比我更有经验的人对我在这里失去的东西是否显而易见? 如果vif6.0在vm中有相同的MAC地址是eth0? 我需要更多的规则在我的iptables? 谢谢你的帮助!
你应该在br0上configurationip addr而不是eth0 。
/etc/sysconfig/network-scripts/ifcfg-eth0示例:
DEVICE="eth0" HWADDR="00:1E:37:D4:06:3E" NM_CONTROLLED="no" ONBOOT="yes" BRIDGE=br0
/etc/sysconfig/network-scripts/ifcfg-br0示例:
DEVICE=br0 TYPE=Bridge BOOTPROTO=static BROADCAST=192.168.60.255 IPADDR=192.168.60.133 NETMASK=255.255.255.0 NETWORK=192.168.60.0 ONBOOT=yes
然后执行sudo ifdown eth0;ifdown br0; ifup br0; ifup eth0 sudo ifdown eth0;ifdown br0; ifup br0; ifup eth0
你应该看到通过命令ifconfig将ip地址configuration为br0 。