VPN 서버의 공개 IP를 사용하여 openvpn 클라이언트 뒤에 있는 로컬 네트워크의 장치에 액세스할 수 없습니다.
약간의 정보:
OpenVPN 서버(openVZ, Debian7)
Opevpn 클라이언트(라즈베리 파이 2 raspbian jessie).
다른 VPN 클라이언트를 사용하여 다른 클라이언트 뒤의 로컬 네트워크에 액세스할 때 Everythink는 잘 작동합니다(클라이언트 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에서 무엇을 설정해야 합니까?
추신: 서버의 방화벽에는 iptables 규칙이 하나만 있습니다.
-A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source PUBLICIP