我无法使用 VPN 服务器的公共 IP 访问 openvpn 客户端后面的本地网络中的设备。
一点信息:
OpenVPN 服务器(openVZ、Debian7)
Opevpn 客户端(raspberry pi 2 raspbian jessie)。
当我使用其他 VPN 客户端访问其他客户端后面的本地网络(客户端 1 VPN <> 服务器 VPN <> 客户端 2 VPN)时,Everythink 工作正常。从客户端 2,我可以访问客户端 1 VPN 后面的本地网络。在服务器cfg中我设置了iroute等。
问题是当我尝试使用 VPN 服务器的公共 IP 访问客户端 1 后面的本地网络中的 IP 摄像机时。
在客户端设置:
iptables -I FORWARD -i tun0 -p tcp -d 192.168.2.2 --dport 8080 -j ACCEPT
iptables -t nat -I PREROUTING -i tun0 -p tcp --dport 8080 -j DNAT --to-destination 192.168.2.2:8080
在服务器上设置:
iptables -I FORWARD -i venet0 -p tcp -d 10.8.0.6 --dport 8080 -j ACCEPT
iptables -t nat -I PREROUTING -i venet0 -p tcp --dport 8080 -j DNAT --to-destination 10.8.0.6:8080
10.8.0.6是VPN中的树莓派2 IP地址
我用 tcpdump 来看看为什么它不起作用。
原因是来自 VPN 服务器的数据包的源地址具有公共 IP。当 vpn 客户端收到此具有公共 IP 源地址的数据包时,自动使用 WAN 接口而不是 tun0 进行响应。
有人可以帮助我吗?我应该在服务器上的 iptables 中设置什么?
PS:在服务器上的防火墙中,我只有一条 iptables 规则:
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source PUBLICIP