我的networking组成如下:
主机A使用ip 9.xxx和vpn ip 192.15.206.x(openvpn客户端)
主机B与IP 9.xxx和vpn ip 192.15.206.1(openvpn服务器)这个主机有一个网桥br0与ip 192.168.206.1
主机C的IP地址为192.168.206.2/192.168.206.255,他们居住在主机B的vnet0中,vnet0与br0
我想从A到C.这是发生了什么事情:
所以问题是为什么? 路由表是:
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
有任何想法吗 ?
这可以
因此,检查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