Linux网桥(brctl)正在丢弃数据包

我一直在研究这个问题几天,还没有find答案。 您的帮助将非常感激!

我有一些物理服务器上运行的虚拟机(虚拟机)。 服务器使用Linux接器(br100)将这些虚拟机连接在一起:

# brctl show bridge name bridge id STP enabled interfaces br100 8000.984be15fe7e3 no eth1.1729 vnet0 vnet1 

vnet0和vnet1是虚拟机的虚拟网卡。

br100(物理服务器)分配给IP 172.16.0.11。 连接到vnet1的虚拟机分配给172.16.0.3,vnet0虚拟机为172.16.0.5。

到现在为止还挺好。 172.16.0.3可以ping 172.16.0.5没有问题。

现在我试图设置172.16.0.3作为路由器(openvpn服务器,如果有的话)到子网10.8.0.0/16。

这里是我的问题:机器在10.8.0.0/16(在这种情况下是10.8.0.6)可以ping 172.16.0.3,但无法ping 172.16.0.5。

(我认为)我已经排除了所有明显的原因:ip_forward打开,iptables刷新等。现在我已经缩小了原因:br100不转发数据,因为它应该!

当我从10.8.0.6 ping 172.16.0.5时,数据包被传送到物理服务器上的vnet1(VM 172.16.0.3):

 # tcpdump -leni vnet1 icmp tcpdump: WARNING: vnet1: no IPv4 address assigned tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on vnet1, link-type EN10MB (Ethernet), capture size 65535 bytes 07:45:03.858356 02:16:3e:6a:42:57 > 02:16:3e:02:40:82, ethertype IPv4 (0x0800), length 98: 10.8.0.6 > 172.16.0.5: ICMP echo request, id 63242, seq 1046, length 64 07:45:04.858239 02:16:3e:6a:42:57 > 02:16:3e:02:40:82, ethertype IPv4 (0x0800), length 98: 10.8.0.6 > 172.16.0.5: ICMP echo request, id 63242, seq 1047, length 64 ^C 2 packets captured 2 packets received by filter 0 packets dropped by kernel 

但不会转发到vnet0(172.16.0.5):

 # tcpdump -leni vnet0 icmp tcpdump: WARNING: vnet0: no IPv4 address assigned tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on vnet0, link-type EN10MB (Ethernet), capture size 65535 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel 

我也按照这个post中的build议,设置0到/ proc / sys / net / bridge / bridge-nf- *,但似乎没有帮助。

除了刷新iptablesfilter之外,我还在iptables中打开了TRACE,这表明这些包永远不会打iptables。

Linux网桥不能在端口之间转发数据包的任何其他原因?

find答案! Linux以太网桥查询ebtables来决定要转发哪些数据包,以及要丢弃哪些数据包。 冲洗ebtables解决了我的问题。