我已经研究了这个问题几天了,还没有找到答案.非常感谢您的帮助!
我在物理服务器上运行了一些虚拟机(虚拟机).服务器使用Linux桥接器(br100)将这些VM连接在一起:
# brctl show bridge name bridge id STP enabled interfaces br100 8000.984be15fe7e3 no eth1.1729 vnet0 vnet1
vnet0和vnet1是VM的虚拟NIC.
br100(物理服务器)分配给IP 172.16.0.11.连接到vnet1的VM分配给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,length 98: 10.8.0.6 > 172.16.0.5: ICMP echo request,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,capture size 65535 bytes ^C 0 packets captured 0 packets received by filter 0 packets dropped by kernel
我也遵循this post中的建议并将0设置为/ proc / sys / net / bridge / bridge-nf- *,但它似乎没有帮助.
除了刷新iptables过滤器之外,我还在iptables中启用了TRACE,这表明这些数据包从未命中过iptables.
Linux桥接器不能在端口之间转发数据包的任何其他原因?
解决方法
找到答案了! Linux以太网桥咨询ebtables以决定转发哪些数据包以及丢弃哪些数据包. Flushing ebtables解决了我的问题.