我無法使用 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