VPN 서버 구축을 위한 VM 인스턴스를 GCP에 만들기

Last Updated on 2023-11-17 by BallPen

GCP의 VM 인스턴스로 IPsec VPN 서버를 구축해 보세요.

VPN 서버(Virtual Private Network Server)를 구글 클라우드 플랫폼(GCP)의 VM 인스턴스로 만드는 방법을 설명드립니다.

과거 2021년 8월의 글을 일부 수정하여 2023년 9월 기준으로 업데이트한 자료입니다. 그림이 과거 자료이기는 하나 2023년 현재와 거의 비슷하니 따라하는데 크게 문제가 되지는 않을거에요.

아래는 이번 글의 목차입니다.

1. GCP 계정 만들기 또는 로그인 하기

GCP(Google Cloud Platform, 구글 클라우드 플랫폼)는 구글이 가지고 있는 막대한 전산 자원을 유료로 공유하여 사용하는 클라우드 컴퓨팅 서비스 입니다. 이 서비스를 이용하면 웹호스팅 뿐만 아니라 복잡한 애플리케이션 개발에 이르는 제품들을 제공받을 수 있습니다.

이번 글에서 설명드리는 VPN 서버 구축은 GCP 계정이 있어야 시작할 수 있습니다. 신규고객에게는 300 달러 무료 크레딧이 제공되니 처음이신 분도 이번 기회에 경험해보시면 좋을 것 같애요.

일단 시작해보면 신세계를 경험할 수 있습니다.

Google Cloud platform 초기 화면. GCP는 VPN 서부 구축에 활용될 수 있습니다.
Google Cloud platform 초기 화면

Google Cloud Platform 계정 만들기 또는 로그인

그러면 이제부터는 GCP 계정이 모두 준비되었다는 가정하에 설명드리겠습니다.

2. VPN 서버 구축을 위한 고정 IP 만들기

VPN 서버 운영을 위해서는 고정 IP가 있어야 합니다. IP를 만들기 위해 GCP 초기 화면의 ‘좌측 상단 햄버거 그림’\(\rightarrow\)’VPC 네트워크’\(\rightarrow\)’IP 주소’를 클릭하세요.

아래의 화면이 나옵니다.

'외부 IP 주소' 화면. VPN 서버 구축을 위해서는 외부 고정 IP가 필요합니다.
[그림 1] ‘IP 주소’ 화면. VPN 서버 구축을 위해서는 외부 고정 IP가 필요합니다.(2021년 화면)

상단에 있는 ‘외부 고정 IP 주소 예약’ 버튼을 클릭하세요. 그러면 아래 화면을 볼 수 있습니다.

'고정 주소 예약' 화면
[그림 2] ‘고정 주소 예약’ 화면(2021년 화면)

‘이름’은 고정 IP의 이름이라고 보시면 됩니다. 편하게 만드세요. 저는 임시로 ‘test’라고 만들겠습니다.

‘네트워크 서비스 계층’은 프리미엄과 표준을 선택할 수 있습니다. 기본값이 프리미엄으로 되어 있는데요. 프리미엄이 상대적으로 비쌉니다.

안정적이고 빠른 네트워크 서비스가 필요하시면 프리미엄을, 그렇지 않으면 표준을 선택하세요.

‘IP 버전’은 IPv4를 선택하시면 됩니다.

‘리전(region)’은 VPN 서버를 설치할 지역을 말합니다. 클릭해서 선택하면 됩니다. 우리 나라와 가까울수록 속도가 빠릅니다.

‘연결 대상’은 없음으로 그대로 두고 ‘예약’ 버튼을 누르면 됩니다.

'외부 IP 주소' 화면. 방금 만들어진 test에 대한 외부 고정 IP 주소가 만들어진 것을 확인할 수 있습니다.
[그림 3] ‘IP 주소’ 화면. 방금 만들어진 test에 대한 외부 고정 IP 주소가 만들어진 것을 확인할 수 있습니다. (2021년 화면)

3. VM 인스턴스 만들기

고정 IP도 만들었으니, 이제는 VPN 서버를 동작시킬 VM 인스턴스를 만들어야 합니다.

GCP 초기 화면의 ‘좌측 상단 햄버거 그림’\(\rightarrow\)’Compute Engine’\(\rightarrow\)’VM 인스턴스’를 클릭하세요.

'VM 인스턴스' 화면. VPN 서버 구축을 위해서는 프로그램을 설치하고 실행하기 위한 VM 인스턴스가 필요합니다.
[그림 4] ‘VM 인스턴스’ 화면. VPN 서버 구축을 위해서는 프로그램을 설치하고 실행하기 위한 VM 인스턴스가 필요합니다. (2021년 화면)

그리고 상단에 있는 ‘인스턴스 만들기’를 클릭하세요. 그러면 아래의 화면이 나옵니다.

'인스턴스 만들기' 설정 화면
[그림 5] ‘인스턴스 만들기’ 설정 화면 (2021년 화면)

‘이름’은 기본값으로 해도 되고 바꾸어도 됩니다. ‘리전’은 위에서 고정 IP 만들 때 정했던 리전을 동일하게 선택해주시면 됩니다.

‘머신 구성’은 성능이 좋을 수록 비용도 비쌉니다. VPN만 사용하실 경우 E2 계열의 e2-micro를 선택하셔도 충분합니다.

‘VM 프로비저닝 모델’은 ‘표준’을 선택하세요.

‘부팅 디스크’ 의 ‘변경’ 버튼을 누르세요. 기본값이 ‘Debian GNU\Linux 11 (bullseye)’로 되어 있는데요. 그대로 사용하셔요.

이곳에서 부팅디스크 유형도 선택할 수 있습니다. 균형있는영구디스크, 익스트림영구디스크, SSD영구디스크, 표준영구디스크가 있는데요. 기계식 하드디스크인 표준영구디스크가 제일 저렴합니다.

부팅디스크 설정이 끝났으면 이번에는 화면을 조금만 더 아래로 내리세요. 그러면 ‘고급옵션’이 나올텐데요. 그것을 클릭하면 아래 이미지와 유사한 화면이 열릴거에요.

'인스턴스 만들기'의 '네트워킹' 설정 화면
[그림 6] ‘인스턴스 만들기’의 ‘네트워킹’ 설정 화면(2021년 화면)

‘네트워크 인터페이스’에서 default를 누르세요.

그러면 ‘외부 IP’가 임시로 설정된 항목이 보일거에요. 그 ‘외부 IP’를 누르시면 아래와 같이 우리가 만들어 놓았던 고정 IP(저의 경우 test(35.243.103.162))가 보일것입니다. 그것을 선택하시고 ‘완료’ 버튼을 클릭합니다.

'인스턴스 만들기'의 '네트워킹' 설정 화면
[그림 7] ‘인스턴스 만들기’의 ‘네트워킹’ 설정 화면(2021년 화면)

제일 아래쪽에 있는 ‘만들기’ 버튼을 누르면 인스턴스가 만들어집니다. 그리고 다음과 같은 화면을 보실 수 있어요.

VM 인스턴스 초기 화면
[그림 8] VM 인스턴스 초기 화면(2021년 화면)

VM 인스턴스가 잘 만들어졌어요. 다음에는 방화벽 설정을 하겠습니다.

4. 방화벽 설정하기

GCP 초기 화면의 ‘좌측 상단 햄버거 그림’\(\rightarrow\)’VPC 네트워크’\(\rightarrow\)’방화벽’을 클릭하세요.

'방화벽' 초기 화면. VPN 서버 구축을 위해서는 포트 등의 설정이 필요합니다.
[그림 9]’방화벽’ 초기 화면. VPN 서버 구축을 위해서는 포트 등의 설정이 필요합니다.(2021년 화면)

위쪽에 있는 ‘방화벽 규칙 만들기’를 클릭하세요.

'방화벽 규칙 만들기' 설정 화면
[그림 10] ‘방화벽 규칙 만들기’ 설정 화면(2021년 화면)

‘이름’은 적당히 만드시면 됩니다. 그리고 나머지 설정은 그대로 유지하시고 아래쪽으로 더 내려오면 다음 화면을 볼 수 있어요.

'방화벽 규칙 만들기' 설정 화면
[그림 11] ‘방화벽 규칙 만들기’ 설정 화면(2021년 화면)

나머지 항목은 그대로 두세요.

‘소스 IP 범위’에는 0.0.0.0/0으로 입력하세요. 그리고 tcp 체크 하시고 ‘500’, udp 체크하시고 ‘500, 4500’을 입력하세요. 포트를 열어주는 것입니다.

‘만들기’ 버튼을 누르세요. 그러면 아래의 화면을 볼 수 있습니다.

'방화벽' 초기 화면
[그림 12] ‘방화벽’ 초기 화면(2021년 화면)

5. VPN 서버 설치하기

아까 위에서 VM 인스턴스를 만들었잖아요. 그곳으로 다시 이동합니다.

이를 위해 GCP 초기 화면의 ‘좌측 상단 햄버거 그림’\(\rightarrow\)’Compute Engine’\(\rightarrow\)’VM 인스턴스’를 클릭하세요.

그러면 아래의 화면이 나옵니다. 그리고 VPN과 관련된 인스턴스의 끝 부분을 보시면 아래 이미지와 같이 ‘SSH’가 보일거에요. 그것을 클릭하세요.

'VM 인스턴스' 초기 화면. VPN 서버 구축을 위한 프로그램 설치와 계정 구성 등은 SSH를 통해 이루어집니다.
[그림 13] ‘VM 인스턴스’ 초기 화면. VPN 서버 구축을 위한 프로그램 설치와 계정 구성 등은 SSH를 통해 이루어집니다.(2021년 화면)

그러면 아래와 같은 화면이 나옵니다.

SSH 접속 화면
[그림 14] SSH 접속 화면

이제부터 순차적으로 아래의 명령어 한 줄씩을 복사해서 SSH에 붙여넣은 후 엔터를 치면 됩니다.

명령어가 실행중일 때는 종료될 때까지 기다린 후 다음 명령어를 복사해서 붙여 넣으세요.

sudo apt update
sudo apt upgrade
wget https://git.io/vpnsetup -O vpnsetup.sh
nano -w vpnsetup.sh

위에서 마지막 줄을 실행하면,

YOUR_IPSEC_PSK, YOUR_USERNAME, YOUR_PASSWORD

를 입력하라는 창이 열립니다.

여기에 여러분들이 VPN 접속할 때 입력할 값들을 정해서 넣으시면 됩니다. 모든 값은 작은따옴표 사이에 기재해야 합니다. 특히 IPSEC_PSK는 최소 20자의 랜덤한 문자를 사용하는 것이 좋습니다.

입력을 모두 다 하셨으면 ‘컨트롤+x’를 누르시고 ‘y’를 누른 다음 엔터를 쳐 창을 나오세요.

그 다음에 아래에 있는 명령어를 계속하여 한 줄씩 순차적으로 실행하세요.

sudo sh vpnsetup.sh
sudo service ipsec restart
sudo service xl2tpd restart

여기까지 하셨으면 끝입니다.

이제 VPN을 컴퓨터, 아이폰 등에서 접속하여 활용하시면 됩니다.

6. VPN 접속시 아래의 정보를 사용하세요.

  • type : IPsec
  • Server : 위에서 만든 고정 IP 주소
  • Account : 위에서 만든 USERNAME
  • 패쓰워드 : 위에서 만든 PASSWORD
  • Secret : 위에서 만든 IPSEC_PSK
  • (주의) 이 VPN은 expressvpn, protonvpn, nordvpn 등과 같은 유료 VPN과는 달리 하나의 고정 IP로 운영됩니다. 따라서 사용자가 많지 않은 경우 IP 익명성의 보장이 되지 않습니다. 무슨 말이냐면 이 고정 IP를 어느 시간에 누가 사용했는지 상대적으로 쉽게 알 수 있다는 뜻입니다. 너무 맹신하지 마세요. 그럴지라도 VPN을 사용하면 통신 데이터 가로채기나 패킷 엿보기 등은 여전히 어려워져 개인정보 보호에 크게 도움이 됩니다.

혹시 VPN 설치와 관련된 추가 정보가 필요하시면 아래 싸이트들을 참고하시기 바랍니다. 특히 이 글은 Hexo Project(두번째 링크)를 아주 많이 참고했습니다.

https://github.com/hwdsl2/setup-ipsec-vpn

Hexo Project https://enesto.github.io/2018/12/07/181207_google_cloud_VPN/

흥미롭고 도움이 되는 글이었나요? 리뷰를 부탁드립니다.
[Total: 3 Average: 5]

8 thoughts on “VPN 서버 구축을 위한 VM 인스턴스를 GCP에 만들기”

  1. iOS에서는 VPN 입력 했을 시 정상적으로 작동하는데, Windows에서는 연결이 안되네요.. 님이 참고했다는 그 글 들어가서 레지스트리도 깔아보고 했는데 안됩니다. 참고로 구글링해서 이미 해봤는데 안됩니다
    The L2TP connection attempt failed because the security layer encountered a processing error during initial negotiations with the remote computer.

    응답
    • 저는 아이폰과 맥을 사용하고 있는데요. 말씀하신것처럼 아이폰과 맥 환경에서는 문제없이 저도 잘 사용하고 있는 상황입니다.
      왼도우즈를 저는 전혀 사용하지 않는 상황이라 당장 어떻게 해결을 시도할 수 없는 상황입니다.
      도움을 못 드려 죄송해요.

      응답
  2. 안녕하세요 gcp 무료 크래딧 기간이 만료된 후에도 자동결제 없이 표준 속도로 전환되나요?
    직접 정책에대해 찾아봤는데 명확한 답이없네요 ㅜㅜ

    응답
  3. 연결이 실패할 가능성이 높습니다. VM에 포트 22의 0.0.0.0/0에서 오는 TCP 인그레스 트래픽을 허용하는 방화벽 규칙이 없습니다.
    이 문제가 나올때는 어떻게 해결해야할까요? ㅠㅠ

    응답
    • 죄송합니다. 저도 문제가 생길때마다 그때 그때 땜질식으로 대응을 하고 있어요. 지금 제 실력으로는 말씀하신 문제 상황을 해결해드릴 수 없어요. 정말 죄송합니다. 고수분이 계신다면 답을 좀 달아주세요. 감사합니다.

      응답

Leave a Comment