'snat'에 해당되는 글 1건

  1. 2008.09.16 iptables 에서 NAT 사용하기
nat는 snat와 dnat로 나뉘어 진다.
 
snat는 출발지 주소를 변한하며 인터넷 공유기가 대표적이다
아래 그림이 집에서 공유기를 사용해서 ip포워딩을 하는 예이다.
 
대표적인 명령으로는
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -J SNAT --to 211.240.47.128
 
위의 명령은 pc1~pc3이 192.168.10.0/24 네트워크 주소를 쓰고 공유기의 ip주소가 211.240.47.128일때 내부 pc가 dns에 패킷을 보내도록 하기 위해서 사설 아이피 주소를 공인 아이피 주소로 바꾸어주는 것이다.
 
 
 
dnat는 도착지 주소를 변환한다.
아래의 그림이 dnat의 대표격이다..
 
방화벽에서 들어오는 패킷을 분석해서 내부의 어느 컴퓨터에 패킷을 전달할지를 결정한다.
대표적으로 사용하는 명령어는
 
iptables -t nat -A PREROUTING -i eth0 -d 211.240.47.131 -p tcp --dprot 22 -J DNAT --to 192.168.10.1:22
 
위 명령은 pc1이 ssh서비스를 하고 있다고 가정하고 방화벽으로 들어오는 목적지 패킷이 22번인 것을 pc1에 보낸것이다.
 
iptables -t nat -A PREROUTING -i eth0 -d 211.240.47.131 -p tcp --dprot 80 -J DNAT --to 192.168.10.2:80
 
위 명령은 pc2가 웹 서비스를 하고 있다고 가정하고 방화벽에서 pc2로 포워딩 하는 것이다.
 
iptables -t nat -A PREROUTING -i eth0 -d 211.240.47.131 -p tcp --dprot 21 -J DNAT --to 192.168.10.3:21
 
위 명령은 pc3가 ftp 서비스를 한다고 가정하고 방화벽에서 pc3로 포워딩 하는 것이다.


 
인터넷 공유기 설정하기
 
리눅스로 인터넷 공유기를 만드는 예를 보기로하자
우선 vmware로 리눅스 시스템 2개를 운영하고 네트워크 영역은 192.168.1.0이며 vmware에서 192.168.1.254가 인테넷을 공유하는 ip주소라고 하자.
 
다음 그림을 보면서 설명하겠다.

 
 
 
우선 컴퓨터 A는 랜카드가 2개이다. 그런데 실제 물리적 랜카드가 1개 모자르므로 가상 랜카드를
만들었다.
 
이 명령은 #ifconfig 192.168.1.4 eth0:0 up으로 만들 수 있다.
 
만약에 가상의 랜카드를 사용하지 않고 실제의 랜카드를 사용한다면 eth0:0의 케이트 웨이 주소가
eth0의 아이피 주소 192.168.1.2가 되어야한다.
 
컴퓨터 A의 eth0의 게이트웨이는 192.168.1.254인테 이것은 실제로 인터넷을 나갈 수 있는 랜카드의 주소이다.
 
컴퓨터 B는 기본 게이트웨이로 컴퓨터 A의 eth0:0의 아이피 주소이다.
왜냐하면 컴퓨터 B가 패킷을 보낼때 외부로 나가기 위해서 사용하는 문이 eth0:0이기 때문이다.
 
즉 컴퓨터 B에서 데이터를 보내면 컴퓨터 A의 eth0:0을 지나서 eth0을 지나 외부로 나가게 하기 위함이다. 그러나 eth0:0이 실제 랜카드가 아니라 가상의 랜카드이므로 eth0:0에서 eth0으로 패킷이 가도록 게이트웨이를 192.168.1.2로 지정할 수가 없다.
 
위에 처럼 해놓고 각각의 컴퓨터에서 192.168.1.2~4까지 그리고 254까지 ping을 하면은 핑은 해당 목적지까지 도착한다는 것을 알 수 있다.
 
그러나 ping www.daum.net를 하면은 www.daum.net의 아이피 주소가 나타나지 않는다는 것을 알 수 있다. 외부에까지 접근을 하기 위해서는
컴퓨터 A에서
 
#echo "1" > /proc/sys/net/ipv4/ip_forward
 
를 해준다.
 
이것을 해주는 이유는 컴퓨터 B에서 보면은 컴퓨터 A는 자신의 패킷을 외부에 전달해주는 게이트웨이 역할을 한다. 그러므로 컴퓨터 A는 eth0:0에서 받은 패킷을 외부에 전달해줘야 하기 때문에 게이트웨이 역할을 하기 위해서 위와 같은 명령을 하다.
 
그러나 위의 명령은 휘발성이다. 즉 재부팅을 하고 나면은 아무런 쓸모가 없다.
영구적으로 하기 위해서는
 
/etc/sysconfig/network 파일에서
 
FORWARD_IPV4=YES
 
로 바꾸어주기를 바란다.
 
 
iptable명령과 옵션들
 
iptables -t nat -L  방화벽 정책 확인
iptables -t nat -F  방화벽 정책 초기화
iptables -t nat -L --line 방화벽 정책에 줄번호 부여
iptables -t nat -D POSTROUTING 번호
                         PREROUTING 번호    방화벽 정책 지우기
 
iptables를 이용한 여러가지 예.
 
 

 
 
 두대의 컴퓨터가 있고 한쪽은 사설아이피와 공인 아이피, 그리고 나머지 하나는 사설 아이피를 쓴다. 오른쪽 컴퓨터가 외부로 나갈때는 공인 아이피로 바꾸어주고 외부에서 내부로 SSH서비스를 요청할때는 왼쪽 컴퓨터에서 오른쪽 컴퓨터로 포워딩한다.
오른쪽 컴퓨터는 SSH서비스를 실행중이다라고 가정한다.
 
왼쪽 컴퓨터에서 다음과 같이 설정한다.
 
iptables -t nat -A POSTROUTING -s 192.168.101.2 -o eth0 -J SNAT --to 211.240.47.139
 
iptables -t nat -A PREROUTING -i eth0 -d 211.240.47.139 -p tcp --dport 22 -J DNAT --to 192.168.101.2:22
 
 
 
 

 
 
위의 예제는 3대의 컴퓨터가 있고 내부에 웹서버와 ssh서버를 돌리고 왼쪽 컴퓨터에서 방화벽 역할을 하는 내용이다.
 
우선 웹서버 컴퓨터에서
ifconfig eth0 192.168.101.2
route add default gw 192.168.101.1
 
ssh컴퓨터에서
ifconfig eth0 192.168.101.3
route add default gw 192.168.101.1
 
맨 왼쪽 컴퓨터에서는
iptables -t nat POSTROUTING -s 192.168.101.2 -o eth0 -J SNAT --to 211.240.47.139
iptables -t nat -A PREROUTING -i eth0 -d 211.240.47.139 -p tcp --dport 80 -J DNAT 192.168.101.2:80
 
위는 웹서버에 대하여 한 정책이다. 여기에서 웹서버는 snat, dnat 둘다를 적용시킨 이유는 웹서버는 클라이언트의 요청을 받고 또한 응답을 해야하기 때문이다.
 
iptables -t nat -A PREROUTING -i eth0 -d 211.240.47.139 -p tcp --dport 22 -J DNAT 192.168.101.3:22
 
위의 내용은 ssh서버에 접속할 수 있도록 한 정책이다.
 
 
 

 
 
*방화벽에서 해야할 내용
ifconfig eth0:0 192.168.102.1 up
ifconfig eth0:1 192.168.103.1 up
ifconfig eth0 211.240.47.138 netmask 255.255.255.128 up
route add default gw 211.240.47.129
 
iptables -t nat -A POSTROUTING -s 192.168.102.0/24 -o eth0 -J SNAT --to 211.240.47.138
iptables -t nat -A POSTROUTING -s 192.168.103.0/24 -o eth0 -J SNAT --to 211.240.37.138
iptables -t nat -A PREROUTING -i eth0 -d 211.240.47.138 -p tcp --dport 21 -J DNAT --to 192.168.102.3:21
iptables -t nat -A PREROUTING -i eth0 -d 211.240.47.138 -p tcp --dport 80 -J DNAT --to 192.168.102.2:80
 
*아파치 서버에서 해야할 일
ifconfig eth0 192.168.102.2 up
route add default gw 192.168.102.1
 
*ftp 서버에서 해야할 일
ifconfig eth0 192.168.103.2 up
route add default gw 192.168.103.1
 
 
Posted by 두장
이전버튼 1 이전버튼