포트 포워딩 예시

사설 네트워크에 여러개의 서버가 있고, 그 중 하나의 서버에만 공인 IP가 있는 상황입니다. 외부에서 공인 IP를 통해 사설 네트워크 안의 서버에 접근하고 싶을 때, 포트 포워딩을 이용할 수 있습니다.

공인 IP가 있는 서버를 P1, 사설 네트워크 내부의 서버를 S1, S2라고 하겠습니다.

iptables로 아래와 같이 하면, P1의 1022 포트로 접근하면, S1의 22번 포트로 연결됩니다. S1의 주소가 10.1.1.3 입니다.

iptables -A PREROUTING -i ens3 -p tcp -m tcp --dport 1022 -j DNAT --to-destination 10.1.1.3:22
iptables -A PREROUTING -p tcp -m tcp --dport 1022 -j DNAT --to-destination 10.1.1.3:22
iptables -A POSTROUTING -o ens3 -j MASQUERADE
iptables -A FORWARD -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --dport 1022 -j ACCEPT

저는 이렇게 설정파일을 만들어 쓰고 있습니다.
==== ==== ==== ====

root@w001 # cat /etc/iptables.rules
# Generated by iptables-save v1.6.0 on Sat Jul 14 15:18:13 2018
*nat
:PREROUTING ACCEPT [33:4792]
:INPUT ACCEPT [33:4792]
:OUTPUT ACCEPT [13:3996]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i ens3 -p tcp -m tcp --dport 1022 -j DNAT --to-destination 10.1.1.3:22
-A PREROUTING -i ens3 -p tcp -m tcp --dport 1022 -j DNAT --to-destination 10.1.1.3:22
-A PREROUTING -i ens3 -p tcp -m tcp --dport 1022 -j DNAT --to-destination 10.1.1.3:22
-A PREROUTING -p tcp -m tcp --dport 1022 -j DNAT --to-destination 10.1.1.3:22
-A PREROUTING -p tcp -m tcp --dport 1022 -j DNAT --to-destination 10.1.1.3:22
-A PREROUTING -p tcp -m tcp --dport 15900 -j DNAT --to-destination 10.1.1.3:59000
-A POSTROUTING -o ens3 -j MASQUERADE
COMMIT
# Completed on Sat Jul 14 15:18:13 2018
# Generated by iptables-save v1.6.0 on Sat Jul 14 15:18:13 2018
*filter
:INPUT ACCEPT [538:51319]
:FORWARD ACCEPT [320:109251]
:OUTPUT ACCEPT [454:58003]
-A FORWARD -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 1022 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 15900 -j ACCEPT
COMMIT