[활용특집] 리눅스/윈도우의 PPTP 프로토콜로 VPN 구성하기
 




 VPN을 운영하는 데는 다양한 프로토콜이 있다. 이중 PPTP(Point-to-Point Tunneling Protocol)는 TCP/IP 상에서 안전한 통신을 지원하고 멀티프로토콜 통신을 추가한 새로운 개념의 프로토콜이다. 또한 PPTP를 이용한 통신으로, 리눅스와 윈도우 간의 VPN을 쉽게 구축할 수 있다. 이 글을 통해 리눅스와 윈도우를 이용해 서버 대 서버, 서버 대 클라이언트를 구성하는 방법을 알아본다.



정낙수, 정민, 김규현_국민대학교 OSSRC 소속 개발자

 

VPN 서비스를 이용하는 가장 쉬운 방법은 VPN 장비를 도입하는 것이지만, 그 비용은 접속 노드 2∼3개를 증설할 수 있는 것과 맞먹기 때문에 중소기업은 부담스러운 것이 현실이다. 하지만 중소기업에서 비용 부담없이 VPN을 구축할 수 있는 방법이 있다. 구형 PC와 윈도우, 리눅스를 이용해 VPN을 구축하는 것으로, 여러 가지 장점이 있다.  
윈도우, 리눅스가 모두 소프트웨어이기 때문에 기능 업그레이드를 손쉽게 할 수 있고 다양한 프로토콜의 지원도 가능해진다. 물론 저렴하다는 점 역시 매우 큰 장점이다. 클라이언트 용도로 사용하기 힘든 PC에 윈도우 2000 서버를 이용해 VPN 서버를 구성할 수도 있고, 윈도우 2000 라이센스 비용에 일반 PC 비용 대신 폐기 처분될 PC에 리눅스를 설치해 VPN 서버로 만들 수 있으니 말이다.
또한 세션이 무제한이라는 장점이 있다. 소규모 네트워크를 위한 VPN 장비의 경우 최대 세션과 터널 수에도 제한이 있다. 때문에 일정 수의 사용자 이상은 접속할 수 없다는 단점이 있지만, 공개 소프트웨어나 기본 내장 VPN을 이용한 경우에는 최대 세션 수 제한이 없기 때문에 사용자 수를 확장해 사용할 수 있다. 그러나 소프트웨어로 구현된 장비가 늘 그렇듯이 하드웨어 장비에 비해 속도가 느리다는 단점이 있다. 물론 소프트웨어의 경우 해당 소프트웨어에 대한 정확한 이해가 필요하다는 것도 단점일 수 있다. 어떤 점에 더 비중을 둘 것인가는 네트워크 관리자의 몫이고 가장 적합한 솔루션을 선택하는 것 역시 네트워크 관리자의 몫이므로 여기에서 무엇이 더 좋은가에 대한 의제는 무의미할 것이다.


다양한 VPN 프로토콜을 통한 안전한 통신 확보
구축에 앞서 VPN의 개념을 파악해보자. VPN은 공중 통신망 기반 시설을 터널링 프로토콜과 보안 절차 등을 사용해 개별 기업의 목적에 맞게 구성한 사설 네트워크다. 자체망이나 전용회선의 개념을 인터넷과 같은 공중망을 통해 이용하는 것이다. VPN은 모든 회사들이 저마다 개별적으로 회선을 임대하는 것보다, 공중망을 공유함으로써 비용은 낮추면서도 전용회선과 거의 동등한 서비스를 사용하기 위해 활용된다. 또한 인증, 암호화, 복호화, 라우팅 등의 방식을 통해 데이터를 안전하게 처리할 수 있도록 지원한다.
VPN은 공중망을 통해 데이터를 송신하기 전에 데이터를 암호화하고, 수신측에서 복호화한다. 암호화는 데이터뿐 아니라, 부가적인 차원의 보안으로서 송수신지의 네트워크 어드레스도 포함한다. 또한 최근 모바일 업무가 증가함에 따라 모바일을 사용하는 직원들의 안전한 사내 네트워크 사용을 위해서도 VPN은 사용된다.



(그림 1) VPN을 이용한 LAN to LAN 구성
 


(그림 1)과 같이 3개의 사업장이 있을 때 각각의 사업장은 다른 사업장에 접근하기 위해서는 모든 장비에 공인 IP를 부여해야 한다. 이는 보안상 문제점을 지니며 IP를 확보하는 것 역시 부가 비용이 든다. 하지만 각각의 사업장을 VPN을 통해 터널을 생성하면 3개의 사업장이 하나의 네트워크 세그먼트를 구성하며 이를 통해 내부 IP를 사용하더라도 다른 사업장의 장비에 접근할 수 있다.
둘째, 리모트 액세스(Remote Access) VPN은 재택 근무나 모바일 근무와 같은 단독 사용자 환경에 적합한 구성이다. (그림 2)와 같이 외부의 사용자가 인터넷을 이용해 사업장의 VPN을 통해 터널을 생성하게 되면 모바일 사용자가 회사내의 사용자 혹은 자원에 로컬 네트워크에 속해있는 것과 같이 사업장내의 다른 자원에 접근할 수 있다.



(그림 2) VPN을 이용한 리모트 액세스 구성
 



VPN 솔루션은 마이크로소프트, 3Com 그리고 몇몇 다른 회사들이 PPTP라는 표준 프로토콜을 제안했으며, 시스코는 L2F, L2TP 등의 VPN 솔루션을 제공하고 있다. 최근의 노텔, 넷스크린, 시스코 장비들은 이같은 프로토콜을 모두 지원하고 있으므로, 서로 다른 장비를 이용하더라도 VPN 연결은 매우 손쉽게 구성할 수 있다. 기본적인 구성은 LAN to LAN VPN으로, 지사와 같은 멀티 유저 환경에서 프로토콜을 이용해 가상 네트워크를 만든다. VPN을 구성하는 프로토콜은 다음과 같다.



·IPSec 프로토콜
IPSec(Internet Protocol Security)은 보안을 위해 계획된 프로토콜로, RFC-2411에 정의돼 있다. 이전의 보안 기법들은 보안이 통신 모델의 애플리케이션 계층에 삽입됐다면 IPSec은 본질적으로 데이터 송신자의 인증을 허용하는 인증 헤더 AH와, 송신자의 인증과 데이터 암호화를 함께 지원하는 ESP(Encapsulating Security Payload), 키교환을 위한 IKE 등의 보안 서비스를 제공한다. AH는 MD5 또는 HMAC 알고리즘을 사용해 인증을 처리한다. ESP는 DES, RC5 등의 암호화 알고리즘을 사용해 데이터를 암호화한다. IKE 키관리 절차에서는 ISAKMP/Oakley 프로토콜과 같은 별개의 키 프로토콜들이 선택할 수 있다. 이같은 각 서비스에 관련된 명확한 정보는 IP 패킷 헤더의 뒤를 잇는, 헤더 속의 패킷에 삽입된다. AH가 무결성을 보장한다면 ESP는 보안성을 보장한다. 그리고 IPSec으로 전송시 전송 모드(Transport Mode)와 터널 모드(Tunnel Mode)를 지원한다.


·L2TP 프로토콜
L2TP(Layer 2 Tunneling Protocol)는 L2F 프로토콜을 향상시키기 위해 마이크로소프트의 PPTP와 시스코사의 L2F(Layer 2 Forwarding) 프로토콜이 결합돼 IETF가 산업 표준으로 제정한 터널링 프로토콜이다. 현재 L2TP v3는 L2TP를 확장해 일부 새로운 서비스 모델을 포함시켰다. 또한 PP만이 아닌 터널링 대안의 계층 2PDU에 대한 지원도 제공된다. LT2P는 IP, IPX, NetBEUI 트랙픽을 암호화 한 다음, IP 헤더로 캡슐화해 전송한다. PPP에서 제공되는 데이터 암호화 기법을 사용할 수도 있고 IPSec에 의해 제공되는 더 강력한 데이터 암호화 기법을 사용할 수 있다. 이때는 L2TP/IPSec라고 한다. L2TP와 IPSec의 결합 형태에서 연결은 DES(Data Encryption Standard) 알고리즘을 사용하는데, 이 알고리즘은 DES에 대해 하나의 56비트 키를, 3DES에 대해 세 개의 56비트 키를 사용한다. L2TP/IPSec 연결은 두 가지 수준의 인증을 요구한다. IPSec SA(보안 연결)를 작성해 L2TP 캡슐화 데이터를 보호하기 위해 L2TP/IPSec 클라이언트는 인증서나 미리 공유된 키를 사용해 컴퓨터 수준의 인증을 수행한다. IPSec SA가 성공적으로 작성되면 연결의 L2TP 부분에서 PPTP와 동일한 사용자 수준의 인증을 수행한다.


·PPTP 프로토콜
PPTP(Point-to-Point Tunneling Protocol)는 PPP의 확장으로 개발된 PPTP에서는 인터넷을 통한 새로운 수준의 강화된 보안과 멀티프로토콜 통신이 추가됐다. 인터넷 프로토콜인 TCP/IP를 그대로 이용하면서도 외부인은 접근할 수 없는 별도의 VPN을 운용할 수 있는 프로토콜이다. 특히 PPTP 지원하는 VPN을 통한 데이터 전송은 새로운 EAP(Extensible Authentication Protocol)를 사용하기 때문에 단일 LAN 내의 회사 사이트에서 데이터를 전송하는 것만큼이나 안전성을 보장한다. VPN 서버는 모든 보안 검사와 유효성 검사를 수행하고 데이터를 암호화해 보안되지 않는 네트워크를 통해 가상 터널을 생성해서 보다 안전하게 전송할 수 있다. 또한 개인 LAN to LAN 네트워크에 PPTP를 사용할 수도 있다. PPTP에서는 전화 접속 연결이 필요하지 않다. 그러나 컴퓨터와 서버가 IP로 연결돼 있어야 한다. IP LAN에 직접 연결돼 있으면서 서버와 접속할 수 있으면 LAN을 통한 PPTP 터널을 설정할 수 있다. 그러나 인터넷을 통해 터널을 만드는 중이고 일반적으로 ISP와의 전화 접속 연결을 통해 인터넷에 액세스하는 경우 터널을 설정하기 전에 전화 접속으로 인터넷에 연결해야 한다. 리눅스에서는 PPTPD라는 서버 데몬과 PPTP라는 클라이언트를 통해 VPN을 구성할 수 있다. 물론 PPTP 프로토콜을 통한 VPN을 구성함에 있어서 리눅스와 윈도우간의 서버 대 서버, 서버 대 클라이언트간의 구성이 가능하다.


·MPLS VPN
MPLS VPN은 고객별로 터널링하는 것으로 MPLS 코어를 운영하는 서비스 업체들에 의해 구현된다. 기업을 위한 주요 애플리케이션은 자사의 WAN 코어를 서비스 업체에 부분적이거나 모든 부분을 아웃소싱한다. MPLS의 특성을 이용해 서비스 업체들은 에지 라우터의 고객 어드레스 공간을 분리한 다음, 고객으로부터 트래픽이 서비스 업체의 코어에 들어오면 VPN 라벨이 IP 패킷에 첨부돼 터널 라벨 스위치 경로를 통해 전환된다.


·AToM
AToM(Any Transport over MPLS)은 서비스 업체 MPLS 네트워크에서 사용하기 위한 L2TP v3와 유사하게 동작한다. 2계층 프레임을 MPLS 네트워크로 전송하며, 목적지 상대방에 전송하기 전 고객 트래픽에 라벨을 붙인다는 점에서 MPLS VPN과 비슷하다. 하지만 확장된 라벨 전송 프로토콜 세션을 사용해 독특한 가상 회선이나 유사 회선 라벨과 협상, 다양한 2계층의 고객 트래픽을 규명한다는 점에서 차이가 있다. 서비스 업체 네트워크가 고객으로부터 패킷을 받게 되면, 패킷에 라벨을 붙이고 터널 LSP(Label Switched Path)를 사용해 변환, 목적지 에지 라우터에 보낸다. 수신하는 에지 라우터는 라벨을 벗기고 패킷을 순수한 2계층 PDU 형태로 고객 사이트에 포워딩한다.


이와 같은 대표적인 프로토콜 이외에도 AMTP(Ascend Tunnel Management Protocol), VTP(Virtual Tunneling Protocol), IP in IP 등의 방법이 있으나 실제로 IPSec, PPTP, L2TP가 가장 많이 사용되고 구현이 쉽다.



리눅스를 이용한 VPN 서버 구성 솔루션
윈도우와 함께 활용할 리눅스 VPN 프로그램을 살펴보자. FreeSWAN(www.freeswan.org)은 리눅스에서 IPSec 프로토콜을 이용해 서버를 구성할 수 있는 솔루션이다. 리눅스에서 FreeSWAN을 구성하기 위해서는 커널 컴파일로 커널에서 IPSec을 지원하게 만들어야 한다. 또한 서버에서 NAT를 지원해야 하므로 커널에서 NAT 기능을 사용하기 위해 iptables을 설정해야 한다. 커널 컴파일후 FreeSWAN을 설치한다. 이때 커널 패치가 이뤄지고 설치 후에는 /etc/ipsec.secrets와 /etc/ipsec.conf 파일을 통해 설정할 수 있다. 최신 커널인 2.6에는 IPSec 지원이 커널에 삽입돼 커널 패치를 하지 않아도 사용할 수 있다.
Poptop(www.poptop.org)은 리눅스에서 PPTP를 이용해 서버를 구성하는 솔루션이다. 리눅스에서 Poptop을 구성하기 위해서는 커널 컴파일을 통해 커널에서 PPP 방식을 지원할 수 있게 해야 한다. 이는 PPTP가 PPP를 이용해 구현됐기 때문이다. 또한 L2TPD(www.l2tpd.org)는 리눅스에서 L2TP를 이용해 서버를 구성할 수 있는 솔루션이다.


윈도우 2000으로 클라이언트 접속을 위한 서버 구성하기
이제 실제로 VPN을 구축해 보자. 여기에 사용된 장비는 펜티엄Ⅲ 700 CPU이며, 리눅스 커널 버전은 2.4.20 & 2.4.3 그리고 윈도우 2000 서버이다. 실제로 테스트가 이뤄질 때, 펜티엄 클래식 166Mhz에 메모리 32MB와 1GB의 하드디스크에 리눅스를 올려 구축했는데, 매우 원활하게 동작했다.
(그림 3)에서 클라이언트는 사설 IP 대역인 192.X.X.X의 IP에는 접속하지 못하므로 해당 서비스를 이용할 수 없다. 하지만 VPN을 이용할 경우 VPN 서버에 연결 후 서버로부터 가상의 IP인 192.168.1.10을 부여받으면서 서버와 같은 네트워크에 속하게 된다. 때문에 사설 IP로 할당된 전자우편이나 웹서비스를 이용할 수 있다.



(그림 3) LAN to 클라이언트 구성도(www.poptop.org 참조)
우선 클라이언트 접속을 위한 서버를 구성해 보자. 윈도우 2000의 라우팅 및 원격 액세스 서버 설치 마법사를 통해 구축을 시작한다(화면 1). 시작 → 프로그램 → 관리도구 → 라우팅 및 원격 액세스 선택 수동으로 구성한 서버를 선택하고 마친다.



(화면 1) 라우팅 및 원격 액세스 서버 설치 마법사 화면



라우팅 및 원격 액세스 서버가 설치되고 가동되면 서버에 접속한 원격 클라이언트에게 할당할 IP 대역을 설정한다(화면 2). 로컬 등록 정보 화면에서 서버 → 등록정보 → IP 탭을 선택한다.
 
(화면 2) 로컬 등록 정보 화면



원격 액세스 정책을 설정하기 위해 원격 액세스 정책 탭을 클릭해 새로 만들기를 선택한다(화면 3). 추가 탭을 눌러 다음과 같은 조건을 선택한다. Tunnel-Type 항목에 들어가 PPTP 선택하고, Windows-Group에서 클라이언트 계정에 필요한 그룹을 선택한다. 사용자 계정 그룹은 시작 → 프로그램 → 관리도구 → 컴퓨터관리 → 로컬사용자 및 그룹에서 관리로 들어간다. Day-And-Time-Restictions 항목에서 액세스 가능 시간대를 선택해준다.



(화면 3) 원격 액세스 정책 추가 화면
 



(화면 4) 원격 액세스 정책 권한 화면




원격 액세스 권한 허용을 선택한다(화면 4). 이로써 윈도우 2000 VPN 서버의 기본 설정을 마친 것이다.










[활용특집] 리눅스/윈도우의 PPTP 프로토콜로 VPN 구성하기 ②




 

 





 VPN을 운영하는 데는 다양한 프로토콜이 있다. 이중 PPTP(Point-to-Point Tunneling Protocol)는 TCP/IP 상에서 안전한 통신을 지원하고 멀티프로토콜 통신을 추가한 새로운 개념의 프로토콜이다. 또한 PPTP를 이용한 통신으로, 리눅스와 윈도우 간의 VPN을 쉽게 구축할 수 있다. 이 글을 통해 리눅스와 윈도우를 이용해 서버 대 서버, 서버 대 클라이언트를 구성하는 방법을 알아본다.



정낙수, 정민, 김규현_국민대학교 OSSRC 소속 개발자

 

리눅스 PoPtop으로 클라이언트 접속 서버 구성하기
리눅스 VPN 서버를 구성하기 위해서는 몇가지 다운로드가 필요하다.


·파일 다운 로드
www.kernel.org/pub/linux/kernel   / : 커널 
http://wlan.informatik.uni-bremen.de/doku/debian/download/sonstiges/ppp-2.4/ppp-2.4.1-n :  ppp-2.4.1-mppe.tar.gz
ftp://ftp.psy.uq.oz.au/pub/crypto/ssl/ssleay-0.9.0b.tar.gz : ssleay-0.9.0b.tar.gz
www.poptop.org    : pptpd-1.1.3-4.i386.rpm                                    


솔루션을 다운로드했다면, PPPD 설치(MSCHAP v2 & MPPE SUPPORT)를 실행한다.  


#] tar xvfz ppp-2.4.1-mppe.tar.gz
#] tar xvfz SSLeay-0.9.0b.tar.gz


#] cp SSLeay-0.9.0b/crypto/rc4/rc4.h ppp-2.4.1-openssl0.9.6mppe-MSCHAPv2fix/linux/
#] cp SSLeay-0.9.0b/crypto/rc4/rc4_enc.c ppp-2.4.1-openssl0.9.6mppe-MSCHAPv2fix/linux/
#] cd ppp-2.4.1-openssl0.9.6mppe-MSCHAPv2fix


#] ./configure
#] make
#] make install


#] cp pppd/pppd /usr/sbin/


커널 컴파일(MPPE-PPP SUPPORT)을 실행한다. 배포판 커널에도 PPP는 모듈로 설정돼 있지만 MPPE와 MSCHAPv2를 지원하지 않는 경우가 대부분이기 때문에 이를 추가해 커널을 다시 만들어야 한다. 커널 컴파일시 network-device-support에서 ppp-support 항목을 yes로 하고 ppp의 세부항목(async serial ports, sync tty ports, deflate compression, bsd-comression)은 꼭 module로 설정한다.
만약, 클라이언트가 VPN 서버 접속을 끊지 않은 상태에서 웹 검색 등을 지원하려면 VPN 서버에서 NAT를 지원해야 한다. iptables을 이용한 마스커레이드(masqurade)를 이용할 것이라면 iptables를 추가해서 컴파일해야 한다. 물론 ipchains를 통해 마스커레이드를 할 경우는 ipchain을 추가해야 한다.


#] cd /usr/src
#] ln -s /usr/src/linux-2.4.20 /usr/src/linux
#] gunzip linux-2.4.16-openssl-0.9.6b-mppe.patch.gz
#] mv linux-2.4.16-openssl-0.9.6b-mppe.patch linux
#] cd linux
#] patch -p1 < linux-2.4.16-openssl-0.9.6b-mppe.patch


#] cd /usr/src/linux/drivers/net/
#] vi Makefile
#] # 다음 6라인을
  obj-$(CONFIG_PPP) += ppp_generic.o slhc.o ppp_mppe.o
  obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
  obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
  obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o
  obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
  obj-$(CONFIG_PPPOE) += pppox.o pppoe.o
#] #다음 6라인으로 대체 한다. (ppp_mppe.o가 컴파일 안될 경우대비)
  obj-$(CONFIG_PPP) += ppp_generic.o slhc.o
  obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
  obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
  obj-$(CONFIG_PPP_DEFLATE) += ppp_deflate.o ppp_mppe.o
  obj-$(CONFIG_PPP_BSDCOMP) += bsd_comp.o
  obj-$(CONFIG_PPPOE) += pppox.o pppoe.o


#] make menuconfig
#] make dep && make clean && make bzImage && make install && make modules && make #] modules_install
#] cd arch/i386/boot/
#] cp bzImage /boot/vmlinuz-2.4.20
#] cp Sysmap.map /boot/Sysmap.map-2.4.20


#] vi /etc/lilo.conf
    image=/boot/vmlinuz-2.4.20
    label=linux-2.4.20
    read-only
  
#] lilo


#] reboot


컴파일이 제대로 됐다면 /lib/modules/2.4.20/kernel/drivers/net/에 bsd_comp.o, ppp_async.o, ppp_deflate.o, ppp_synctty.o가 포함돼야 한다. 그 다음에 PPTPD를 설치하고, 설정한다.
 
rpm -Uvh pptpd-1.1.3-4.i386.rpm


/etc/modules.conf
#pptpd를 위해 추가해야할 설정
alias char-major-108 ppp_generic
alias tty-ldisc-3 ppp_async
alias tty-ldisc-14 ppp_synctty
alias ppp-compress-18 ppp_mppe
alias ppp-compress-21 bsd_comp
alias ppp-compress-24 ppp_deflate
alias ppp-compress-26 ppp_deflate


/etc/pptpd.conf
option /etc/ppp/options.pptpd
localip 192.168.10.200               #VPN 서버의 가상 IP로 설정됩니다.
remoteip 192.168.10.201-254      #VPN 클라이언트에게 배정될 IP 대역이 됩니다.


/etc/ppp/options.pptpd
#리눅스 VPN 클라이언트와 윈도우 VPN 클라이언트 접속을 위한 설정
name *                        #서버 name
lock                           #client에서 serial장치 외부 접근 방지
mtu 1450                      # client 에게 1450보다 많지 않은 패킷을 보내도록
mru 1450                      # client 에게 1450보다 많은 패킷은 보내지 않도록
proxyarp                       # client가 proxy ARP 목록 생성 금지
nodeflate                       # deflate compression을 사용하지 않는다
nobsdcomp                     # bsd-compression을 사용하지 않는다
auth                            # 인증 사용
+chap                          # chap 인증 사용
+chapms-v2                    # chapv2인증 사용
ipcp-accept-local               # 상대측 정보를 시스템의 local ip로 받는다
ipcp-accept-remote             # 상대측 정보를 시스템의 remote ip로 받는다
lcp-echo-failure 3              # 물리적으로 접속이 끊어질 경우 종료
lcp-echo-interval 5             # client가 연결 되어있는지 확인
deflate 0                       # deflate compression
mppe-128                      #mppe 암호화 사용
mppe-40
mppe-stateless


vi /etc/ppp/chap-secrets
username * password * 


첫번째 *는 VPN 서버 이름이 되고 두 번째 *는 username을 사용해서 접속한 클라이언트에게 할당할 IP를 적어주면 된다. *로 할 경우 서버에서 자동으로 /etc/pptpd.conf에 지정한 IP 대역에서 처리한다.
VPN 접속후 클라이언트는 VPN 서버를 거치기 때문에 VPN 서버에서 마스커레이드를 해주어야 한다. 그래야만 클라이언트의 패킷이 VPN 서버를 거쳐 VPN 서버의 내부로 흘러가지 않는다. 하지만 이는 VPN 서버에 부하를 주기 때문에 VPN을 이용하지 않을 경우에는 VPN을 끊고 웹 검색을 해야 한다. 커널 2.4 이후에는 iptables을 지원하므로 iptables를 통해 마스커레이드를 하고 그렇지않을 경우 ipchains을 사용한다면 ipchains을 이용한 마스커레이드를 해줄 수 있다. iptables을 이용한 마스커레이드는 다음과 같다.   


#] vi /etc/rc.d/rc.local
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE
#] reboot


이와 같은 마스커레이드는 어떤 패킷 필터링도 하지 않은 상태다. 특정 패킷 필터링이 필요한 경우 추가시켜주면 된다.
 









[활용사례] 리눅스/윈도우의 PPTP 프로토콜로 VPN 구성하기 ③
 




 VPN을 운영하는 데는 다양한 프로토콜이 있다. 이중 PPTP(Point-to-Point Tunneling Protocol)는 TCP/IP 상에서 안전한 통신을 지원하고 멀티프로토콜 통신을 추가한 새로운 개념의 프로토콜이다. 또한 PPTP를 이용한 통신으로, 리눅스와 윈도우 간의 VPN을 쉽게 구축할 수 있다. 이 글을 통해 리눅스와 윈도우를 이용해 서버 대 서버, 서버 대 클라이언트를 구성하는 방법을 알아본다.



정낙수, 정민, 김규현_국민대학교 OSSRC 소속 개발자

 

서버 접속을 위한 LAN to 클라이언트 구성하기
이제 클라이언트 구성을 알아보자. 윈도우 서버와 윈도우 클라이언트를 이용해 VPN 접속하는데, VPN 서버 어드레스 입력이 필요하다.


·윈도우 2000 구성하기 
 설정 → 네트워크 및 전화접속 연결 → 새연결 만들기 → VPN을 통한연결 → VPN 서버 어드레스 입력


·윈도우 XP 구성하기
 시작 → 프로그램 → 보조프로그램 → 통신 → 새연결 만들기 → 회사네트워크에 연결 → VPN 연결 → 초기 연결을 사용 안함 → VPN 서버 어드레스 입력



(화면 5) 네트워크 연결 마법사를 이용한 VPN 클라이언트 설정




윈도우 서버와 PPTP 클라이언트를 이용한 VPN 접속하기 위해서는 파일 다운로드(pptpclient.sourceforge.net)가 필요하다.
PPP를 설치하기 위해 준비(MSCHAP v2 & MPPE)한다.


#] tar xvfz ppp-2.4.2
#] cd ppp-2.4.2
#] ./linux/mppe/mppeinstall.sh /usr/src/linux-2.4.20
 
커널 컴파일시 network-device-support에서 ppp-support 항목을 yes로 클릭하고 ppp의 세부항목은 꼭 module로 설정한다.


#] make xconfig
#] make dep && make clean && make bzImage && make install && make modules && make #] modules_install
#] cd arch/i386/boot/
#] cp bzImage /boot/vmlinuz-2.4.20
#] cp Sysmap.map /boot/Sysmap.map-2.4.20


#] vi /etc/lilo.conf
    image=/boot/vmlinuz-2.4.20
    label=linux-2.4.20
    read-only
 
#] lilo


#] reboot


PPP & PPTP를 설치, 설정한다.


#] cd ppp-2.4.2
#] ./configure
#] make
#] make install


#] tar pptp-linux-1.3.1
#] cd pptp-linux-1.3.1
#] make
#] make install


/etc/ppp/options.pptp
lock                               # client에서 serial장치 외부 접근 방지
noauth                            # 인증 사용 안함
nobsdcomp                        # bsd-compression을 사용하지 않는다
nodeflate                          # deflate compression을 사용하지 않는다
require-mppe-40                  # mppe 암호화 사용
require-mppe-128


/etc/ppp/peers/vpn
pty "pptp 210.121.xxx.xxx nolaunchpppd"#VPN 서버 IP
name xxxx                             # xxxx는 VPN 서버에 등록된 클라이언트 ID
require-mppe                          # mppe암호화 사용
require-mschap-v2                    # chapv2 인증 사용
file /etc/ppp/optios.pptp                # options.pptp 설정 사용
ipparam vpn         


vi /etc/ppp/chap-secrets
# ID  서버  패스워드 IP
xxxx  vpn  xxxx  *                   # id, 서버name, passward 기록


VPN 서버에 접속한다.


#] pppd call vpn


PPTP 클라이언트 GUI 설치한다. 리눅스에서도 PPTP 클라이언트용 GUI TOOL이 있다.


#] ./rpm -Uvh pptp-php-gtk.rpm     #GUI TOOL 설치
#] ./pptpconfig                       #TOOL 실행



(화면 6) PPTP GUI 툴



그 다음 Poptop과 윈도우 클라이언트를 이용해 VPN에 접속한다. 리눅스 서버인 Poptop과 윈도우의 원격접속 클라이언트는 서로 호환이 되기 때문에 이와 같이 설명한 방식은 윈도우 클라이언트를 구성해서 Poptop으로 구성된 서버에 연결해 사용할 수 있다.
Poptop과 PPTP를 이용해 VPN에 접속한다. 리눅스 서버인 Poptop과 리눅스 클라이언트인 PPTP의 설정은 이미 설명한 그대로 사용할 수 있다.


윈도우 서버를 이용한 LAN to LAN 구성하기
이제 LAN to LAN 구성을 해보자. (그림 4)는 LAN to LAN 혹은 게이트웨이 투 게이트웨이 간의 구성도이다. 그림의 클라이언트 내부 네트워크의 호스트인 A나 B는 NAT를 통해 클라이언트의 203.0.0.55를 인터넷에 연결할 수 있다. 하지만 (그림 4)에서와 마찬가지로 호스트 A나 B는 서버의 내부 네트워크인 전자우편이나 웹 서비스를 이용할 수 없다. 하지만 VPN을 이용할 경우 클라이언트의 요청에 의해 서버는 클라이언트와 가상 터널을 만들고 호스트 A나 B는 클라이언트와 서버의 가상 터널을 통해 서비스를 이용할 수 있다.


(그림 4) LAN to LAN 구성도



윈도우 2000 서버 버전을 이용해서 LAN to LAN을 구성할 경우 그림에서 클라이언트라고 표시된 부분과 서버라고 표시된 부분이 VPN 서버가 된다. LAN to LAN 구성은 크게, 필요할때마다 연결하는 것과 영구적으로 연결하는 것, 둘로 나눌 수 있다. 필요시 연결이라고 하면 클라이언트의 호스트 A가 메일 서버에 접속하기 위해 클라이언트에 요청을 하면 클라이언트와 서버 사이에 VPN이 생긴다. 생성된 VPN은 호스트 A나 호스트 B의 사용이 없는 경우 사라지게 된다. 영구 사용할 때 연결은 호스트의 요청이나 사용 여부에 관계없이 VPN이 존재한다. 


 


·필요시 연결 구성하기
① 양쪽 라우터가 VPN 서버가 될 수 있게 라우팅과 원격 액세스를 시작한다.
② 라우터간 연결을 위한 인터페이스를 설정한다.
③ 상대 라우터의 내부 네트워크 대역을 고정 경로 등록을 통해 기록한다.
④ (그림 4)의 A나 B의 요청이 있으면 연결 후 해제 


(그림 4)의 클라이언트와 서버의 설정은 고정 경로시 IP 설정이 상대편 대역으로 설정하는 것만 다르고 나머지 설정은 같다. 양쪽 라우터가 VPN 서버가 될 수 있게 라우팅과 원격 액세스를 시작한다(화면 7). 라우팅 인터페이스 → 새 필요시 전화 접속 인터페이스 선택한다.


(화면 7) 라우팅 및 원격 액세스 서버 설치 마법사



라우터간 연결을 위한 인터페이스를 설정한다(화면 8). 또한 연결 형식을 VPN을 사용해 연결로 선택한다(화면 9). 만들고자 하는 VPN의 인터페이스의 유형을 PPTP로 선택한다(화면 10).
 LAN to LAN 연결이기 때문에 상대편 게이트웨이의 어드레스를 적어준다(화면 11). 원격 라우터 접속을 위한 계정을 사용할 수 있도록 설정한다(화면 12). 상대편 라우터가 접속할 때 사용할 계정이 된다(화면 13). 상대 라우터에 연결할 사용자 인증을 기록한다(화면 14).


(화면 8) 서버의 인터페이스 이름 설정
(화면 9) 연결 형식 선택
(화면 10) 프로토콜 방식 선택
(화면 11) 대상 어드레스 입력
(화면 12) 원격 라우터가 전화 접속하도록 사용자 계정 추가
(화면 13) 상대편 라우터가 접속할 때 사용할 계정
(화면 14) 상대 라우터에 연결할 사용자 인증 기록



상대 라우터의 내부 네트워크 대역을 고정 경로 등록을 통해 기록한다(화면 15). 경로는 IP 라우팅 → 고정 경로 → 새 고정 경로를 지정한다.


(화면 15) 고정 경로



우선 수준 등록 정보 중 라우팅 및 원격액세스 → IP라우팅 → 일반 → 등록정보 → 우선수준에서 경로원본의 고정 우선순위를 낮춘다(화면 16).


(화면 16) 우선수준 등록 정보



NAT를 위해 인터넷과 연결된 NIC의 등록정보에서 인터넷 연결 공유 탭을 활성화시킨다(화면 17).


(화면 17) 연결 공유탭



(그림 4)에서 클라이언트의 호스트 A 또는 B가 요청을 하면 VPN이 구성된다.


·영구 VPN을 연결하기 위한 구성
① 양쪽 라우터가 VPN 서버가 될 수 있도록 라우팅 및 원격 액세스를 시작한다.
② 라우터간 연결을 위한 인터페이스를 설정한다.
③ 상대 라우터의 내부 네트워크 대역을 고정 경로 등록을 통해 기록한다.
④ 클라이언트의 원격 액세스 정책을 설정한다.
⑤ 클라이언트의 요청이 있으면 영구적으로 연결된다.


기본 설정은 필요시 연결의 설정과 같다. 하지만 클라이언트의 원격 액세스 정책이 (화면 18)과 같이 달라지며 네트워크를 형성하기 위한 요청을 클라이언트가 된다. 또한 NAS-Port-Type → VPN을 선택하고, Called-Station-ID 선택 →게이트웨이 어드레스 입력한다.


(화면 18) VPN 등록 정보



Windows-Groups에서 클라이언트 계정에 필요한 그룹을 선택한다. 사용자 계정 그룹은 시작 → 프로그램 → 관리도구 → 컴퓨터관리 → 로컬 사용자 및 그룹에서 관리할 수 있다.


Poptop을 이용한 LAN to LAN 구성하기
Poptop을 이용한 LAN to LAN 구성을 위해서는 연결을 요청하는 쪽은 클라이언트가 되고 요청받는 쪽은 서버가 된다. 물론 클라이언트나 서버는 뒤쪽으로 내부 네트워크를 가지고 있다. LAN to LAN 연결 방식과 설정은 위에서 설명한 LAN to 클라이언트와 같다. 다만 내부 네트워크를 가지기 때문에 각 내부 네트워크 호스트의 패킷이 구성된 터널을 통과해야 하는지 아닌지에 대한 ROUTE 경로의 추가와 NAT가 필요하다. 때문에 클라이언트와 서버에 공통으로 상대편 내부 네트워크에 대한 고정 경로를 추가하고 iptables나 ipchains를 이용한 마스커레이드가 필요하다.


·고정 경로 추가하기
클라이언트에서
#] route add -net 192.168.0.0 netmask 255.255.0.0 dev ppp0


서버에서
#] route add -net 10.0.1.0 netmask 255.255.255.0 dev ppp0


·클라이언트 & 서버 iptables을 이용한 마스커레이드 
#] vi /etc/rc.d/rc.local
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -o ppp0 -j MASQUERADE
#] reboot


이와 같은 마스커레이드는 어떤 패킷 필터링도 하지 않은 것이다. 특정 패킷 필터링이 필요한 경우 추가시켜야 한다.


Poptop과 윈도우 VPN 서버를 이용한 LAN to LAN 구성하기
Poptop과 윈도우 VPN 서버와 연결할 때 그 설정은 이미 설명한 각 서버의 구성과 다르지 않다. (그림 2)에서 클라이언트는 윈도우 VPN 서버가 되고 서버는 Poptop으로 구성한다. 일단 윈도우의 설정은 이미 설명한 윈도우 서버를 이용한 LAN to LAN 구성 방식에서 필요할 때 설정 방법과 같다. 또한 Poptop의 설정 또한 이미 설명한 Poptop을 이용한 LAN to 클라이언트 구성 방식에서 LAN 쪽의 서버 구성 방식과 같다. 각각의 설정이 맞춰진 후 윈도우의 라우팅과 원격 액세스에서 라우팅 인터페이스 항목에서 추가한 VPN 인터페이스의 연결을 선택하면 Poptop과 윈도우 VPN 서버와의 LAN to LAN 구성이 이뤄진다.
VPN 서버를 구성할 경우 서두에 열거한 여러 프로토콜 중에서 어떤 것을 선택하는지 서버 구성자의 선택에 달려있다. 또한 VPN 장비를 사용해 구성할 것인지 리눅스를 이용해 저렴하게 구성할 것인지 또한 구성자의 몫이 된다.
Poptop을 이용한 서버 구성의 장점은 윈도우나 리눅스를 사용하는 클라이언트가 윈도우의 원격 접속이나 리눅스의 PPTP 툴 등을 통해 서버에 간편하게 접속할 수 있으며 윈도우나 리눅스의 다른 운영체제 하에서 LAN to LAN 구성할 수 있다는 것이다. 향후 와우리눅스의 엔터프라이즈 버전에도 이런 VPN 솔루션이 탑재될 예정이라고 하니 일반 사용자가 손쉽고 저렴하게 VPN을 구성할수 있는 날도 그리 멀지 않았다.


리눅스/윈도우의 PPTP 프로토콜로 VPN 구성하기

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다