본문으로 바로가기

리눅스 서버에서 pptp방식으로 VPN서버를 구축할 것이다.

pptp방식은 속도가 빠르고 구축이 쉬운 편이나 보안에는 그렇게 좋은 편이 아니라고 합니다.

또한 애플기기에서는 기본적으로 pptp방식을 지원하지 않는다고 합니다.

저는 aws환경에서 진행할 것입니다. google cloud platform에서도 시도해보았지만 gcp에서는 연결을 할 수 없었는데

pptp방식에서 필요한 gre기능을 gcp는 지원을 하지 않아서 그런 것 같습니다.


우분투에서 vpn 서버구축

먼저 aws에서 Ubuntu 18.04LTS로 진행하기 위해 인스턴스를 생성합니다.



그리고 aws에서 진행할 때는 네트워크 보안 그룹 tcp/1723번 포트를 열어줘야합니다.

gre/47번도 열어줘야한다고 하는데 aws에서는 딱히 gre/47은 건드리지 않아도 작동했다.

우리집 iptime공유기로도 테스트 해봤는데 외부와 바로 연결된 iptime공유기에 private ip를 받은 우분투 노드에서

vpn서버를 구축했을 때, 1723번포트만 포워딩 해주니 안드로이드로 vpn에 접속, 인터넷이 모두 잘 작동했다.

iptime에 gre포트도 포워딩할 수 있었는데 이건 해도, 안해도 작동했다.

sudo apt-get install pptpd

명령어를 통해서 pptpd를 설치합니다.



그 다음에는 /etc/pptpd.conf 파일을 엽니다. 맨 아래를 보면



이런식으로 되어있는데 여기서 vpn을 이용해서 구축할 private ip를 설정합니다.

local ip는 이 vpn서버의 ip가 되고 remote ip를 vpn 클라이언트가 받게 됩니다.

저는 aws를 사용하기 때문에 겹치는 ip가 없으므로 주석을 해제하여 사용하겠습니다.



원하는 범위를 입력한 뒤 저장합니다.

다음은 vpn서버에 접속할 계정을 만들어야합니다.

/etc/ppp/chap-secrets 파일을 엽니다.



[id] pptpd [password] * 을 순서대로 입력합니다.

그리고 저장합니다.

이 상태에서 서버를 작동시키면 vpn서버에 연결할 수 있다. 하지만 인터넷에 접속해보면 작동하지 않는다.

/etc/sysctl.conf 파일을 연다.



net.ipv4.ip_forward=1에 주석이 걸려있는데 주석을 해제한다.

sudo sysctl -p

명령어로 reload해준다.

마지막으로 네트워크의 방화벽 같은 부분을 설정해야 인터넷 이용이 가능하다. 아래의 명령어를 입력한다.

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

그런데 이 명령어를 입력할 때, eth0가 아닐 수도 있다.

ifconfig를 입력해보면



이렇게 네트워크 인터페이스가 나올텐데 현재 사용중인 네트워크 인터페이스를 선택해야한다.

여기서는 ens33이다.

이 iptables 명령어는 재부팅하면 정보가 날아간다.

그래서 재부팅할 때마다 다시 입력해야한다.

다른 OS에서는 여기까지 설정하면 사용이 가능하지만 윈도우에서 사용하거나 default gateway로 이용하려면

dns까지 설정을 해주어야한다.

/etc/ppp/pptpd-options 라는 파일을 연다. 내리다보면




이런 부분이 나올텐데 ms-dns 라는 부분의 주석을 풀고 dns서버를 설정해준다. 내가 설정한 건 구글의 dns서버이다.

다른 isp의 dns서버를 이용해도 된다.

sudo service pptpd restart

이제 서비스를 시작하면 된다.

만약에 위 과정이 귀찮다면


vpn_pptpd.sh


이 파일을 다운 받은 뒤에

sudo sh vpn_pptpd.sh

로 실행한 뒤, 필요한 정보들을 입력하면 vpn서버 세팅이 완료된다.


윈도우에서 연결하기



윈도우에서 위와 같이 입력한 다음 저장하고 연결을 눌러 사용할 수 있다.

https://fast.com/ko/

에 들어가보니 인터넷 속도를 간단히 알려준다.


리눅스에서 연결하기



VPN Settings 로 들어가서

VPN 을 pptp로 추가한 다음에 필요한 정보를 입력하면 된다.

그리고 해야할 게 하나 더 있는데 identity탭에서 Advance를 누른다.



여기서 Use Point-to-Point encryption이 기본적으로 체크가 안되어 있는데 그러면 작동하지 않는다.

이걸 체크한다.