
공용 IP를 사용하여 VPS에서 openvpn 서버를 실행하고 있습니다. VPN에 연결된 백엔드 서버가 있습니다. VPN의 IP는 다음과 같습니다. VPS: 10.8.0.1 백엔드 서버: 10.8.0.2. eth0은 공용 인터페이스이고 tun0은 VPN 인터페이스입니다.
이제 예를 들어 백엔드 서버의 포트 22를 VPS의 포트 2200으로 전달하고 싶습니다. 다음은 VPS에서 수행한 작업입니다(여러 튜토리얼과 이미 질문한 내용을 기반으로 함).
- 포트 2200을 열었습니다.
- 활성화된 IPv4 전달
이것을 /etc/ufw/before.rules에 넣으십시오(예, 저는 ufw를 사용하고 있으며 올바르게 작동합니다):
*낫
:라우팅 사전 승인 [0:0]
:포스트라우팅 수락 [0:0]
-A 사전 라우팅 -i eth0 -p tcp --dport 2200 -j DNAT --대상 10.8.0.2:22
-A 포스트라우팅 -d 10.8.0.2 -p tcp --dport 22 -j SNAT --소스 VPS-public-IP:2200
-A 포스트라우팅 -s 10.8.0.0/24 -o eth0 -j 마스커레이드
ufw를 다시 로드하거나 모든 것을 재부팅했습니다...
위의 첫 번째 POSTROUTING 규칙과 같은 일부 줄을 주석 처리하여 다른 솔루션을 시도했습니다. 아무것도 -분명히- 도움이 되지 않았습니다.
출력에 nmap VPS-public-IP -p 2200
포트가 '필터링'되어 있으며 포트 2200으로 ssh를 시도하면 중단되고 아무 작업도 수행되지 않습니다. 오류도 발생하지 않습니다. 이는 VPS에서 백엔드 서버로 ssh를 시도할 때도 발생합니다. VPN을 통해(일반적으로 작동함) 내가 무엇을 놓치고 있나요?
답변1
아직도 해결책을 찾고 있는 사람들을 위해.
FORWARD 정책에 따라(DROP 가정)
iptables -t nat -A PREROUTING -p tcp -d xx.xx.xxx.xxx --dport 80
-j DNAT --to-destination yyy.yyy.yy.yy:80
iptables -A FORWARD -p tcp -d yyy.yyy.yy.yy --dport 80 -j ACCEPT
Result: x:80 --> X --y:80--> Y
iptables -t nat -A POSTROUTING -p tcp -d yyy.yyy.yy.yy --dport 80
-j SNAT --to-source xx.xx.xxx.xxx
Result: x:80 --> X <--y:80--> Y
iptables -A FORWARD -p tcp -s yyy.yyy.yy.yy --sport 80 -j ACCEPT
Result: x:80 <--> X <--y:80--> Y
또한 로컬로 시작된 연결에 대해 다음 규칙을 추가할 수도 있습니다: x --> x:80
iptables -t nat -A OUTPUT -p tcp --dport 80 -d xx.xx.xxx.xxx
-j DNAT --to-destination yyy.yyy.yy.yy:80
Result:
x:80 ->- X <--y:80--> Y
|_____V