내부 네트워크내에 전용선으로 연결된 서버들을 외부의 특정 서버와 통신을 가능토록 하기 위한 프록시 서버가 필요하여 세팅해보았습니다.
리눅스의 iptables
를 통해 포트포워딩하는 방법에 대해 알아보겠습니다.
iptables
는 패킷 필터링(Packet Filtering)
도구로서 방화벽 구성이나 NAT(Network Address Translation)
에 사용됩니다.
사설망내의 서버(client 지칭)를 프록시 서버를 통해 외부서버(server 지칭)와 통신하도록 하는 것이 목적입니다.
client 에서 데이터를 전송하는 부분과 반대로 server에서 client로 전송하는 부분에 대한 설정을 기록할 것입니다.
먼저 client 에서 server로 데이터를 전송하는 부분입니다.
아래 IP는 내부 및 외부 구분용으로 봐주시면 됩니다. 포트는 원하는 포트로 바꿔서 사용하면 됩니다.
client(1.1.1.1) ➡ 프록시 서버(eth0:2.2.2.2, eth1:192.168.0.2) ➡ server(3.3.3.3:80)
client는 프록시 서버로 데이터 전송.
client(1.1.1.1) ➡ 프록시 서버(192.168.0.2)
프록시 서버에서 목적지 IP를 외부 서버의 IP로 변경(DNAT
), 소스지 IP는 프록시 서버의 외부IP(2.2.2.2)로 변경하여 데이터 전송(SNAT
).
프록시 서버(2.2.2.2) ➡ 외부 서버(3.3.3.3)
위의 1, 2 과정을 iptables 에 적용하면 아래와 같습니다.
# DNAT(LAN ➡ EX)
-A PREROUTING -i eth1 -d 192.168.0.2 -p tcp -m tcp --dport 80 -j DNAT --to-destination 3.3.3.3:80
# SNAT
-A POSTROUTING -s 1.1.1.1 -p tcp -m tcp -j SNAT --to-source 2.2.2.2
✔ 이제 반대로 server에서 client로 데이터 전송시 포워딩할 내용입니다.
외부 서버(3.3.3.3) ➡ 프록시 서버(192.168.0.2) ➡ client(1.1.1.1)
프록시 서버는 목적지 IP를 client IP로 변경하고, 소스지 IP를 자신의 내부IP로 변경합니다.
iptables 설정을 적용하면 아래와 같습니다.
# DNAT
-A PREROUTING -i eth0 -s 3.3.3.3 -p tcp -m tcp -j DNAT --to-destination 1.1.1.1:80
# SNAT
-A POSTROUTING -s 3.3.3.3 -p tcp -m tcp -j SNAT --to-source 192.168.0.2
✔ 마스커레이딩 기능 추가
-A POSTROUTING -o eth0 -s 2.2.2.2 -j MASQUERADE
✔ 추가 내용
PREROUTING ➡ route ➡ FORWARD ➡ POSTROUTING
route add -net 1.1.1.1 netmask 255.255.255.255 gw 192.168.0.1 dev eth1
또 하나 배웠지만 엄청나게 무지한 나를 발견한 순간이였습니다. 공부하자..