openvpn(tun0 + bridge):通信桥 – > tun0工作,但不是相反的方向

我的networking组成如下:

我想从A到C.这是发生了什么事情:

  • 从主机BI可以ping A(9.xxx或192.15.206.x)和C.
  • 从主机CI可以ping B和A(与192.15.206.x)
  • 从主机AI可以ping通B或者IP 192.15.206.1或者192.168.206.1,而不是C谁拥有IP 192.168.206.2

所以问题是为什么? 路由表是:

192.15.206.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 9.168.58.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.15.206.0 192.15.206.2 255.255.255.0 UG 0 0 0 tun0 192.168.206.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 br0 0.0.0.0 9.168.58.254 0.0.0.0 UG 0 0 0 eth0 

桥梁configuration是:

 bridge name bridge id STP enabled interfaces br0 8000.005056a67d62 no eth1 vnet0 

命令:

 cat /proc/sys/net/ipv4/ip_forward 

返回1

使用tcpdump -i tun0如果我在主机A上运行ping 192.168.206.1:

 14:33:23.927126 IP 192.15.206.6 > 192.168.206.1: ICMP echo request, id 768, seq 513, length 40 14:33:23.927191 IP 192.168.206.1 > 192.15.206.6: ICMP echo reply, id 768, seq 513, length 40 

重播它被送回。 但是,如果我在主机A上运行ping 192.168.206.2重播它不会被发回。

 14:36:33.262959 IP 192.15.206.6 > 192.168.206.2: ICMP echo request, id 768, seq 1281, length 40 14:36:38.749631 IP 192.15.206.6 > 192.168.206.2: ICMP echo request, id 768, seq 1537, length 40 

看起来像数据包通过tun0设备从A到B发送,但是这些数据不会转发给br0,然后发送数据包到连接C主机的vnet0。

与iptables有关的问题,实际上是通过停止iptables服务,我可以从A ping C。我试过这个规则没有成功:

 -A FORWARD -i br0 -j ACCEPT -A FORWARD -o br0 -j ACCEPT -A FORWARD -i br0 -j ACCEPT -A FORWARD -o br0 -j ACCEPT -A FORWARD -i vnet0 -j ACCEPT -A FORWARD -o vnet0 -j ACCEPT -A FORWARD -i vnet0 -j ACCEPT -A FORWARD -o vnet0 -j ACCEPT -A FORWARD -i tun0 -j ACCEPT -A FORWARD -o tun0 -j ACCEPT -A FORWARD -i tun0 -j ACCEPT -A FORWARD -o tun0 -j ACCEPT 

有任何想法吗 ?

这可以

  1. B上的防火墙问题(相反,Netfilter也是通过网桥阻止数据包)
  2. C上的防火墙问题(不太可能)
  3. C上的路由问题

因此,检查B上的iptables -L -nv以及C上的转发和ip route

编辑1

B上的防火墙可以configuration为让这些数据包通过例如

 iptables -I FORWARD 2 -m physdev --physdev-in vnet0 -j ACCEPT iptables -I FORWARD 2 -m physdev --physdev-out vnet0 -j ACCEPT 

当然,您可以使用源地址和目标地址(或另外)。

编辑2

喜欢:

 iptables -I FORWARD 2 -s 192.15.206.2 -d 192.168.206.2 -j ACCEPT iptables -I FORWARD 2 -d 192.15.206.2 -s 192.168.206.2 -j ACCEPT 

这个问题可能与您无关,但是由于我有同样的问题,所以我仍然想离开这里。

发出以下命令:

 #brctl showstp br0 .... other interfaces .... tun0 (8) port id 8008 state disabled designated root 8000.0cc47a95b66f path cost 100 designated bridge 8000.0cc47a95b66f message age timer 0.00 designated port 8008 forward delay timer 0.00 designated cost 0 hold timer 0.00 flags 

请注意,您的tun0的状态可能被禁用。 这意味着机器认为链接已closures,从而忽略所有数据包。 你只需要发出下面的命令,界面就会进入学习状态,停留在那里约10秒钟,然后进入一切都将经过的转发阶段。

 ip link set dev tun0 up