我有一台Debian Wheezy机器,我试图用桥接networking来设置KVM。 不幸的是,这座桥似乎没有正确的转发stream量。
我的设置如下:
物理机器有一个eth0连接到IP地址为192.168.0.1的路由器。
这个eth0是网桥接口br0的成员,它被静态configuration为IP地址192.168.0.101。
虚拟机的networking接口是物理主机上的vnet0和虚拟机中的eth0 。 在虚拟机中,接口静态configuration为IP地址192.168.0.110。
从物理主机,我可以ping虚拟机和路由器:
# ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=0.331 ms # ping 192.168.0.110 PING 192.168.0.110 (192.168.0.110) 56(84) bytes of data. 64 bytes from 192.168.0.110: icmp_req=1 ttl=64 time=0.417 ms
在虚拟机上,我可以ping物理机器:
# ping 192.168.0.101: PING 192.168.0.101 (192.168.0.101) 56(84) bytes of data. 64 bytes from 192.168.0.101: icmp_req=1 ttl=64 time=0.133 ms
但是我不能ping通路由器:
# ping 192.168.0.1: PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. From 192.168.0.110 icmp_seq=10 Destination Host Unreachable
从我所知道的情况来看,网桥已经正确设置,所有连接的端口都处于转发状态:
# brctl show bridge name bridge id STP enabled interfaces br0 8000.2cd444acf8ad no eth0 vnet0 # brctl showstp br0 br0 bridge id 8000.2cd444acf8ad designated root 8000.2cd444acf8ad root port 0 path cost 0 max age 20.00 bridge max age 20.00 hello time 2.00 bridge hello time 2.00 forward delay 0.00 bridge forward delay 0.00 ageing time 300.01 hello timer 1.20 tcn timer 0.00 topology change timer 0.00 gc timer 28.95 flags eth0 (1) port id 8001 state forwarding designated root 8000.2cd444acf8ad path cost 4 designated bridge 8000.2cd444acf8ad message age timer 0.00 designated port 8001 forward delay timer 0.00 designated cost 0 hold timer 0.20 flags vnet0 (2) port id 8002 state forwarding designated root 8000.2cd444acf8ad path cost 100 designated bridge 8000.2cd444acf8ad message age timer 0.00 designated port 8002 forward delay timer 0.00 designated cost 0 hold timer 0.20 flags
iptables和ebtables都是空的,默认的ACCEPT策略是:
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination # ebtables -L Bridge table: filter Bridge chain: INPUT, entries: 0, policy: ACCEPT Bridge chain: FORWARD, entries: 0, policy: ACCEPT Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
有没有人有一个想法是什么原因导致这个问题,我怎么能解决它?
编辑:
显然,桥接器认识到有一些东西连接到它,因为它build立一个MAC表:
# brctl showmacs br0 port no mac addr is local? ageing timer 1 2c:76:8a:ff:88:1d no 1.28 <- ??? 1 2c:d4:44:ac:f8:ad yes 0.00 <- MAC of br0 and physical eth0 2 52:54:00:53:dd:34 no 143.80 <- MAC of VM's eth0 1 c8:1f:66:ba:83:33 no 0.00 <- MAC of router interface 2 fe:54:00:53:dd:34 yes 0.00 <- MAC of vnet0
编辑2:
我刚刚创build了第二个虚拟机。 该机器在物理机器上具有接口vnet1,其虚拟eth0被分配了IP地址192.168.0.111。 该虚拟机也只能ping物理机器,路由器和原始虚拟机。 brctl showstp显示转发状态下的所有端口(包括vnet1), brctl showmacs显示vnet1的MAC和新机器的虚拟eth0以及我上面写的内容。
检查内核是否设置为启用IP转发:
sysctl -a | grep forwarding
您可以启用:
sudo sysctl net.ipv4.conf.all.forwarding=1 sudo sysctl net.ipv6.conf.all.forwarding=1
ARP代理也可能存在问题。 请检查:
sysctl -a | grep proxy_arp
并用命令设置:
sudo sysctl net.ipv4.conf.eth0.proxy_arp=1
您可以将密钥和值放在/etc/sysctl.d下的/etc/sysctl.d以便在重新引导时重置这些值。
从路由器子网上的其他设备进行testing可能有助于确定问题。
在eth0接口上使用tcpdump进行testing也可能表明连接失败。
arp请求表明可达性问题。 echo或echo replystream量可能表明哪一方存在问题。