Skip to main content

자동으로 Outline VPN 서버 구축하기

ghdwlsgur
Blog Owner

Outline VPN은 사용자가 직접 서버를 설정하고 관리할 수 있게 해주는 오픈 소스 VPN 도구입니다. 다른 유료 VPN 서비스와 비교한다면 Outline VPN은 아래와 같은 장점을 가지고 있습니다.

  • 사용자가 직접 서버를 관리하기 때문에 VPN 서비스 제공업체가 사용자의 활동을 기록하는 데 대한 걱정을 할 필요가 없습니다. 따라서 실질적으로 제로 로그 정책을 실현할 수 있습니다.
  • 사용자가 자신만의 VPN 서버를 설정하고 필요에 따라 설정을 변경할 수 있기 때문에 사용자 자신에게 맞춘 최적화된 성능과 보안을 제공할 수 있습니다. 예를 들어, 클라우드 서버(VPN 서버)의 스펙을 자신이 원하는 설정으로 생성할 수 있어 트래픽이 많이 발생하는 상황에서 쾌적하게 VPN 서버를 사용하고 싶다면 그만큼 높은 인스턴스 스펙으로 서버를 생성할 수 있고 VPN을 사용하지 않는다면 VPN 서버를 삭제하여 탄력성 있게 사용하고 사용한 만큼 비용이 청구되는 클라우드의 특성으로 비용을 절감할 수 있습니다.
  • Outline VPN은 암호화를 사용하여 데이터를 보호하며 사용자가 서버를 직접 관리하기 때문에 추가적인 보안 조치를 취할 수 있습니다.
  • 공유 VPN 서버 대신 클라우드 서버(VPN 서버)의 주인인 자신만 사용함으로써 사용자는 더 빠른 속도와 더 나은 성능을 경험할 수 있습니다. 서버의 트래픽 또한 내가 사용한 만큼만 발생하기 때문에 피크 시간에 서버의 속도가 저하되는 문제를 방지할 수 있습니다.
  • Outline Client 앱은 Android, Windows, iOS, MacOS, Linux와 같은 모든 운영 체제와 호환됩니다.
  • 직접 확인하지는 않았지만 중국의 황금 방패도 우회 가능하다고 알려져 있습니다.

이러한 장점에도 불구하고 Outline VPN을 사용하기 위해서는 VPN 서버를 사용자가 직접 구축하므로 약간의 기술적 지식이 필요할 수 있습니다. 이러한 기술적 제약을 없애고 많은 사용자가 사용할 수 있도록 만든 CLI 프로그램을 소개해드릴까 합니다.


Outline VPN 서버를 구축하는 방법에 대해서는 많은 인터넷 블로그에서도 소개되고 있으며 그중에서도 간편하게 구축할 수 있는 AWS Lightsail를 많이 활용하는 글이 많이 보입니다.

하지만 서버에 VPN을 설정하는 과정에서 사용자가 직접 VPN 서버에 접속하여 도커를 설치하고 Shadowsocks를 설정해야 하고 서버로 접속할 수 있는 포트번호를 방화벽에 추가하고 최종적으로 액세스 키를 발급 받기 위해서 Outline VPN Manager에 발급받은 Api URL을 등록하는 과정이 필요하고 이러한 과정을 모두 거쳐 액세스 키를 발급받았다면 Outline VPN Client에 액세스 키를 등록하여 VPN을 사용할 수 있게 됩니다. 이러한 절차들은 사용자를 번거롭게 합니다.

그렇다면 이러한 과정을 모두 생략할 수는 없을까요 ?

outline-vpn CLI 프로그램을 사용한다면 가능합니다.

  1. 먼저 AWS 콘솔에서 AccessKeySecretKey를 발급받고 aws configure 명령을 통해 발급받은 액세스키와 씨크릿키를 등록합니다.
$ aws configure
AWS Access Key ID [None]: # 액세스키 붙여넣기
AWS Secret Access Key [None]: # 씨크릿키 붙여넣기
Default region name [None]: # 엔터
Default output format [None]: # 엔터
  1. outline-vpn apply 명령을 실행합니다. 먼저 VPN 서버를 생성하려는 위치를 지정합니다. (AWS에서는 리전을 선택합니다.)

outline1

이러한 리전 리스트들은 AWS 계정의 활성화된 리전만을 보여주며 만약 생성하려는 리전이 위에 보이지 않는다면 AWS 콘솔로 접속하여 해당 리전을 활성화해야 합니다.

  1. 가용성 영역을 선택합니다.

outline2

AWS는 리전 내에서도 각 가용성영역, 즉 데이터센터들로 구분됩니다. 위에 보이는 4가지 가용성 영역은 각각 하나의 데이터센터를 의미하며 각 데이터센터는 물리적으로 분리되어 있습니다.

  1. 이미지를 선택합니다.

outline3

기본적으로 OS는 Amazon Linux를 사용합니다.

  1. 인스턴스 타입(스펙)을 선택합니다.

outline4

인스턴스 스펙별 요금은 https://instances.vantage.sh에서 비교할 수 있습니다.

  1. Yes를 클릭하면 위에서 선택한 설정대로 VPN 서버가 생성됩니다.

outline5

  1. 인스턴스 생성과 설정이 모두 완료되면 아래와 같이 Outline Client에 사용할 수 있는 액세스 키와 Outline Manager에 사용할 수 있는 apiURL, certSha256이 발급됩니다.

outline6

  1. outline-vpn CLI 프로그램을 사용한다면 별도의 Outline VPN Manager는 필요하지 않으므로 다운로드 받은 Outline VPN Client 앱에 액세스 키를 등록하여 VPN을 사용합니다.

outline7

만약 이렇게 VPN 서버를 만들었다면 VPN을 사용한 이후 VPN 서버를 삭제하거나 VPN 서버를 계속 유지하고 싶을 수 있습니다.

유지한다면 위에서 발급받은 액세스 키를 메모해두고 사용해야 할까요?

그렇지 않습니다.

outline-vpn get accesskey 명령을 통해서 VPN 서버를 선택한 뒤 액세스 키를 조회하고 조회한 액세스 키 중 하나를 선택해서 복사한 뒤 Outline VPN Client에 붙여넣어 VPN 서비스를 사용하실 수 있습니다.

outline8

그밖에도 outline-vpn create accesskey로 액세스 키를 추가로 생성하거나 outline-vpn delete accesskey로 액세스 키를 삭제할 수 있습니다. 기본적으로 outline-vpn CLI 프로그램을 통해 생성한 VPN 서버는 서버를 생성한 주인의 아이피만 허용하도록 설정되기 때문에 VPN 서버의 액세스 키가 타인에게 노출되더라도 VPN을 사용할 수 없습니다.

위의 경우에는 내가 직접 생성한 VPN 서버를 계속 유지해야 하는 경우 액세스 키를 필요로 할 때 사용할 수 있는 방법입니다.

하지만 VPN 서버를 삭제하고 싶을 때는 어떻게 할까요?

클라우드는 사용한 만큼 과금이 되기 때문에 서버를 생성하고 사용하지 않아도 데이터 센터 내부에서 24시간내내 내가 생성한 서버는 가동되기 때문에 비용이 청구됩니다. 따라서 내가 생성한 VPN 서버 목록을 볼 수 있어야 합니다.

  • outline-vpn find명령으로 내가 생성한 VPN 서버 리스트를 볼 수 있습니다.

outline9

여기서 ID는 인스턴스의 고유 아이디를 의미하며 PUBLIC IP는 공인 아이피, LAUNCH TIME은 인스턴스를 생성한 시간, INSTANCE TYPE은 인스턴스 스펙, REGION은 인스턴스를 생성할 국가 및 지역을 의미합니다.

  • 현재 생성한 VPN 서버 목록을 보았으니 이번에는 삭제할 차례입니다. outline-vpn destroy를 입력하여 삭제하려는 VPN 서버를 선택한 뒤 Yes를 선택하여 삭제를 진행합니다.

outline10

여기까지 엔터 몇 번으로 Outline VPN 서버를 자동으로 구축하는 과정이었습니다. 이제 이 CLI 프로그램을 다운로드 받는 방법에 대해서 알려드릴게요.

설치 방법

  • outline-vpn CLI는 MacOS (인텔, Apple 칩)을 지원합니다.
  • outline-vpn CLI를 사용하기 위해서는 terraformjq, rsync 유틸리티가 필요하며 이 세 가지 유틸을 다운로드 받은 후에 다음 과정을 진행하여 다운로드 받을 수 있습니다.

유틸리티 다운로드 스크립트를 다운로드 받은 다음에 스크립트를 실행하여 terraformjq, rsync 유틸을 우선적으로 다운로드 받습니다.

아래 스크립트는 위에 있는 유틸리티 다운로드 스크립트 파일 내용입니다. 다운로드 받았다면 다운 받은 파일을 실행합니다. 예를 들어, 다운로드 받은 스크립트 파일이 lib_download_7이라면 sh lib_download_7을 커맨드 라인에 입력합니다.

#!/bin/bash

# Function to check if a command is installed
check_command() {
command -v $1 >/dev/null 2>&1
}

# Function to install a command if it's not already installed
install_command() {
echo "Installing $1..."
if [ "$(uname)" == "Darwin" ]; then
# macOS
brew install $1
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
# Linux
sudo apt-get update
sudo apt-get install -y $1
else
echo "Unsupported operating system. Please install $1 manually."
exit 1
fi
}

# Check and install jq
if ! check_command "jq"; then
install_command "jq"
fi

# Check and install rsync
if ! check_command "rsync"; then
install_command "rsync"
fi

# Check and install terraform
if ! check_command "terraform"; then
install_command "terraform"
fi

echo "All required commands are installed."

마지막으로 brew를 사용하여 CLI 프로그램을 다운로드 받습니다.

brew tap ghdwlsgur/outline-vpn
brew install outline-vpn

명령어 모음집

사용할 수 있는 명령어는 간단하며 아래 내용을 참고하여 자동으로 나만의 VPN 서버를 구축하고 사용해보세요.

outline-vpn apply # VPN 서버 생성
outline-vpn destroy # VPN 서버 삭제
outline-vpn find # 생성된 VPN 서버 조회
outline-vpn get accesskey # 액세스키 조회
outline-vpn create accesskey # 액세스키 생성
outline-vpn delete accesskey # 액세스키 삭제