Google Cloud Platform 에 VPN 서버 만들기 With Algo (1)

Hyobum Jung
Typed 개발팀 블로그
8 min readJan 2, 2022

목차

  • 글을 읽기에 앞서
  • VPN 서버를 만드는 이유
  • Algo VPN 을 선택한 이유
  • 사전 준비 사항
  • Google Cloud Platform 에 Algo VPN 서버 설치
  • Wireguard 를 통한 VPN 접속
  • 마치며

글을 읽기에 앞서

이 글은 초보 인프라 개발자, 간단한 VPN 구축에 관심있는 개발자를 대상으로 작성한 글입니다. Docker 에 대한 기본지식과, Cloud Service 에 대한 기본 지식이 필요합니다.

Docker 컨테이너를 사용하여 Google Cloud Platform (이하 GCP) 에 Algo VPN 을 설치하는 방법 위주로 다룰 예정이며, 주의사항과 커스텀 방법에 대해서 다룰 예정입니다.

VPN 서버를 만드는 이유

VPN 서버를 사용하는 이유는 다양할 수 있지만, 서비스 회사에서 VPN 서버를 고려하는 데에는 보안상의 이유때문일 것입니다. 외부와 연결될 필요가 없는 서비스는 외부로의 연결을 막아서 최대한 정보가 유출될 가능성 자체를 막아둘 필요가 있습니다. 하지만 이렇게 전부 막게 된다면, 개발을 하게되는 개발자 역시 접속할 방법이 없어집니다.

이보다 완벽한 보안이 있을까?

그래서 내부망을 구성할때, 외부와의 연결을 허용하는 public subnet 과, public subnet 과의 연결을 제외한 나머지 연결을 허용하지 않는 private subnet 두개로 구성하고, public subnet 에 VPN 서버를 생성하여 연결을 중개해 줍니다.

사용자를 대신해서 접근해줄 수 있는 서버가 필요하다

VPN 서버를 사용하면, public 한 접근을 허용하는 환경보다 훨씬더 안전한 방식으로 서비스를 운용할 수 있습니다. 그리고, 테스트 서버, Swagger 서버 등등 내부에서만 접근 가능한 서버를 운영하기도 훨씬 수월해집니다.

Algo VPN 을 선택한 이유

우선 제가 VPN 서버를 선택할때 고려한 점은, SSH 접근이 가능할것, VPN 연결이 다양한 기기에서 쉽게 가능할것, VPN 서버 구축방법이 가능한 쉬울것 이었습니다.

Algo VPN 서버는 SSH 연결 방법을 지원하고, Wireguard 라는 VPN Client 프로그램을 통해서, Mac, Window, Linux, Android, IOS 등의 환경에서 손쉽게 연결이 가능합니다. 또한, Docker 와 Ansible 을 통해서 AWS, GCP, local 등등의 다양한 환경에 손쉽게 구축이 가능합니다.

이러한 이유로, Algo VPN 서버를 선택하였고, GCP 환경에서 Algo VPN 서버를 구축하고, 사용하는 방법에 대해서 공유하고자 합니다.

사전 준비 사항

  • Google Cloud Platform 계정
  • Docker 컨테이너를 돌릴 수 있게 세팅된 컴퓨터
  • GCP Service Account Key Json 파일

해당 Service Account 는 Project Compute Engine 의 Create, Delete 권한을 가지고 있어야 합니다. 테스트를 목적으로 하신다면, Editor 권한을 가진 계정의 Key Json 파일로 테스트 하시는 것을 추천드립니다.

Google Cloud Platform 에 Algo VPN 서버 설치

Algo VPN 서버 설치에 앞서, Algo 의 설치 방식에 대해서 간략히 설명하면, Algo 는 Ansible 이라는 인프라 배포 도구를 통하여 다양한 클라우드 환경 뿐만 아니라 로컬 환경의 설치를 지원합니다. 또한, Docker 를 통한 설치를 지원하기 때문에, 별도의 세팅없이 쉽게 구현이 가능합니다.

기본적인 세팅을 하기 위한 directory 는 다음과 같습니다.

├── data
│ └── config.cfg
└── service-account.json

service-account.json 은 GCP Service Account Key Json 파일이고, data/config.cfg 파일은 https://github.com/trailofbits/algo 의 config.cfg 파일을 가져왔습니다. config.cfg 파일은 VPN user 계정, 클라우드의 인스턴스 스팩등을 설정해줄 수 있지만, 이것만으론 설정에 부족함이 있으며, 이 부분에 대해서는 다음편에서 다룰 예정입니다.

Algo VPN 세팅에 필요한 환경변수를 export 해주고,

$ export ALGO_ARGS="-e 
provider=gce
region=asia-northeast3
server_name=algo
gce_credentials_file=/algo/service-account.json
ondemand_cellular=false
ondemand_wifi=false
dns_adblocking=true
ssh_tunneling=true
store_pki=true
do_token=token"

docker 를 실행해 vpn 을 만들어 줍니다.

$ docker run --cap-drop=all -it \
-v $(pwd)/data:/data \
-v $(pwd)/service-account.json:/algo/service-account.json \
-e "ALGO_ARGS=$ALGO_ARGS" \
trailofbits/algo:latest

약 5~10분정도의 시간이 지나면 배포가 완료가 되며, 아래와 같은 완료 메세지는 꼭 보관해주도록 합니다. 그리고, data 폴더 밑에 configs 폴더가 생성된것을 확인할 수 있습니다.

그리고, GCP 의 VPC Network 와 Compute Engine 을 보면 아래와 같이 생성된것을 확인 할 수 있습니다.

VPC Network
Compute Engine

주의사항!

Cloud 를 통한 VPN 생성후 삭제를 하지 않으면, 지속적으로 금액이 청구 될 수 있으니, 테스트가 끝나면 VPC, Compute Engine 에 생성된 내역을 삭제 바랍니다.

Wireguard 를 통한 VPN 접속

Algo VPN 서버를 이용하기 위해 Algo 에서는 Wireguard 의 사용을 지원합니다. 그리고 Wireguard 는 다양한 환경에서 사용이 가능하도록 앱을 지원하고 있습니다.

이번 테스트에서는 Mac 과 IPhone 에서의 사용을 보여드리려고 합니다.

Mac

App Store
설치 및 실행 후 우측 상단에 아이콘을 확인 할 수 있습니다

설치 및 실행후 우측상단에서 Manage Tunnels 를 실행하면 다음과 같은 화면을 확인할 수 있습니다.

그리고 중앙의 import tunnel(s) from file 버튼을 누르고, data/configs/[ip number]/wireguard 디렉토리로 접근하면, config.cfg 을 수정하지 않았다는 전제하에 3명의 user file (desktop, laptop, phone) 이 생성된것을 확인 할 수 있습니다. 이중 하나를 선택하여 import 해줍니다. 그 후 active 를 누르면 VPN 접속을 할 수 있습니다.

이제 Active 만 누르면 끝
VPN 접속 상태에서 ip 주소를 확인하면, 기존과는 다른 ip 주소를 볼 수 있습니다

IPhone

설치 및 실행 화면

IPhone 의 경우에도 마찬가지로 앱을 설치 및 실행하고, Add a tunnel 버튼을 누르면 아래와 같이 3가지 선택중 하나로 VPN 접속 설정을 할 수 있는데, 이 중 QR 코드를 이용해 간편한 접속이 가능합니다. QR 코드는 data/configs/[ip number]/wireguard 에 있는 .png 파일에 있습니다.

VPN 접속후에는 다른 ip 주소를 확인할 수 있습니다

마치며

이번 포스트에서는 Algo 를 통한 VPN 생성과 Wireguard 를 통한 VPN 접속에 대해서 알아보았습니다. 하지만 이것만으론 실제 프로젝트에서 바로 적용해보기에 어려움이 있습니다. 피어링 연결방법, 커스텀한 세팅등, 그래서 다음 포스트에선 이러한 부분에 대해서 다루어 보고자 합니다.

저희 팀과 함께 Typed의 인프라와 서버를 만들어 나가고 싶으신 분은 언제든 채용공고를 확인해주세요.

참고

--

--