VPN サーバーのパブリック IP を使用して、openvpn クライアントの背後にあるローカル ネットワーク内のデバイスにアクセスできません。
ちょっとした情報:
Openvpn サーバー (openVZ、Debian7)
Opevpn クライアント (Raspberry Pi 2、Raspbian Jessie)。
他の VPN クライアントを使用して他のクライアントの背後にあるローカル ネットワークにアクセスすると、すべて正常に動作します (クライアント 1 VPN <> サーバー VPN <> クライアント 2 VPN)。クライアント 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 送信元アドレスを含むこのパケットを受信すると、tun0 ではなく WAN インターフェイスを使用して自動的に応答します。
誰か助けてくれませんか? サーバーの iptables で何を設定すればよいですか?
PS: サーバーのファイアウォールには iptables ルールが 1 つだけあります:
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source PUBLICIP