
나는 3개의 장치를 가지고 있습니다:
- Network1에 연결된 서버
- Network2에 연결된 노트북
- Network2에도 연결된 Raspberry Pi
Network1에는 openVPN 서버도 있으며 VPN 액세스를 위한 포트 전달도 있습니다.
랩톱에서 TCP 요청(서버용)을 수신하고 VPN을 통해 서버로 보낸 다음 서버에서 랩톱으로 응답을 다시 보내려면 Raspi가 필요합니다. 하나의 포트만 사용되지만 모든 포트가 전달되어도 괜찮습니다. 노트북에는 소프트웨어를 설치할 수 없습니다. 또한 노트북에는 명령 등이 없는 것이 좋습니다.
일종의 "포트 전달"이 필요하지만 VPN으로
답변1
문자 그대로 동일한 "포트 전달", 즉 라우터(RasPi의) 방화벽에서 DNAT 규칙을 사용합니다. 네트워크 유형에 관계없이 동일한 방식으로 작동합니다.
즉, DNAT
필요한 각 "포트 전달"에 대해 RasPi 방화벽에 iptables 또는 nftables 규칙을 추가합니다. ('전달 허용' 규칙도 추가하는 것을 잊지 마십시오. 이는 대부분의 라우터에서 자동이지만 일반 iptables 또는 nftables에서는 자동이 아닙니다.)
서버에는 VPN 연결을 통해 Network2로 돌아가는 경로가 있어야 합니다(OpenVPN에서는 구성을 의미할 가능성이 높음 iroute
). 설정하기 어려운 경우 대안은 RasPi가 DNAT 작업도 수행하도록 SNAT
하거나 MASQUERADE
추가로 수행하는 것입니다. (SNAT/MASQ 옵션은 LAN의 "NAT 헤어핀"과 정확히 동일한 종류의 구성입니다.)
nftable의 예:
table inet filter { chain forward { type filter hook forward priority filter; ip daddr <ServerIP> accept } } table ip nat { chain prerouting { type nat hook prerouting priority dstnat; iifname "eth0" ip daddr <RasPiIP> tcp dport 80 \ dnat to <ServerIP>:80 } chain postrouting { type nat hook postrouting priority srcnat; oifname "tun0" masquerade } }
iptables의 예:
-t filter -I FORWARD -d <ServerIP> -j ACCEPT -t nat -I PREROUTING -i eth0 -d <RasPiIP> -p tcp --dport 80 \ -j DNAT --to-destination <ServerIP>:80 -t nat -I POSTROUTING -o tun0 -j MASQUERADE
대안: RasPi에서 "역방향 프록시"를 사용하십시오. 대부분의 역방향 프록시는 HTTP/HTTPS용이지만 모든 TCP 또는 TLS 프로토콜을 프록시할 수 있습니다. 이는 UDP에서는 작동하지 않으며(적어도 쉽지는 않음) 추가 소프트웨어가 필요하지만 라우팅 요구 사항이 더 적습니다.
HTTP/HTTPS 서비스의 경우 Nginx 또는 Apache httpd가 일반적인 선택입니다. 다른 곳에 널리 문서화되어 있습니다. (둘 다 옵션을 "proxy_pass" 또는 "ProxyPass"라고 합니다.)