Я не могу получить доступ к устройствам в локальной сети за клиентом OpenVPN, используя публичный IP-адрес VPN-сервера.
Немного информации:
OpenVPN-сервер (openVZ, Debian7)
Клиент Opevpn (raspberry pi 2 raspbian jessie).
Все работает отлично, когда я использую другой vpn-клиент для доступа к локальной сети за другим клиентом (клиент 1 VPN <> сервер VPN <> клиент 2 VPN). С клиента 2 у меня есть доступ к локальной сети за клиентом 1 VPN. В настройках сервера я настраиваю iroute и т. д.
Проблема возникает, когда я пытаюсь получить доступ, например, к IP-камере в локальной сети за клиентом 1, используя публичный IP-адрес VPN-сервера.
На стороне клиента установлено:
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 — это IP-адрес Raspberry Pi 2 в VPN.
Я использовал tcpdump, чтобы посмотреть, почему это не работает.
Причина в том, что пакеты от VPN-сервера имеют публичный IP в исходном адресе. Когда vpn-клиент получает этот пакет с публичным IP-адресом источника, автоматически отвечает, используя интерфейс WAN, а не tun0.
Кто-нибудь может мне помочь? Что мне нужно сделать, чтобы настроить iptables на сервере?
PS: В брандмауэре на сервере у меня только одно правило iptables:
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source PUBLICIP