![VPN ネットワークの代わりに tun0 インターフェイス上の OpenVPN パブリック IP](https://rvso.com/image/76431/VPN%20%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%20tun0%20%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%82%A4%E3%82%B9%E4%B8%8A%E3%81%AE%20OpenVPN%20%E3%83%91%E3%83%96%E3%83%AA%E3%83%83%E3%82%AF%20IP.png)
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