강상민 (lnx2000@kebi.com)/자유기고가
|
이 글은 Linux IP Masquerade HOWTO v1.65를 기준으로 작성되었다. 많은 부분을 원문에서 인용하였지만 원문에는 없는 실제로 필요한 부분들을 첨가하여 만들었다. 의문나는 점이 있으면 다음 웹 페이지를 참고 하기 바란다.
IP Masquerade란? IP Masquerade는 리눅스에서 지원하는 네트워킹의
한 기능이다. 요즘같이 IP가 고갈되어 가는 시대에 활용가치가 높은
네트워킹 기법이라 할 수 있겠다. 공식 IP주소를 가지고 있는 하나의 리눅스 호스트가
PPP 또는 이더넷을 통해 인터넷에 연결되어 있다면, 이 리눅스와
연결되어 있는 다른 컴퓨터도 공식적으로 할당된 IP 주소 없이 인터넷에
접속할 수 있다. 이 기능은 많은 상업적 방화벽 또는 네트워크 라우터에서
지원하지만 리눅스에서는 커널 컴파일 및 몇 가지 설정을 통해 쉽게
구현할 수 있다. ♣참고 Masquerade란 영어사전에서 찾아보면 '가면'이라는 뜻을 가지고 있다. 자신은 실제 192.168.0.2란 내부 네트워크 주소를 가지지만 인터넷에 접속할 때는 IP Masquerade 가 구현된 리눅스 호스트의 공식 IP를 이용해 자신은 그 안에 숨어서 접속한다는 뜻이 포함되어 있다.
IP Masquerade의 작동 원리 다음 그림을 보자. 위 그림에서 Masquerade가 구현된 Linux #1은
SLIP 또는 PPP를 사용하는 모뎀1을 통해 인터넷에 연결되어 있다.
이 리눅스에는 210.94.74.177이라는 공식적으로 할당된 IP가 있다.
또한 이 리눅스는 모뎀 2를 통해 내부의 다른 컴퓨터와 연결되어
있으며 여기에는 192.168.0.1이라는 내부 IP를 임의로 할당해 놓았다.
한 리눅스 호스트에 공식 IP인 210.9.74.177과 내부 네트워크 주소인
192.168.0.1 2개가 할당되어 있다. 컴퓨터 #1은 모뎀 3을 통해 리눅스
#1에 접속한 뒤 모뎀 1을 이용해 210.94.74.177이라는 IP를 가지고
인터넷에 접속을 하게 된다. ♣참고 : 컴퓨터 #1은 리눅스를 게이트웨이로 설정해 놓아야 한다. 외부에서 보면 컴퓨터 #1에서 나오는 모든 패킷이 오로지 리눅스 #1에서 나오는 것으로 인식한다. 그리고 원하는 자료를 보내줄 때도 리눅스 #1로 보내면 리눅스 #1이 알아서 컴퓨터 #1로 전달해 준다. 전형적인 예제는 다음 그림과 같다. 요즘은 고속 인터넷 서비스가 발달되어 있어
IP Masquerade가 빛을 발하고 있다. 위의 그림은 세 대의 컴퓨터가
LAN으로 연결되어 있고 리눅스 호스트에는 두 개의 랜카드에 각각
210.94.74.177이라는 IP와 192.168.0.1이라는 네트워크 주소가 할당되어
있다. Masquerade-gate 리눅스 컴퓨터는 인터넷에 연결되기
위한 내부 네트워크 내 모든 컴퓨터(A, B, C 박스)의 IP Masquerade
게이트웨이이다. 내부 네트워크 주소는 이러한 경우에 사용하기
위해 RFC-1918에서 할당한 사적 내부 네트워크 주소를 사용하는데
C 클래스의 경우는 192.168.0.0이다. 리눅스 박스는 192.168.0.1이라는
TCP/IP 주소를 가지고 다른 컴퓨터도 각각 할당받는다.(위의 경우
192.168.0.2-4) A, B, C box는 TCP/IP를 사용할 수 있는 모든 운영체제에서 운용 가능하다. Masquerade 시스템은 모든 내부에 연결된 컴퓨터들을 담당하며 그것들이 외부로 나갈 때 자신이 나가는 것처럼 행동한다. 그리고 데이터가 외부에서 들어오면 적절한 곳으로 보내기 위해 준비한다. 이렇게 Masquerade가 알아서 처리해 주므로 내부 네트워크는 인터넷에 직접 연결할 수 있고 그들의 데이터가 Masquerade 되었는지도 모른다. 이것을 ‘투명(transparent) 연결’이라고 한다.
이더넷 카드 인식시키기 자 이제부터 실전에 돌입하자. IP Masquerade가
대강 어떤 것이고 언제 유용한 것인지 개념만 파악하고 하나하나
직접 설정해 보자. 위 그림에서 보면 IP Masquerade가 운용될 리눅스는
두 개의 인터페이스가 설정되어야 한다. 하나는 내부 네트워크와
연결할 인터페이스이고 다른 하나는 인터넷에 연결되어 있는 인터페이스이다.
앞에서도 약간 언급하였지만 PPP로 인터넷에 접속을 하면서 IP Masquerade
기능을 구현하고자 하는 사람은 드물 것이다. 당연한 얘기지만 IP
Masquerade 기능을 이용하는 컴퓨터가 많으면 많을수록 리눅스 서버에
걸리는 부하는 이루 말할 수 없다. 따라서 어느 정도 인터넷 접속
환경 면이나 서버 자체의 하드웨어 환경이 확보되어야 하다. 여기서는
두 개의 인터페이스가 모두 Ethernet이라고 가정한다. 하나는 외부
전용선과 연결된 것이고(eth0), 나머지는 내부 네트워크와 연결된
것이다(eth1). 1. 커널 내부에 이더넷 드라이버를 포함시키는 경우 우리는 기본적으로 이더넷 카드의 기본주소 및 IRQ를 알고 있어야 한다. 옛날 제품인 경우에는 직접 카드 상에서 설정을 해주어야 하지만 요즘 나오는 제품들은 소프트웨어적으로 설정이 가능하다. 설치 디스켓을 집어 넣고 셋업을 시키는 것만으로 카드의 환경설정을 변경할 수가 있다. 우리는 다음 두 이더넷 카드의 환경설정을 전제로 이야기한다. eth0 : io=0x300 irq=10 (외부 접속) 커널에 내장시키기 위해서는 커널 컴파일시 커널에
포함이 되어야 한다. 다음 장에 나올 커널 컴파일시 옵션에서 이더넷
카드도 컴파일에 포함시키는 것을 잊지 말자. 첫째로 LILO에 입력하여 인식시키는 방법이다. eth0는 부팅시 인식이 되고 eth1이 인식이 안될 경우에 다음과 같이 입력함으로써 알려준다. LILO : linux ether=12,0x320,eth1 ♣참고 : ether= 다음에 띄어쓰기를 하면 안된다. 두 번째는 /etc/lilo.conf라는 리로 설정화일에 한줄을 추가해 주다. append=”ether=12,0x320,eth1” 필자는 후자를 권하고 싶다. 매번 부팅시 마다
입력한다는 자체에 무리가 있으며 매번 정확하게 입력한다는 보장도
없지 않는가? 또 두 번째 방법에서 초보자가 많이 하는 실수 가운데
하나인 lilo.conf 파일의 설정 변경후 ‘lilo’를 실행해서 그 변경사항을
통보해주는 것을 잊지 말기를... ♣참고 : 혹시 부팅시 확인 못하면 dmesg라는 명령을 이용 NE*000 ethercard probe at 0x300 : 00 00
c0 05 02 ae 부팅 후에 각 이더넷 카드별로 네트워크 설정을 잡아주어야 한다. ifconfig lo 127.0.0.1 ‘netstat -rn’ 명령어로 라우팅 테이블을 확인해 본다. 라이팅 테이블에서 기본 게이트웨이 주소가 올바르게 설정되었는지 점검한다. 2. 모듈로 사용하는 경우 모듈로 사용할 경우에도 위의 경우와 마찬가지로 커널 컴파일시 빠트려서는 안된다. 모듈로 사용하는 경우에는 insmod 또는 modprobe 명령으로 직접 모듈을 적재시키거나, kerneld 데몬을 이용해 이더넷 장치를 사용하고자 할 경우 자동적으로 적재되게 설정해 준다. 수동적으로 설정할 경우 다음과 같이 실행해 준다. modprobe ne io=0x320 irq=12
IP Masquerade에 필요한 사항들 이제 이더넷 카드가 2개 다 인식 되면 다음을 준비하자. 순서대로 따라하기만 하면 되니까 겁먹지 말고 차근차근 이해하면서 실습해 보자. 우선 다음 사항을 준비한다. 1. 커널 버전 2.0.x의 경우 커널 2.0.x 소스 (http://www.kemel.org/) 2. 커널 버전 2.2.x의 경우 커널 2.2.x 소스 여기서 모든게 다 준비된 것은 아니다. 이제 남은 것은 커널 컴파일 및 약간의 설정뿐인데 리눅스에서 커널 컴파일을 못하면 한계를 벗어 날 수가 없다. 다음 장에서는 커널 컴파일에 대한 기본 지식이 있다는 전제하에 진행된다. 자신이 없는 사람은 순서대로 따라하기만 해도 좋지만 자신의 실력 향상을 위해 kernel HOWTO를 다시 한번 읽어보기를...
IP Masquerade 셋업하기 만약 구축하고자 하는 네트워크에 귀중한 정보가
있다면 보안의 측면에서 한번 고려해 봐야 한다. IP Masquerade가
인터넷에 연결시키기 위한 게이트웨이가 되는 동시에, 이 게이트웨이를
통해 인터넷상에 있는 누군가가 우리의 내부 네트워크로 접근이
가능해 진다. 1. IP Masquerade 지원을 위한 커널 컴파일 당신의 리눅스 배포판이 다음과 같이 컴파일을 지원하기 위한 요소를 구비하고 있다면 IPFWADM/IPCHAINS 그리고 Masquerade관련 모듈들이 모두 컴파일 되었다면 커널을 재 컴파일 시키지 않아도 된다. 그렇지 않으면 아래의 내용에 따라 컴파일을 시켜야 한다. 2. 리눅스 커널 2.0.x ♣참고 : 여기서부터 필요한 내용은 Kernel-HOWTO를 참고로 한다. 이 부분은 커널 컴파일보다 IP Masquerade 구현에 목적이 있는 만큼, 커널 컴파일 부분은 필요한 부분만 기술한다. 우선 컴파일할 커널 소스를 준비한다.(커널 버전 2.0.36 또는 그 이상) 커널 소스를 /usr/src/ 디렉토리에 다음과 같은 명령어로 설치한다. tar xvzf linux-2.0.x.tar.gz -C /usr/src 압축이 모두 풀리면 /usr/src/ 디렉토리에 linux라는 심볼릭 링크된 디렉토리가 존재하는지 확인한다. 존재하면 제대로 링크되어 있는지 확인하고, 없으면 다음 명령어로 만들어 준다. ln -s /usr/src/linux-2.0.x /usr/src/linux 커널 컴파일을 실시한다. cd /usr/src/linux 다음은 커널 컴파일시 IP Masquerade 구현을 위해 최소한 포함되어야 할 항목들이다. 질문에 Yes와 No를 명확히 표시해 준다. Prompt for development and/or incomplete
code/drivers 사용자는 자신의 컴퓨터 환경에 따라 여러 가지 일반적인 사항들을 추가로 설정해 주어야 한다.(예를 들어 자신의 이더넷 카드 설정 등) make dep ; make clean ; make zImage 커널 컴파일이 완료되면 다음과 같이 명령어를 입력해 IP Masquerade 모듈도 컴파일해 준다. make modules ; make modules_install 커널 컴파일과 모듈 컴파일이 모두 완료되면 /etc/rc.d/rc.local이라는 파일에 다음과 같이 몇 줄을 추가해, 매번 부팅시 마다 자동으로 모듈이 적재되어 IP Masquerade가 실행되게 해 준다. 자신이 IP Masquerade를 필요에 따라 실행할 경우에는 아래 몇 줄을 추가해 줄 필요가 없다. ...... 3. Linux 2.2.x Kernels 리눅스 커널 2.2.x도 위에서 설명한 내용과 동일하다. 우선 앞서 설명한 방법대로 커널을 설치하고 linux라는 심볼릭 링크 파일이 제대로 링크되어 있는지 확인하고 없으면 만들어 준다. tar xvzf linux-2.2.x.tar.gz -C /usr/src 커널 2.2.x에서도 위에서 설정한 것과 같이 컴파일시 포함되어야할 최소한의 옵션이 있다. Prompt for development and/or incomplete
마찬가지로 커널 컴파일 및 모듈 컴파일을 실행하고 /etc/rc.d/rc.local에 다음을 삽입해 부팅시 마다 자동으로 IP Masquerade 모듈을 적재하고 실행되게 설정해 준다. make dep ; make clean ; make bzImage
사적 네트워크에 IP 주소 할당하기 내부 내트워크에 존재하는 모든 컴퓨터들은 정식으로 할당된 인터넷 주소가 없기 때문에, 인터넷상에 연결된 다른 컴퓨터와 서로 충돌을 일으키지 않는 특별한 주소를 각 컴퓨터마다 할당해야 한다. RFC 1918에는 이런 경우(인터넷에 연결이 안되어 있거나 개인 네트워크인 경우에 사용)에 사용할 3구역으로 구분된 IP가 명시되어 있다. Section 3: Private Address Space 10.0.0.0 ∼ 10.255.255.255
A 클래스 만약 C 클래스의 주소를 사용한다면 사용자는 192.168.0.1 ∼ 192.168.0.x 사이의 주소를 각 컴퓨터마다 할당해 준다. 여기서 주의할 점이 있다. 192.168.0.1은 일반적으로 내부 게이트웨이나 또는 외부 네트워크로 나가기 위한 Masquerade가 구현된 리눅스 머신에 할당해 준다. 또한 192.168.0.0은 네트워크 주소이고, 192.168.0.255는 브로드캐스트 주소로 사용되므로 내부 컴퓨터 IP 할당시 제외 해야 한다.
IP Forwarding 정책 설정 모든 네트워크 IP 주소, 게이트웨이 및 DNS 주소를 리눅스 Masquerade 서버에 설정해 주어야 한다. 이제 남은 일은 적절한 머신에 적절한 패킷을 FORWARD와 Masquerade 하기 위해 IP firewalling 도구들을 설정하는 것이다. 여기에는 많은 다른 방법들이 있지만 다음은 원문에서 추천하는 방법이다. 1. Linux 2.0.x Kernels 다음 사항을 포함하는 /etc/rc.d/rc/firewall
파일을 생성한다. # rc.firewall - IPFWADM을 사용하는 커널
2.0.x를 # 주의 : 필요한 IP Masquerade 기능만 적재 # 최초 모듈 적재를 위해 사용 # PORT method를 사용하는 FTP 파일 전송
지원 # RealAudio Masquerading 지원 (UDP) # IRC DCC 파일 전송 Masquerading 지원 # Quake and QuakeWorld 지원 # 사용하려면 두 번째 예제를 사용 # VDO-live video conferencing software
지원 # 중요 : 레드햇 사용자는 기본값이 아래와
같이 되어 있으므로 IP forwarding이 # Dynamic IP users: # Masquerade 설정 자동 해제 # 단순히 IP forwarding과 Masquerading
지원 # DHCP : ADSL 또는 케이블 모뎀 사용자들처럼
DHCP 또는 BOOTP를 통해 외부 IP 주소를 받는사람들은 다음
사항을 거절 명령 이전에 사용할 필요가 있다. DHCP/BOOTP 서버가
할당할 주소와연결된 것의 이름은 “bootp_client_net_if_name”로
바뀌어야 한다. 이것은 아마 “eth0”, “eth1” 같은 것이다. 위 예제 파일은 단순한 보기일 뿐이다. 위 예제를
바탕으로 각 사용자는 자신의 환경 설정에 맞게 수정을 해야 한다.
(예를 들어 IP 주소를 바꾼다든지 아니면 주석을 해제한다든지) chmod 700 /etc/rc.d/rc.firewall 참고로 rc.firewall 파일을 위와 같이 전체 네트워크를 대상으로 적용할 수도 있지만 몇 개로 국한지어 사용할 수도 있다. 예를 들어 192.168.0.2와 192.168.0.8 호스트만이 인터넷에 접근할 수 있고 나머지 호스트들은 불허할 경우 다음과 같이 수정한다. ipfwadm -F -p deny ipfwadm -F -p deny ※ 주의 : ‘ipfwadm -F -p Masquerade’를 첫 줄에 쓰지 말라. 그렇게 하면 라우팅 테이블을 조정할 수 있는 누군가가 당신의 게이트 웨이를 뚫고 힘들게 구축해 놓은 IP Masquerade를 자신의 것인양 사용할 수 있다. 2. Linux 2.2.x Kernels 커널 버전 2.1.x와 2.2.x에서 IPFWADM은 더 이상
IP Masquerade 기능 구현을 위한 방화벽 도구가 아니다. 이제 새
커널들은 IPCHAINS를 사용한다. #!/bin/sh # 주의 : 필요한 IP Masquerade 기능만 적재 # 최초 모듈 적재를 위해 사용 # PORT method를 사용하는 FTP 파일 전송
지원 # RealAudio Masquerading 지원 (UDP) # IRC DCC 파일 전송 Masquerading 지원 # Quake and QuakeWorld 지원 # CuSeeme video conferencing software
지원 # 중요 : 레드햇 사용자는 기본값이 아래와
같이 되어 있으므로 # Dynamic IP users: # Masquerade 설정 자동 해제 # 단순히 IP forwarding과 Masquerading
지원 ipchains -P forward DENY # DHCP : ADSL 또는 케이블 모뎀 사용자들처럼 커널 2.1.x 또는 2.2.x.도 마찬가지로 일부분을 수정한 뒤 접근 권한을 변경해 준다. chomd 700 /etc/rc.d/rc.firewall 또 위에서 설명한 것처럼 몇몇 호스트에게만 적용하기 위해서 다음사항으로 수정 사용할 수 있다. ipchains -P forward deny
Microsoft Windows 95 환경 설정하기 이제부터 Masquerade가 적재된 리눅스 머신에 연결될 각 컴퓨터를 설정할 차례이다. 여기서는 가장 일반적으로 쓰이는 Windows95를 중심으로 설명한다. 자신의 운영체제가 이에 해당되지 않는 사람은 해당 사이트로 이동해서 설정부분만 확인해 본다. ① ‘시작 - 설정 - 제어판’을 실행한다. ping 192.168.0. 이 후 도스 명령창에서 응답을 볼 수 없으면
네트워크 상태를 다시 점검해 본다. ♣참고 : C:\Windows 디렉토리에 hosts.sam이라는 예제 파일이 들어 있다.
IP Masquerade 테스트하기 여기까지 부지런히 쫓아온 사람들은 결실을 거두게
되었다. 모든 사항을 이해하면서 실습에 임하고 있는 사람은 진정
리눅스 정신 ‘Do it yourself’에 입각한 리눅서라고 볼 수 있다. 모든 설정을 마친 리눅스가 재부팅이 안되었다면 다시 재부팅을 한번 해줌으로써 여러 가지 설정과 /etc/rc.d/rc.firewall 파일을 실행시켜준다. 다음으로 내부 네트워크가 정상적으로 작동하고 있는지 확인을 해본다. 물론 ping 명령을 사용해서 확인해 보면 된다. 자 이제 모든 것이 준비되었으면 다음 사항을 실행한다. ① 리눅스 호스트에서 다른 내부 네트워크에 있는 컴퓨터에 ping을 실시해 TCP/IP가 올바르게 작동중인지 확인해 본다. ping 192.168.0.2 ② 리눅스 호스트 자체에서 Masquerade가 구현된 네트워크로 ping을 실시해본다. ♣참고 : 이 글 초반에 우리는 eth1을 내부 네트워크 인터페이스로 설정해 두었다. ping 192.168.0.1 ③ 네트워크에 속한 한 호스트에서 리눅스에게 ping을 해본다. (eth1으로 실시한다) ping 192.168.0.1 ④ 역시 이 호스트에서 리눅스의 공식 IP 주소로 ping을 해본다. (eth0으로 실시한다) ping 210.94.74.177 여기까지에서 에러가 발생한다면 다음 사항을 점검해 본다. · ifconfig : 인터넷 연결이 활성화 되어 있고 인터넷 접속을 위해 올바른 IP 주소를 가지고 있는지 확인해 본다. · netstat -rn : 기본 게이트웨이가 올바르게 설정되어 있는지 확인해 본다. · cat /proc/sys/net/ipv4/ip_forward : 만약 1이라고 값이 나오면 리눅스 forwarding이 올바르게 실행 중이다. · /sbin/ipfwadm -F -l(커널 2.0.x 사용자) ⑤ 자 이제까지 내부 점검을 마치고 실제 외부의 세계로 실행해 보자. 리눅스 문서화 프로젝트(LDP)의 홈페이지로 ping을 실행해 보자 ping 152.19.254.81 만약 이것까지 올바르게 실행된다면 당신이 구현한 IP Masquerade 기능이 올바르게 작동중이라는 것이다. ⑥ 역시 외부로 텔넷을 실행해 본다. telnet 152.2.254.81 만약 로그인 메시지를 확인하면 TCP Masquerading ⑦ 이번에는 텔넷을 호스트이름으로 실행해 본다. telnet www.metalab.unc.edu 만약 이것도 올바르게 작동한다면 DNS가 올바르게 작동 중이다. ⑧ 마지막으로 웹 브라우저를 실행시키고 WWW 사이트에 접속할 수 있는지 확인하라. 예를 들어 http://www.metalab.unc.edu에 접속을 해서 홈페이지 화면을 볼 수가 있다면 이제 모든 것이 완료되었다. 축하한다. 이제 모든 것이 잘 작동된다. WWW 사이트가 올바르게 나타난다면 ping, telnet, ssh와 같은 것들도 모두 올바르게 작동된다. 여기에는 리눅스를 운용하는데 모든 기본적인 사항이 포함되어 있다. 커널 컴파일에서부터 네트워킹 분야까지. 여기에 나와있는 내용을 충분히 소화해 낸다면 자신은 어느 정도 탄탄한 기본실력은 가지고 있다고 봐도 좋다. |