본문 바로가기

OS

Linux - iptables NAT 포트포워딩 설정법

흔히 공유기를 사용하여 포트포워딩 기능을 사용해 봤을것이다.


필자는 KVM을 사용하여 우분투 환경에서 VM을 구동중인데 호스트서버(VM을 구동하는 서버)를 거치지 않고 바로 VM에 텔넷이나 SSH로 접속하고 싶을 때 리눅스 기본패키지인 iptables의 포트포워딩을 사용한다.


아래와 같은 구조인데, HOST Server에서 포트포워딩기능을 사용하여 서버의 특정 포트로 접속하는 패킷을 VM1으로 포워딩하려 한다.


PC - HOST Server - VM1



HOST ip : 192.168.1.67

VM1 ip : 192.168.122.101


우선 sysctl.conf 파일을 확인하여 ip_forward 항목을 enable 시켜야한다.

vi /etc/sysctl.conf

net.ipv4.ip_forward 항목이 0이면 1로 변경


재부팅하면 적용되지만 바로 적용을 위해 아래 명령 사용.

sysctl -p /etc/sysctl.conf



포트포워딩을 위한 iptalbes 명령은 다음과 같다.


iptables -t nat -A PREROUTING -p TCP --dport 8101 -j DNAT --to-destination 192.168.122.101:23


설명을 하자면

-t nat : 방화벽 설정에서 nat 테이블을 사용

-A PREROUTING : PREROUTING이란 체인으로 규칙을 추가한다. (체인은 규칙의 동작방식정도로 보면 될듯하다.)

-p TCP : 프로토콜 타입을 TCP로 한다.

--dport 8101 : 목적지 포트가 8101

-j DNAT : 목적지를 변경한다? (DNAT와 SNAT가 있는데 이 부분은 정확히 모르겠다.)

--to-destination 192.168.122.101:23   : 목적지를 192.168.122.101의 23 포트로 한다.


정리해보면, 호스트서버에 8101 포트로 들어오는 패킷의 목적지를 192.168.122.101의 23 포트로 변경한다. 라는 의미가 된다.


하지만 위와 같이만 하면 기능이 동작하지 않는다.


filter 테이블에 해당 정보를 허용해주는 구문이 필요하다.


iptables -A FORWARD -p tcp --dport 23 -d 192.168.122.101 -j ACCEPT


192.168.122.101의 23 포트로 포워딩하는걸 허용하겠다. 뭐 이런 의미인듯 하다.



어쨋든 위 두가지 구문을 사용하면 포트포워딩 설정이 완료된다.


PC에서 192.168.1.67:8101로 텔넷을 접속하면 바로 VM1으로 접속이 가능하다.



cf. 설정 정보를 확인하려면 다음 명령을 사용한다.

iptables -L PREROUTING -t nat

iptables -L FORWARD



cf. KVM을 설치한 경우에 iptables에 기본적으로 몇가지 규칙들이 추가되는데 아래의 규칙이 있으면 포트포워딩이 되지 않는다. 아래 사항은 주석처리하자.

#-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
#-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable



cf. 레드헷 계열 리눅스에는 iptables 설정파일이 존재하는데 우분투는 존재하지 않는다.

하지만 iptables 정보를 저장 로드 하는 기능이 존재하므로 설정이 끝나면 파일로 백업 해두고 사용하자.


iptables-save > [파일경로+파일명]

iptables-restore < [파일경로+파일명]

'OS' 카테고리의 다른 글

Linux - ls 명령 초 단위 까지 확인하  (0) 2016.09.01
Ubuntu - KVM 사용법  (0) 2016.09.01
Ubuntu - 패키지 repository 변경  (0) 2016.09.01
Ubuntu - 이전 버전 배포 사이트  (0) 2016.09.01
Ubuntu - IP 설정  (0) 2016.09.01