1. port forwarding 을 왜 필요로 하게 되었는가?
포트 포워딩(port forwarding)이 왜 필요하게 되었는지를 설명하는게 좋겠다. 아래 설명은 리눅스 초보자를 위해 자세히 썼으므로 리눅스에서 IP masquerade를 설정하여 사용하는 사람들은 다음 2 번으로 건너가도 된다.
필자가 관리하는 네트워크 중 한 곳이 한국통신의 co-lan을 통해 인터넷을 사용하고 있다. co-lan은 VDM(Voice Data Multiplexer) 이란 장비를 사용하여 라우터를 사용 않고 피시의 시리얼포트에 직접 연결하므로 호스트 접속이다. 즉 IP 주소(공인)는 한 개만 나온다.
co-lan이 연결된 피시에는 리눅스를 깔아 IP Masq를 설정하였으므로 리눅스와 랜으로 연결한 윈95 피시는 내부 어드레스(192.168.1.X)를 부여해 리눅스의 IP 주소를 공유해 인터넷을 사용한다.
그리고 이 리눅스 호스트는 윈95의 파일서버, 프린터서버 등으로 사용되며 486이다. 그 외에 telnet, ftp 서버, DNS 서버로도 사용되고 있다. 웹서버는 설치되어 있지 않다.
연결은 아래와 같다.
이런 설정은 요즘 흔히 사용되므로 리눅스에서 IP masquerade만 알면 설치가 가능하다. 케이블모뎀이나 ADSL로 인터넷을 연결한 경우도 이런 형태로 구성해 여러 대의 피시에서 동시에 인터넷 사용이 가능하다.
그런데 이 네트워크에 웹서버를 설치할 필요가 발생했다. 필자가 아는 업체서 전자상거래 프로그램 개발을 필자에게 의뢰했는데 개발용 서버를 이 네트워크에 설치하기로 했다. 개발에는 여러 사람이 참여하는데 집에서 인터넷을 통해 이 서버로 접속해 개발을 진행하기로 했다.
전자상거래 개발에는 MySQL 및 PHP 등이 사용되고 접속도 많으므로 펜티엄급을 필요로 하는데 기존의 리눅스 서버는 486 급이다. IP는 한 개 밖에 없으므로 전자상거래용 웹서버를 펜티엄 피시에 설치하려면 기존의 486을 없애고 새로운 펜티엄 피시로 대치 후 기존의 486에서 사용되던 각종 데이터 및 서버 프로그램을 펜티엄 피시에 다시 설치해야 했다. 이 정도라면 별로 시간이 걸리지는 않지만 다른 문제가 발생한다.
펜티엄 피시는 개발용이므로 외부에서 다른 사람들이 수시로 root 권한으로 들어오는데 여기에 다른 데이터를 넣는 건 보안에 문제가 발생한다.
또 개발용이므로 여러 파일들을 수시로 설치 및 제거하므로 서버가 다운될 가능성도 있다. 그러면 그 네트워크의 전체 인터넷 사용이 중단된다. 개발이 끝나면 그 서버는 의뢰인에게 돌려 주어야 하므로 그때 또 데이터를 원래의 486으로 옮겨야 하는 문제도 있다.
결론은 서버를 한 대 더 설치하여 서비스 종류(즉 포트 번호)에 따라 다른 서버로 연결되도록 하는 기능이 필요하다. 여기서는 인터넷에서 웹(포트 80)과 telnet(포트 23), ftp(포트 20, 21) 서비스 요청이 들어오면 펜티엄 피시에서, 그리고 메일이나 DNS 등 기타는 기존의 486에서 서비스하도록 설정해야 한다. 단 ip 즉 도메인네임(정확히는 FQDN)은 같아야 한다.
2. port forwarding 의 원리
필요한 이유가 설명되었으니 아래는 port forwarding의 작동 원리를 간단한 그림으로 보자.
IP Masquerade 가 클라이언트 쪽에서의 IP 공유라면 port forwarding은 서버에서의 IP 공유이다.
리눅스A(486 피시)에 port forwarding을 구현한다면 네트워크는 아래와 같다.
기본적인 구성은 위의 경우와 같다. 단지 내부 네트워크에(192.168.1.X) 리눅스 서버를 한대 더 추가해 내부 주소(192.168.1.11)를 부여한다. 이 서버는 내부 어드레스를 갖고 있으므로 인터넷에서 직접 연결할 수 없다.
그러나 위의 리눅스 A에 port forwarding 기능을 부여하면 인터넷에 연결된 피시의 웹브라우저에서 http://168.126.127.6 으로 연결하면 192.168.1.11 내부 주소를 갖는 리눅스 B의 웹서버로 연결된다.
이유는 간단하다. http 연결은 80번 포트를 사용하므로(별도의 지정이 없을 경우) 리눅스 A의 port forwar ding 프로그램이 인터넷에서 80번 포트로 연결 요청이 들어오면 그 패킷을 내부 주소를 갖는 리눅스 B(192.168.1.11)의 80번 포트로 방향을 바꾸어 주는 것이다.
이 원리를 적용하면 telnet 은 192.168.13 번 서버로 ftp는 192.168.1.15번 서버로 등등 서비스별로 다른 내부 주소를 갖는 서버가 응답하게 할 수 있다. 한 대의 서버를 사용할 경우보다 시스템의 부하를 분산할 수 있는 이점이 있다.
또 내부 서버의 포트 번호는 임의로 지정이 가능하다. 내부 서버에서 아파치 웹서버를 가동할 때 꼭 80번으로 할 필요는 없다. 아파치의 실행 포트 번호를 80번 외의 다른 번호로 httpd.conf에서 지정하고 port forwarding 설정에서 그 포트를 지정해 주면 된다. 외부 사용자는 여전히 웹브라우저에서 80번으로 연결하면 되므로 포트 변경 사실을 알 필요도 없다.
(인터넷에서 http://192.168.1.11 명령은 사용할 수 없다는 것을 알아야 한다. 192.168.1.101 주소를 갖는 윈95에서만 가능하다. 그 이유를 알지 못한다면 이 글이 별 소용이 없다.)
주의] 포트포워딩을 리눅스 A(168.126.127.6)에 설치했다 하더라도 내부 랜(192.168.1.0)
에서는 port forwarding이 작동하지 않는다.
즉 내부 랜에 연결된 윈95 피시 (192.168.1.101) 에서 http://168.126.127.6 명령을
해도 192.168.1.11에 설치된 웹서버가 응답하지 않는다. 내부 랜에서는
http://192.168.1.11 로 연결해야 한다. 이는 port forwading의 한계라기 보다 tcp/ip
네트워킹에서 이러한 라우팅을 허용하지 않기 때문이다.
따라서 port forwarding 작동 여부를 확인하려면 인터넷의 다른 호스트에서 168.126.127.6 호스트로 연결해야 한다.
앞으로 아래 글에서 포워딩서버는 포트포워딩 코드가 설치되는 서버(그림 2에서 리눅스 A)를 말하고 리시빙서버는 실제로 인터넷 서비스를 제공하는 내부랜에 설치된 서버(그림 2에서 리눅스 B)를 말한다.
3. 포트 포워딩 활용
3.1 방화벽
요즘 웹서버 보안이 중요한 문제로 대두되고 있는바 가장 설치가 간편한 웹서버 보안 대책으로 포트포워딩을 사용할 수 있다.
리시빙 서버에 웹서버(apache)를 올려주고 포워딩서버의 포워딩 설정에 웹(http)만 리시빙 서버로 연결하고 telnet, ftp, mail 등 다른 모든 서비스는 포워딩서버나 다른 서버로 지정하든가, 또는 차단하면 웹서버로의 접근은 웹 자체를 제외한 다른 방법으로는 거의 불가능할 것이다. 즉 해킹에 필요한 웹서버의 정보를 알아내기가 힘들기 때문이다.
왜냐하면 다른 모든 서비스는 포워딩서버에서 응답하므로 웹서버는 외부에 전혀 노출이 안된다. 비록 포워딩서버로 해킹에 성공해도 다시 웹서버로 접근하려면 웹서버의 보안망을 돌파해야 한다.
3.2 게이트웨이
요즘 랜카드는 100메가가 일반화되고 있지만 라우터는 아직 10메가를 사용하고 있다. 그래서 라우터와 웹서버(리눅스) 및 클라이언트(윈9x)를 같은 랜에 설치해 10메가로 연결하면 인터넷에서 서버로의 접근은 랜의 트래픽이 많으면 상당히 지체된다.
자세히 설명하겠다.
리눅스에 웹서버가 설치되어 있고 랜은 이더넷을 사용한다고 가정한다. 인터넷과 연결된 라우터도 같은 랜에 있다고 가정한다
예를들어 윈95피시에서 웹서버나 윈98 피시로 큰 파일을 전송한다면 인터넷에서 웹서버로의 접근은 상당한 지체가 발생할 것이다. 이더넷의 원리를 안다면 그 이유를 짐작할 것이다. 랜에 피시가 많이 연결돼 있고 상호간에 데이터 전송이 빈번하다면 이로 인해 인터넷에서 웹서버로의 연결은 상당한 장애를 받는다.
웹서버가 속도를 중시하는 전자상거래나 실시간으로 연결하는 예약 시스템 등으로 사용된다면 이러한 지체도 별로 바람직하지 못하다. 이걸 해결하는 방법은 3 가지 정도 존재한다.
첫 번 방법은 랜 구조를 변경해 사내의 랜에서의 트래픽과 인터넷에서 웹서버로의 트래픽이 충돌하지 않도록 랜을 두 개로 분리하는 것이다. 가장 좋은 방법은 브리지를 사용해 랜을 두 개로 분리하는 것이다.(라우터로도 가능하나 복잡하다. 성능은 브리지가 낫다.)
두 번째 방법은 스위칭허브를 사용하는 것인데 위의 브리지와 효과는 비슷하나 돈이 더 많이 든다.
세 번째 방법은 가장 쉽고 간편하다. 즉 랜의 속도를 100메가로 올리는 것이다. 그런데 여기에 한가지 문제가 존재한다. 허브나 랜카드, 케이블은 100메가로 올리는게 쉬우나 라우터가 문제다.
100메가를 지원하는 라우터가 있으나 무척 고가이고 또 우리나라의 ISP 들이 임대해 주는 라우터는 다 10메가 용이다.
이 고민을 포트포위딩이 쉽게 해결해 줄 수 있다. 즉 포워딩서버에 랜카드를 두 개 꼽아 인터넷과 연결된 라우터 쪽은 10메가로 하고 웹서버가 연결된 내부 랜은 100메가로 하면 된다. 즉 포워딩서버가 10메가 100메가 게이트웨이 구실을 하는 것이다.
인터넷에서 웹서버로 연결할 때는 라우터에서 리눅스 까지는 10메가로 연결되나 라우터와 리눅스를 연결하는 랜에는 다른 피시가 전혀 없으므로 아무런 지체가 발생하지 않는다. 내부 랜에는 여러 피시가 연결되어 있지만 속도가 100메가 이므로 지체는 훨씬 줄어들 것이다.
3.3 시스템 부하 분산
한 대의 서버에 한 개의 도메인네임(정확히는 FQDN, 예를들면 www.linuxlab.co.kr)을 부여해 웹, 메일, telnet. ftp 등 여러 서비스를 다 제공하는 경우 사용이 너무 많아 서버의 용량이 부족하면 그 기계를 버리고 새로운 기계로 대치해야 한다.
만약 최고급 사양의 피시로 대체해도 감당할 수 없다면 그 때는 워크스테이션급으로 교체해야 하는데 비용도 문제지만 기존의 데이터나 소프트웨어를 새로운 기계로 옮기는게 만만치 않은 비용과 시간을 요한다.
여기에 포트포워딩을 이용하면 한 대의 서버가 담당하던 서비스를 여러 대로 분산할 수 있다. 한 대는 웹서버, 다른 한 대는 메일 및 bbs(telnet) 서버, 또 다른 한 대는 ftp 서버 등 등이다.
서비스 종류에 따라 여러 대의 기계로 분산할 수 있어 기존 서버를 교체하지 않고도 간편히 성능을 수 배로 늘릴 수 있다. 워크스테이션을 필요로 하는 용량을 피시 몇대로 가능케 해주는 좋은 해결책이다.
4. port forwarding 설치 절차
port forwarding은 ip masquerade와 관련이 있다. 실제 구현에는 IP masq 코드를 상당 부분 그대로 사용한다. 단지 그 반대의 기능을 수행해 줄 따름이다. 따라서 port forwarding을 설치하려면 우선 ip masq를 설치할 줄 알아야 한다.
우선 간략한 절차를 설명하고 다음에 각 절차별로 상세히 설명한다. 모든 셋업은 공인 IP 주소를 갖는 게이트웨이 서버(위의 그림에서 리눅스 A)에서 이루어 지고 서비스를 제공하는 내부 랜의 서버(리눅스 B)는 서버 프로그램만 올려주면 된다.
1) 커널 소스 설치
커널 소스는 꼭 필요치는 않다. 그러나 ipmasqadm 패키지를 소스를 받아 컴파일해서 설치하고자 한다면 커널 소스가 /usr/src/linux에 설치돼 있어야 한다. 또 커널 내에 IP masq와 port forwarding 코드를 넣어 컴파일할 경우도 필요하다.
2) ipchains 패키지 설치
ip masquerading에 필요하다. 모든 배포본이 리눅스 설치시 기본으로 이 패키지를 설치하므로 별도의 설치 절차가 필요 없다. port forwarding 을 구현하려면 우선 ip masq가 먼저 작동 되야 한다.
혹시 설치되지 않았으면 레드햇의 경우 CD에서 rpm -i 명령으로 설치한다.
3) ipmasqadm 설치
port forwarding에 필요한 패키지다. 아직 시험용이지만 필자가 사용해 본 결론은 당장 사용해도 별 문제가 없다. 소스를 받아 설치할 수도 있고 배포본 CD에 있는 것을 설치할 수도 있다. CD에는 들어 있으나(레드햇의 경우 ipmasqadm-0.4.2-3.i386.rpm) 설치에는 빠져 있을 수 있다.
4) 커널 컴파일
커널 컴파일도 필수는 아니다. ipmasquerade 와 port forwarding 코드를 모듈로 올려 주어도 된다. 커널 코드에 내장하는 경우와 모듈로 올리는 경우 장단점이 있다. 그러나 자주 사용하는 기능이라면 커널코드에 포함시켜 컴파일 하는게 좋다.
5) port forwarding 구현
port forwarding 을 해 주는 서버(리눅스 A)에 ipmasq uerading, port forwarding, 네트워크 파일 설정 과정이다.
6) 내부 서버 셋업
내부에 설치되는 서버(리눅스 B) 즉 실제로 외부에서 연결이 되는 서버의 셋업 이다. 특별한 패키지는 필요 없다. 네트워크 설정에서 디폴트게이트웨이를 port forwarding을 해주는 서버의 이더넷카드 ip 주소(192.168.1.1)로 지정해주면 된다. 그러나 이 서버가 웹서버로 사용된다면 웹서버를 올려주어야 하고 telnet, ftp 를 제공해 준다면 telnet, ftp 연결이 가능하도록 설정 되야 한다. 위의 그림의 윈95 피시에서 192.168.1.11 주소로 웹, telnet, ftp 연결이 되면 셋업에 문제가 없다. 이 부분은 별도의 설명을 않는다.
5. port forwarding 설치 실제 예
필자가 port forwarding을 실제로 설치한 사례를 여기에 상세히 설명한다.
여기서는 2 대의 서버를 갖는 네트워크를 구성했다. 포워딩서버(port forwarding 이 설치되는 서버)는 데비안(2.1 R2), 리시빙 서버는 수세 (6.3)을 사용했고 웹(http)과 telnet, ftp만 리시빙서버로 포워딩하는 설정이다.
위에 말한 것처럼 모든 설치는 데비안에서 이루어 진다. 수세에서의 네트워크 설정은 설명하지 않는다.
5.1 커널 소스 설치
커널소스는 ipmasqadm 패키지를 직접 컴파일해서 설치하는 경우와 ip masquerade 및 ip port forwarding 코드를 모듈로 올리지 않고 커널코드에 포함시킬 때 필요하다.
그러나 ipmasqadm 패키지는 레드햇(6.1)의 경우 CD에 있으므로 rpm으로 설치하면 되고 masquerade 및 port forwarding 코드는 모듈로 만들어져 있으므로 modprobe 명령으로 추가 시켜 주면 된다.
필자는 데비안 2.1 R2 버전을 사용하고 있으므로 커널을 최신 커널인 2.2.14 로 바꾸면서 커널을 새로 컴파일해 커널 내에 masquerade 및 port forwarding 코드를 넣었다. ipmasqadm 패키지도 소스를 받아 컴파일해 만들었다.
커널 소스를 새로 설치하는 방법은 아래와 같다.(2.2.14 버전을 기준으로 한다)
(커널 컴파일 방법은 여러가지가 가능하나 여기서는 가장 일반적인 방법만 설명한다)
1) 웹브라우저에서 ftp://ftp.kernel.org/pub/linux/kernel/v2.2/를 실행해서
linux-2.2.13.tar.gz 파일을 받는다.
2) 이 파일을 /usr/src 디렉토리에 넣는다.
3) 이미 다른 버전의 커널 소스가 설치되어 있을 수 있으므로 아래 명령으로 기존의
커널 소스를 제거한다.
cd /usr/src
rm -rf linux
4) 커널 소스 압축을 푼다.
tar zxvf linux-2.2.14.tar.gz
5) 필요한 링크를 해 준다.
cd /usr/include
rm -rf asm linux scsi
ln -s /usr/src/linux/include/asm-i386 asm
ln -s /usr/src/linux/include/linux linux
ln -s /usr/src/linux/include/scsi scsi
아래처럼 나와야 한다
hansol!root:/usr/src$ cd /usr/include/
hansol!root:/usr/include$ ls -l asm linux scsi
lrwxrwxrwx 1 root root 32 Feb 5 13:09 asm -> /usr/src/linux/include/asm-i386/
lrwxrwxrwx 1 root root 29 Feb 5 13:09 linux -> /usr/src/linux/include/linux/
lrwxrwxrwx 1 root root 27 Feb 5 13:09 scsi -> /usr/src/linux/include/scsi
6) cd /usr/src/linux
7) make menuconfig
커널에 ip masquerade와 ip port fortforwarding 코드를 넣어 컴파일하려면 아래 선택에서
yes를 해 준다.(모듈로 올려도 된다)
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
General setup --->
[*] Networking support
Block devices --->
<*> Loopback device support
Networking options --->
[*] Network firewalls
<*> Unix domain sockets
[*] TCP/IP networking
[*] IP: advanced router
[*] IP: firewalling (NEW)
[*] IP: masquerading (NEW)
[*] IP: ICMP masquerading (NEW)
[*] IP: masquerading special modules support (NEW)
<*> IP: ipportfw masq support (EXPERIMENTAL) (NEW)
여기에 나열한 것은 포트포워딩과 직접 관련된 것만 예시했다. 이외에도 랜 및 랜카드 관련 옵션들은 시스템에 맞게 설정해야 한다.
8) make dep
9) make clean
10) make bzImage
컴파일이 실행된다. 피시 기종에 따라 5 ~ 30분이 소요된다.
아래는 커널 모듈을 컴파일 및 설치해 준다.
11) make modules
12) make modules_install
13) 만들어진 커널을 /boot에 넣고 lilo를 실행한다.
5.2 ipchains 패키지 설치
모든 배포본이 기본으로 설치해 주므로 별도의 설치 절차가 필요 없다. 데비안의 경우 /sbin/ipchains 파일이다.
5.3 ipmasqadm 패키지 설치
rpm으로 설치하는게 간편하나 소스를 받아 직접 설치하면 그 안에 각종 문서가 있으므로 자세한 사항을 알 수 있다.
5.3.1 소스 있는 곳
http://juanjox.linuxhq.com에 있다고 하나 찾지를 못해서 sunsite.unc.edu 의 slackware 에서 소스를 가져왔다. 파일명은 ipmasqadm-0.4.2.tar.gz이다.
5.3.2 소스 설치
아무 디렉토리에서 tar zxvf ipmasqadm-0.4.2.tar.gz 명령을 주면 ipmasqadm-0.4.2 디렉토리가 만들어 지며 그 안에 소스 및 도큐먼트 파일이 위치함.
아래는 디렉토리의 내용임
[root]/apps/ipmasqadm-0.4.2$
-rw-r--r-- 1 240 714 801 Nov 26 1998 ChangeLog
-rw-r--r-- 1 240 714 428 Nov 26 1998 Common.mk
-rw-r--r-- 1 240 240 1040 Dec 5 1998 Makefile
drwxr-xr-x 2 240 714 1024 Dec 5 1998 doc
drwxr-xr-x 2 240 714 1024 Nov 17 1998 include
drwxr-xr-x 2 240 714 1024 Dec 5 1998 ipmasqadm
-rw-r--r-- 1 240 240 1055 Dec 5 1998 ipmasqadm-0.4.spec
drwxr-xr-x 2 240 714 1024 Dec 5 1998 lib
drwxr-xr-x 2 240 714 1024 Dec 5 1998 man
drwxr-xr-x 2 240 714 1024 Dec 5 1998 modules
doc 디렉토리에 도큐먼트가 있다.
5.3.3 컴파일 및 관련 파일 설치
*. 컴파일 전에 리눅스 커널 소스가 /usr/src/linux에 있어야 한다.
1) cd ipmasqadm-0.4.2
2) Makefile 을 수정함.
20번 라인의
@test -f $(KSRC)/include/linux/ip_masq.h 라인을
@test -f /usr/src/linux/include/linux/ip_masq.h 으로 수정
3) make
4) make install
관련 파일들이 해당 디렉토리에 설치된다.
실행 파일(ipmasqadm)은 /usr/sbin에 위치함.
5.4 ip masquerade 설정
포트포워딩은 ip masq를 먼저 잡아주어야 한다.
Ip masq를 설정하기 위해 우선 두 개의 모듈을 올려 준다. 필자는 필요한 모든 코드를 커널에 넣었지만 모듈로만 가능한 부분이 있어 아래처럼 데비안의 /etc/rc.boot 디렉토리에 파일을 만들어 넣었다.
데비안의 경우 rc.boot 디렉토리의 스크립트들이 부팅 때 실행하고자 하는 사용자 쉘스크립트를 넣는 곳인데 여기에 나열된 순서대로 실행된다.
1) 모듈 올리기
hansol!root:/etc/rc.boot$ cat 10module
#!/bin/bash
/sbin/depmod -a
/sbin/modprobe ip_masq_ftp.o
ip masq 관련 다른 모듈이 여럿 있으나 필자는 쓰지 않으므로 넣지 않았다.
2) ip forwarding 및 ipchains 실행
데비안은 외부 네트워크 와 내부 네트워크를 연결하는 게이트웨이 구실을 하므로 ip forwarding을 가능케 해야 한다.
레드햇은 /etc/sysconfig/network 파일에서 FORWARD_IPV4=true 로 해주면 된다.
필자는 /etc/rc.boot/20ipchain 파일에 ip forwarding과 ipchains 를 같이 넣었다.
#!/bin/bash
echo “1” > /proc/sys/net/ipv4/ip_forward
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -s 192.168.1.0/24 -j MASQ
3) 포트포워딩 설정
아래는 웹(httpd), telnet, ftp 세가지 서비스를 192.168.1.11 어드레스를 갖는 내부 서버로 포워딩해주는 설정이다.
23은 telnet, 80은 httpd, 20,21은 ftp 에서 사용하는 포트 번호다.
hansol!root:/etc/rc.boot$ cat 30port_forwd
#!/bin/bash
/usr/sbin/ipmasqadm portfw -a -P tcp -L 168.126.127.6 23 -R 192.168.1.11 23
/usr/sbin/ipmasqadm portfw -a -P tcp -L 168.126.127.6 80 -R 192.168.1.11 80
/usr/sbin/ipmasqadm portfw -a -P tcp -L 168.126.127.6 20 -R 192.168.1.11 20
/usr/sbin/ipmasqadm portfw -a -P tcp -L 168.126.127.6 21 -R 192.168.1.11 21
5.5 점검
포트포워딩 설정이 정확한지를 확인하는 절차다.
1) ip masq 설정 점검
netstat -nM 명령을 주면 ip masq 상태를 알 수 있다.
단, 실제로 사용 중이어야 아래 출력이 나온다.
netstat -nM
IP masquerading entries
prot expire source destination ports
udp 4:46.96 192.168.1.105 168.126.63.1 1582 -> 53 (64273)
udp 2:41.26 192.168.1.105 168.126.63.1 1571 -> 53 (64262)
udp 1:46.70 192.168.1.105 168.126.63.1 1567 -> 53 (64258)
udp 0:52.03 192.168.1.105 168.126.63.1 1565 -> 53 (64256)
2) 포트포워딩 점검
hansol!root:~$ ipmasqadm portfw -ln
prot localaddr rediraddr lport rport pcnt pref
TCP 168.126.127.6 192.168.1.11 21 21 10 10
TCP 168.126.127.6 192.168.1.11 20 20 10 10
TCP 168.126.127.6 192.168.1.11 80 80 10 10
TCP 168.126.127.6 192.168.1.11 23 23 10 10
위에서 168.126.127.6은 공인어드레스 (www.linux journal.co.kr)이고 192.168.1.1은 내부어드레스이다.
이제 외부에서 http://www.linuxjournal.co.kr 명령을 주거나 telnet www.linuxjournal.co.kr ftp www.linuxjournal.co.kr 명령을 주면 192.168.1.11 주소를 갖는 서버가 응답을 한다.
그러나 주의할 건 연결하는 측에서 볼 때 연결된 서버의 어드레스는 168.126.127.6 어드레스로 나타난다는 것이다. (당연한 이야기인데 왜 하느냐고요?)
아래는 210.126.21.62 호스트(리눅스)에서 telnet 168.126.127.6 명령을 준 경우 세 호스트의 netstat 출력 내용이다.
1) 210.126.21.62 (연결하는 측)
[root@ppp /root]# netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 210.126.21.62:1044 168.126.127.6:23 ESTABLISHED
2) 168.126.127.6(포워딩서버)
hansol!root:~$ netstat -nM
IP masquerading entries
prot expire source destination ports
tcp 13:34.78 192.168.1.11 210.126.21.62 23 -> 1044 (23)
tcp 10:36.35 192.168.1.101 210.126.21.62 1106 -> 23 (61119)
tcp 13:34.97 192.168.1.101 210.126.21.62 1103 -> 23 (61070)
3) 192.168.1.1(리시빙서버)
joa:~ # netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 126 92.168.1.11:23 210.126.21.62:1044 ESTABLISHED
주의] 포트포워딩을 테스트할 때는 인터넷의 다른 호스트에서 해야 함을 명심할 것
출처 : http://www.linuxlab.co.kr/docs/00-03-1.htm
댓글