IP 마스커레이드(Masquerade)란
쉽게 말해서 NAT 이다. NAT는 뭐냐고 물어보는 사람이 있을 것이다. 네크워크 주소를 변환해주는 기술이다.
예를 들어, 사무실에 총 4 대의 컴퓨터가 있다. 그런데 이 사무실에는 1 개의 공인 IP 만 할당되어 있다. 그렇다면, 어떻게 4대의 컴퓨터 모두 네트워크에 접속 시킬 수 있을까?
바로 이럴때 사용할 수 있는 기술이 IP 마스커레이드(Masquerade) 이다. 3대의 컴퓨터를 허브로 묶고, 1 대의 컴퓨터에 2개의 랜카드를 꽂고, 하나의 랜카드에는 밖으로 나가는 랜선을 연결하고, 나머지 하나는 허브에서 나오는 랜선을 꽂는다.
이렇게 연결만 하면 될까? 아니다. 설정을 해주어야 한다.
들어가기 전에
이 문서에서는 각각 3가지 경우에 대해서 알아볼 것이다.
- 커널 2.2.x 일 때
- 커널 2.4.x 일 때
- 윈도우 2000 일 때
마스커레이드는 방화벽 프로그램인 iptables(커널2.4)를 이용해서 구현할 수 있다. 커널 2.0.x 에서는 ipfwadm , 2.2.x 에서는 ipchains 이 있었다. 기능은 모두 동일하다. 하지만, 커널 버전이 올라가면서, 이름도 바뀌고 기능도 이전에 비해 훨씬 더 강력해졌다. 이제 하나씩 설정해보자!!
커널 2.2.x 일 때
우선 나의 환경은 다음과 같다.
커널 | linux-2.2.16(IP 마스커레이드를 위한 커널설정을 했다고 가정한다) |
랜카드 | eth0 : 203.241.128.94 , eth1 : 192.168.0.1 |
물려있는 컴퓨터 | A(OS : Linux) eth0 : 192.168.0.2 (192.168.0.3, 192.168.0.4,….이런 식으로 나간다) |
이 문서는 위의 사양을 기준으로 작성했다. 마스케이딩 할수 있는 내부 IP주소는 정해져 있는 데 다음과 같다.
10.0.0.0 - 10.255.255.255 |
172.16.0.0 - 172.31.255.255 |
192.168.0.0 - 192.168.255.255 |
우선 위의 커널 버전에서는 ipchain은 사용한다. 이 프로그램이 설치되어 있는지부터 확인하자!!
#rpm -qa|grep ipchain
만일 설치되어 있지 않다면, 리눅스 배포판에서 RPM을 설치하거나, 다운 받아 소스로 설치한다. 역시 여기서도 소스로 설치할 것을 권장한다.
#rpm -ivh ipchainx.x.x.rpm
설치 했다면 /etc/rc.d 디렉토리에 rc.firewall 파일을 만들어 준다. 퍼미션을 700으로 준다.
#touch /etc/rc.d/rc.firewall #chmod 700 /etc/rc.d/rc.firewall #vi /etc/rc.d/rc.firewall
그리고 아래의 내용을 추가 시켜 준다.
/sbin/depmod -a /sbin/modprobe ip_masq_raudio echo "1" > /proc/sys/net/ipv4/ip_forward /sbin/ipchains -M -S 7200 10 160 /sbin/ipchains -P forward DENY /sbin/ipchains -A forward -s 192.168.0.0/24 -j MASQ
그리고 나서 실행시켜 보자!! 만일 에러가 없었다면, A라는 컴퓨터에 가서 ping를 쳐봐서 확인해보자! 외부로 패킷이 전달된다면, 제대로 마스커레이드가 되는 것이다.
여기서 참고로 위의 rc.firewall 파일의 설정은 마스커레이드를 위한 최소한의 설정이다. 그러므로 보안적으로 안전하지 못하다. 보안을 위한 구체적인 설정방법은 다른 관련 서적을 참조하기 바란다.
커널 2.4.x 일 때
2.2 대에서는 ipchain을 사용했지만 2.4 대 에서는 iptables를 사용하기 때문이었다. 2.2 버전에 익숙하던 나에게 iptables 의 설정은 생소했다. 이리저리 문서를 찾아 다녔지만, 결론은 기다리라는 것이었다. iptables 에 대한 문서가 나올때까지 말이다. 그러던 중에 iptables 에 대한 글을 보았다. 글의 내용은 이러했다. 우선 iptables라는 파일을 다운 받아야 한다. 다음의 사이트에서 최신버전을 다운 받는다. 만약 설치되어 있다면, 굳이 설치할 필요는 없다.
다운 받았으면, 압축을 풀고 설치해준다. 여기서 주의할 점은 iptables 프로그램을 일반 다른 프로그램과 같이 설치하면 안된다는 것이다. 반드시 INSTALL 문서를 읽어보기 바란다.
#make KERNEL_DIR=/usr/src/linux-2.4.2 #make install KERNEL_DIR=/usr/src/linux-2.4.2
제대로 설치했다면, /etc/rc.d/init.d 디렉토리에다가 rc.firewall 파일을 만든다. 물론 실행할 수 있게 퍼미션을 700으로 준다.
#touch /etc/rc.d/rc.firewall #chmod 700 /etc/rc.d/rc.firewall #vi /etc/rc.d/rc.firewall
다음과 같이 추가시켜주자!!
/usr/local/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
그리고 패킷 포워딩을 위해서 아래를 설정해주자!
#echo 1>/proc/sys/net/ipv4/ip_forward
그리고 실행 시켜보자!! 에러가 없다면 이제 B와 C 컴퓨터에 가서 ping으로 외부 네트워크로 패킷이 전달되는지 확인해보자!! 만일 제대로 패킷이 전달된다면 마스커레이드가 정상적으로 돌아가고 있는 것이다.
윈도우 2000 일 때
윈도우에서는 비교적 설정이 간단하다. 역시 GUI 의 힘이랄까?
우선 마스커레이드를 하기 위해서는 랜카드가 2개 필요하다(참고로 필자는 리얼텍 8139PCI, 리얼텍 8139ISA 랜카드를 사용했다)
만일 윈도우에서 2개의 랜카드를 모두 잡았다면 '네트워크 환경 → 등록정보' 가면 '로컬 영역 연결' 이라는 아이콘이 두 개 있을 것이다. 여기서 각각의 로컬 영역 연결이라는 아이콘에 네트워크 설정을 해주었다.
로컬 영역 연결(첫번째 랜카드) | 로컬 영역 연결(두번째 랜카드) | 내부 호스트(LINUX) | |
IP | 210.119.108.176 | 192.168.0.1 | 192.168.0.2 |
서브넷 마스크 | 255.2555.255.0 | 255.255.255.0 | 255.255.255.0 |
기본 게이트웨이 | 210.119.108.254 | (적어주지 않는다!!) | 192.168.0.1 |
DNS 서버 주소 | 134.75.122.2 , 134.75.30.1 | 동일하다 | 동일하다 |
마지막으로 가장 중요한 것이 남아있다. 첫 번째 랜카드의 '로컬 영역 연결 → 등록정보 → 공유 탭 → 인터넷 연결 공유 사용 체크' 한다.
그리고 내부에 물려있는 호스트에서 접속해보자!! 필자는 리눅스 호스트에서 테스트했다.
우선 마스커레이드 서버에 ping을 실행시켜 보자!!
#ping 192.168.0.1
제대로 결과가 나온다면 이번에는 밖으로 ping을 때려보자!!
#ping yahoo.co.kr
역시 이번에도 결과가 나온다면 아주 기본적인 마스커레이드는 된다고 봐도 무방하다.