몇달전부터 시도하던 Debian리눅스서버에 PPTP VPN서버를 만들어보는 작업을 이제서야 성공했지만 구성하고나니 이것저것 허망한 문제점들이 들어난다…쩝..
우선, PPTP프로토콜을 사용한것은 접속하는 사용자들이 거의 모두 Windows시스템들이기 때문에 PPTP를 사용하게 되었고, 굳이 Debian Linux에 설치한 이유는 public IP를 가진 윈도우서버가 없기 때문이다..ㅎㅎ
몇달동안 시도만 하고 성공을 하지 못했던 가장 큰 문제는 Kernel에 MPPE(Microsoft Point to Point Encryption)기능을 지원하도록 하는 부분이었다. 기존에는 해당 소스를 받아서 계속 Kernel을 컴파일하는 시도를 했는데 …어찌나 어려운지… 그런데, dselect패키지 리스트에서 mppe를 검색해보니 kernel-patch-mppe가 있었다. 이 패치를 적용하면서 kernel에서 MPPE를 지원하도록 할 수 있었다. 재부팅시에 아래와 같은 메세지를 볼 수 있다.
PPP generic driver version 2.4.2
MPPE/MPPC encryption/compression module registered
Kernel에서 MPPE를 지원하도록 한 다음에 사용되는 ppp패키지를 MPPE를 지원하도록 만들기 위해서 최근 PPP패키지(ftp://ftp.samba.org/pub/ppp/ppp-2.4.3.tar.gz)를 다운받아서 새로 컴파일을 했다.
그 다음에 해야하는 작업이 PPTP와 PPP의 구성파일을 구성하는데 나 같은 초보자한테는 힘든 문제였다. 그래서 Webmin이라는 툴을 설치하여 GUI방식으로 PPTP server를 구성할 수 있었다. Webmin은 구성만 마친후에 서비스를 stop해놓은 상태이고 pptp와 ppp의 구성파일들은 아래와 같다..
[/etc/pptpd.conf]
ppp /usr/local/sbin/pppd
debug
localip 14.248.240.76
remoteip 14.248.240.77-87
proxyarp
lock
mppe-40
mppe-128
mppe-stateless
[/etc/ppp/ppp.conf]
pptp:
enable proxy
accept dns
disable ipv6cp
enable mschapv2
set timeout 0
[/etc/ppp/options]
noauth
require-mschap-v2
+chap
+mschap-v2
ms-dns x.x.x.x
netmask 255.255.255.128
proxyarp
debug
lock
nobsdcomp
nologfd
[/etc/ppp/chap-secrets]
# Secrets for authentication using CHAP
# client server secret IP addresses
#username pptpd password *
han s5 “____” “*”
위와같이 설정하고 pptpd를 구동해서 시험으로 하고 /var/log/debug메세지에 로그가 저장되므로 로그로 보니터링을 할 수 있다.
연결시험이전에 pptp vpn을 사용하기 위해서 ipchains을 사용하는 시스템이므로 rule설정을 해야한다. input chain에 1723/tcp, GRE protocol을 ACCEPT하는 룰을 추가한다.
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 1723:1723 -p 6 -j ACCEPT
-A input -s 0.0.0.0/0.0.0.0 -d 0.0.0.0/0.0.0.0 -p 47 -j ACCEPT
이렇게 설정하고 VPN을 연결하면 연결이 된다. 연결하는 client에는 기본으로 모든 통신을 VPN을 타고 나가도록 지정이 되기때문에 이 시스템에서 VPN사설IP가 외부로 나갈 수 있도록 NAT설정을 해주어야 한다. 그 NAT설정은 ipchains forward체인에 아래와 같은 라인을 넣어서 해결한다.
:forward DENY
-A forward -s 14.248.240.0/25 -j MASQ