ip-masquerading(2)

IP Masquerade

리눅스코리아 기술지원부

1. IP Masquerade란?

IP가 부족하다.

작은 사무실에 있는 여러대의 컴퓨터에서 PPP를 사용하거나 기업에서 웹호스팅 서비스를

받는다던지 또는 요즘 각광받고 있는 SOHO(Small Office Home Office) 환경에서 네트워크을

사용하고자 하는 사용자에게 하나의 IP는 여러대의 컴퓨터를 사용하기에는 네트워킹의

제약사항으로 다가올 수 밖에 없다.

또 앞으로 네트워크의 속도는 엄청난 속도로 빨라질것이며 현재 나와있는 솔루션만도

ADSL, ISDN, 케이블 모뎀등 여러 고속 네트워크 라인들이 있다.

그리고 보안과 속도 등 여러 가지 이유로 내부 네트워크과 외부 네트워크을 분리하여

사용할 때에도 IP에 대한 문제가 발생한다. 그리고 현재 IP주소 고갈의 문제로 C

Class 하나를 할당받기도 힘든 실정에 있으며, 아예 할당했던 IP를 회수하는 경우도

있다. 물론 이에 대한 대안이 있긴 하지만 당장 해결되지는 않는다.

리눅스에서 제공하는 IP Masquerade를 사용하면 공식적인 IP 주소를

할당받지 못한 컴퓨터에서도 여러 가지 네트워크 애플리케이션을 사용할 수 있는데

이것은 리눅스의 커널에서 지원하는 기능이며 계속해서 보완.수정되어가고 있다.

또한 많은 사용자들이 IP Masquerade를 사용하고 있으며 여러 가지 애플리케이션

사용에 대한 보고가 속속들이 보고되고 있다.

Windows 95나 Windows NT에서도 Wingate 라던가 기타 상용프로그램을

이용하면 이와 비슷하게 사용할 수 있지만 리눅스에서 제공하는 기능은 더 강력하면서도

Wingate 등의 상용에 비해서 아무런 추가 비용없이 사용이 가능하다는 장점이 있다.

리눅스에는 이더넷카드(또는 모뎀)가 장착되어 있고 이 카드를

통하여 국내의 모 ISP(Internet Service Provider:인터넷 서비스 제공업체)에 연결이

되어 있다고 가정하자. 이때

리눅스, 윈도1, 윈도2은 각각 이더넷카드(흔히 랜카드라고 부른다)가 장착되어서

UTP로 연결되어 있다.

위에서 사용한 IP 주소인 192.168.x.x는 내부에서만 사용이 가능하도록

할당된 C Class의 IP이므로 이것은 여러분의 취향에 따라서 적절히 선택하면 된다(내부

아이피는 부록을 참조하자).
위의 그림에서 알 수 있듯이 윈도 기계에서 인터넷을

사용하기 위해서는 리눅스를 거쳐야만 가능한데 일반적인 경우를 보자.

윈도에서 하이텔(home.hitel.net)로 telnet을 사용하여 연결하고자

한다면 윈도용 telnet 클라이언트로 리눅스(linux.test.com)에 있는 계정으로 접속한

후에 리눅스에 내장된 telnet을 사용하여 외부에 있는 호스트인 하이텔로 접속하여야만

한다. 또 요즘 인터넷의 대명사로 불리우는 Web의 경우 넷스케이프나 IE같은 웹브라우저를

사용하는데 윈도 기계에서 웹브라우저를 직접 사용할 방법이 없다. 이때에는 위와

같이 리눅스 박스로 접속한 후에 lynx등의 텍스트 브라우저를 사용해야만 하는데

이는 불편하기 짝이 없는 방법이다. 이해를 돕기 위하여 다음 그림을 보자.

 
 
win1.test.com  ==========> linux.test.com ==========> Hitel
 
            텔넷접속               텔넷접속
 
 

그림 2. 일반적인 경우.

하지만 리눅스에서 제공하는 IP Masquerade를 이용하면 윈도 기계에서

바로 인터넷에 연결된 호스트들을 접근할 수 있다. 위에서 본 그림 2와 같은 경우에서도

윈도에서 직접 하이텔에 접속할 수 있는데 이때는 윈도 기계에서 바로 telnet home.hitel.net이라고

타이핑 하면 접속이 가능하다. 또한 Netscape이나 Arena 등의 웹브라우저를 사용하여

인터넷 여행을 할 수 있다. 아래의 그림을 보자.

 
 
          linux.test.com
 
win1.test.com  ==========================> Hitel
 
           텔넷접속
 
 

그림 3. IP-Masquerade를 사용한 경우

위의 그림과 같이 윈도에서 인터넷으로 바로 연결이 되어 윈도

기계에 설치된 랜플래이가 가능한 게임이나 인터넷 폰 또는 여러가지 네트워크 애플리케이션들을

사용할 수 있는데 이것이 바로 우리가 사용하고자 하는 IP Masquerade인 것이다.

2. 요구사항

하나 이상의 동적/고정 IP 주소를 가진 리눅스박스와 여기에 랜으로

연결된 여러가지 OS 기계들이 필요하다. 여기에서 리눅스의 커널 버전은 2.0.X 이상의

버전이어야 하며 ipfwadm 이라는 유틸리티의 2.3이상 버전이 필요하다. 다시 말하자면

최근의 리눅스 배포본과 ISP와의 연결(모뎀이나 랜, ISDN 등) 그리고 윈도95정도면

충분한 환경이다. 이것은 리눅스를 사용하는 일반유저에게 특별한 사양을 요구하는것이

아니다.

3. 리눅스의 설정

만약 레드햇 5.0을 사용한다면 /etc/sysconfig/network 파일에

있는 FORWARD_IPV4=no라는 부분을 FORWARD_IPV4=yes라고 수정하여야 한다.

먼저 커널을 컴파일 하도록 하자. (대부분의 경우에는 할 필요가 없으나, 특별한

용도로 아래의 내용을 바꾸었다면 컴파일을 해야한다) 커널컴파일에 관한 내용은

여기에서는 다루지 않으므로 커널컴파일 관련부분을 참조하기 바란다.

컴파일을 할때 다른부분은 일반적인 경우와 다름 없으며 make config에서 아래와

같은 질문에 모두다 Yes로 답해주기만 하면 된다. 가능하다면 X-window에서 make

xconfig으로 설정하고 설정사항을 저장해 두면 다시 컴파일할 때 간편하다.

enable loadable module support [Y]

networking support [Y]

network firewalls [Y]

tcp/ip networking [Y]

ip forwarding/gatewaying [Y]

ip firewalling [Y]

ip masquerading(EXPERIMENTAL) [Y]

ip always defragment [Y]

dummy net driver support [Y]

ipautofw masquerade support [Y]

커널 컴파일 부분을 참고해서 차례대로 컴파일을 한다. 커널

컴파일을 마치고 난 다음 모듈을 컴파일, 설치한다.

make modules; make modules_install

depmod -a

modprobe ip_masq_ftp

modprobe ip_masq_raudio

modprobe ip_masq_irc
.
.
.

위에서 추가로 사용하고자 하는 애플리케이션의 모듈은 여러분들이

적절히 알아서 추가하면 된다. 예를 들어서 cuseeme를 사용하고자 한다면 modprobe

ip_masq_cuseeme 라고 추가한다. 사용할 수 있는 애플리케이션에 대해 잠시 알아보자면

ftp, real audio, vdolive, quake, irc, CU-Seeme 등이 있는데 이는 /usr/src/linux/modules에서

확인해 볼 수 있다.

이제 커널 컴파일 부분은 모두 끝났다. 다음으로는 리눅스에 연결되어

있는 다른 클라이언트들을 인식하기 위해서 /etc/hosts를 다음과 같이 수정하도록

하자.

linuxkorea:/etc]# cat hosts

127.0.0.1 localhost localhost.localdomain

192.168.0.1 linux.test.com linux

192.168.0.10 win1.test.com win1

192.168.0.20 win2.test.com win2

linuxkorea:/etc]#

127.0.0.1은 로컬호스트로 자기자신을 가르킨다는 사실은

모두 알고 있을 것이다. 그 아래에는 자신이 사용하고자 하는 호스트를 모두 적어주면

된다. 세 번째 칼럼에 오는 것은 alias로 풀호스트네임 대신에 자신이 원하는 별명을

줄 수 있다. 만약 여러분이 하이텔을 자주 사용하며 하이텔 IP를 네임서버에서 참조하는

것이 아니라 hosts파일에서 참조하고 싶다면 다음과 같이 추가해 줄수도 있다.

203.245.15.250 home.hitel.net hitel

그 다음부터는 일일이 telnet home.hitel.net 이라고 할필요가

없고 telnet hitel 만으로도 연결이 가능하다.

이것으로 리눅스쪽에서 설정해 주어야 할 것에 대해서 알아보았고

윈도쪽에 대해서 알아보도록 하자.

4. 윈도쪽의 세팅

윈도에서는 특별히 설정해줄 것이 없다. 먼저 네트워크을 사용하기

위해서 TCP/IP Protocol을 설치하고 리눅스를 통해서 외부로 나간다는 것을 알려준다.

그러면 아래의 설명과 그림을 보고 하나 하나 설정해보도록 하자.

4.1. 바탕화면의 네트워크환경에서 마우스 오른쪽 버튼을 눌러서 “등록정보”를

선택하던지 또는 제어판에 있는 네트워크를 선택한다..

4.2. 설치된 네트워크 구성요소에서 TCP/IP프로토콜이 설치되어

있는지를 확인한 후에 없다면 “추가”-“프로토콜”-“추가”-“Microsoft”-“TCP/IP”를

눌러서 추가한다.

4.3. TCP/IP를 추가한 후에 더블클릭하여 등록정보창을 연다.

4.4. IP주소 탭에서 할당된 IP주소사용을 체크하고 IP주소와 서브네트

마스크를 적어 준다. IP주소는 리눅스에서 설정한 대로 적어주면 된다. 위의 /etc/hosts에

적어준 192.168.0.10을 그리고 서브네트 마스크는 C class인 255.255.255.0을 적는다.

4.5. 게이트웨이 탭을 선택하여 리눅스박스의 IP를 적어준다.

리눅스 박스는 192.168.0.1이므로 이를 적어주고 “추가”를 누른다.

4.6. 확인을 두번 눌러서 다시 부팅한다.

4.7. 도스창을 열고 다음과 같이 입력해보자

ping 192.168.0.1

위에서 192.168.0.1은 리눅스의 IP 주소이며 리눅스와 정상적으로

통신을 하는지 점검한다. ms단위로 응답이 있으면 정상적으로 랜이 작동하는것이나

아무런 응답이 없다면 하드웨어적으로나 소프트웨어적으로 잘못된 부분이 있으니

다시한번 확인하기 바란다.

5. Now! IP-Masquerading

이제 리눅스와 윈도기계의 세팅은 모두 끝이났다. 그러면 다시

리눅스 박스로 돌아오자. ipfwadm 2.3이상 버전을 사용하여 아래와 같이 명령을 내려보자.

linuxkorea:~]# ipfwadm -F -p deny

linuxkorea:~]# ipfwadm -F -a m -S 192.168.0.10/32 -D 0.0.0.0/0

linuxkorea:~]# ipfwadm -F -a m -S 192.168.0.20/32 -D 0.0.0.0/0

linuxkorea:~]#

위에서 ipfwadm은 IP Firewall Adminastration 이라는 파이어월

관장 프로그램이며 -S는 출발지(source) -D는 목적지(destination)를 뜻하고 -S 다음에는

윈도 클라이언트의 IP 주소를 적어주면 된다. -F는 ip forward를 뜻하며 ipfwadm에

대한 좀더 자세한 사항은 관련문서를 참조하기 바란다. IP뒤에 따라오는 32는 서브네트

마스크이며 여기에서 32는 point to point를 뜻하며 각각 클라이언트들을 제어할

수 있다. 만약, C class에 연결된 모든 클라이언트를 제어하고자 한다면 24를 적어주면

된다. 당연히 더 알기쉽게 나타내기 위해서는 255.255.255.0이라고 적어주어도 무방하다.(이에대해서는

마지막 부분의 표를 참조)

이제 두 컴퓨터중에서 192.168.0.20이 네트워크을 사용하지 못하도록 해제시켜보자.

linuxkorea:~]# ipfwadm -F -d m -S 192.168.0.20/32

-D 0.0.0.0/0

위에서 32대신에 24를 적어주면 연결된 두대가 동시에 해제된다

그러면 정상적으로 세팅이 되었는지 확인하기 위하여 리눅스에서 ISP로 PPP연결한

다음 윈도에서 도스창을 열어 다음과 같이 입력해보자.

telnet home.hitel.net

텔넷창이 열리고 하이텔로 접속이 성공하였다면 모든 것이

정상적으로 된 것이다.

만약에 하이텔로 연결 되지 않는다면 다른곳으로 연결을 시도해보고 그래도 에러가

발생하면 위의 과정을 다시 한번 반복해서 점검해보자.

윈도쪽에서 사용가능한 ftp, telnet 클라이언트를 사용하여 접속을 원하는 호스트로

접속을 한 후에 다음과 같이 해보자.

ipfwadm -Ml (예)

prot expire source destination ports

tcp 14:59.99 win1.test.com telnet.chollian.net 1100 (61071) -> telnet

이것은 현재 윈도에서 사용하는 상황을 보여주는 명령이다.

이제 우리가 원하던 인터넷을 마음껏 사용할 수 있게 되었다. 텔넷의 경우에는

이야기나 새롬데이타맨 등을 이용하여 바로 원하는 호스트로의 연결이 가능하며 Netscape,

Internet exploror등의 웹브라우저도 사용할 수 있다.

물론 ftp도 문제없이 잘 사용할 수가 있다. ws_ftp를 사용할 때에는 혹시 연결이

되고난 후에 에러가 발생하면서 연결이 거부되는 경우에는 아래 그림에서 나타난

바와 같이 passive transpers를 선택하면 아무런 문제없이 사용할 수가 있다.

ws_ftp에서의 예제

하지만 모든 윈도용 애플리케이션을 100% 다 사용할 수 있는 것은

아니다. 네트워크 플레이가 가능한 게임이나 인터넷폰, 넷미팅 등 여러 가지 애플리케이션은

정상적으로 작동하지 않는다. 그렇다고 해서 전혀 방법이 없는 것은 아니다. 전세계

리눅서들은 불가능을 그냥 보아 넘기지 않기 때문이다. 많은 리눅서들이 이를 가능하게

하기 위하여 여러 가지 어플리케이션 사용방법에 대한 보고를 하고 있다. 그러면

어떻게 사용이 가능한지 그 방법과 또 사용가능한 여러 가지 애플리케이션들에 대해서

알아보기로 하자.

IP-Masquerade 관련 웹사이트.

http://www.hwy401.com

http://www.wiznet.ca/~ambrose

http://ipmasq.home.ml.org

http://www.indyramp.com/masq

http://dijon.nais.com/~nevo/masq

내부에서 사용할 수 있도록 정의된 IP 주소

범위

    

        

        

        

        

    

    

        

        

        

        

    

    

        

        

        

        

    

    

        

        

        

        

    

class

IP 주소

Subnet Mask

Block

A

10.0.0.0 ~ 10.255.255.255

255.0.0.0

16

B

172.16.0.0 ~ 172.31.255.255

255.255.0.0

20

C

192.168.0.0 ~ 192.168.255.255

255.255.255.0

24

일반적으로 잘 작동하는 클라이언트

    

        

    

HTTP           POP             SMTP            

Telnet         FTP             Archie

NNTP           VRML            traceroute

IRC            Gopher          Real Audio

CU-SeeMe

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.