我的网络组成如下:
主机 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。这就是发生的情况:
- 从主机 BI 可以 ping A(使用 9.xxx 或 192.15.206.x)和 C
- 从主机 CI 可以 ping B 和 A(使用 192.15.206.x)
- 从主机 AI 可以使用 IP 192.15.206.1 或 192.168.206.1 ping B,但不能使用 IP 192.168.206.2 ping B
所以问题是为什么?路由表是:
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
网桥配置是:
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
有任何想法吗 ?
这可以是
所以检查
iptables -L -nv
B 的转发和ip route
C。编辑 1
B 上的防火墙可以配置为让这些数据包通过,例如
当然,您可以改用源地址和目标地址(或另外使用)。
编辑 2
喜欢:
这个问题可能与你不再相关,但我仍然想把它留在这里,因为我遇到了同样的问题。
发出以下命令:
请注意,您的 tun0 的状态可能已禁用。这意味着机器认为链路断开,因此忽略所有数据包。你只需要发出以下命令,界面就会进入学习状态,停留10秒左右,然后进入转发阶段,一切都通过。