크립토 투자를 하다보니 가끔 컴퓨터나 스마트폰의 IP 주소를 변경해야 할 일이 종종 생기기 시작했다. 이때문에 Deeper Network 장비를 하나 장만하기는 했지만 DNS 기반의 VPN이다보니 장점만큼이나 일부 제약도 있었다. 새로운 목적지가 생길때마다 장비 설정에서 라우팅 테이블 (Routing Table)에 등록해줘야 하는 일이 있기도 하고, 무엇보다도 설치된 곳에서 와이파이 신호가 도달하는 곳에서만 사용할 수 있다는 제약도 있었다. 상용 VPN을 사용하기는 싫고 대안을 찾다보니 OpenVPN 서버를 구성하면 손쉽게 해결이 가능해 보였다.
대안은... Open VPN 사용, 그렇다면 비용은? 일단은 무료로 구성할 수 있다. 추가적인 장비도 필요 없다. AWS에서 VPC를 구동할꺼니까. 당연히 AWS는 유료 서비스이다. 하지만, 아주 저사양의 서버는 계정을 만들고 나면 최대 12개월간 무료료 사용할 수 있게 해준다. 이로써 서버 및 고정 IP 주소 문제도 해결.
준비물
AWS 계정 + 커피 두잔 정도
AWS 계정 생성은 너무 간단하기도 하고, 이미 수많은 자료가 있으므로 생략
1. AWS 포털 (aws.amazon.com) 로그인
2. 지역 선택 - 가장 중요한 부분 !!! 선택한 지역에 AWS VPC가 만들어지므로 원하는 지역을 선택한 후 서버 배포를 시작해야 한다. AWS 포털 상단 메뉴 오른쪽에 지역을 선택할 수 있는 drop-down list가 있다. 원하는 지역을 선택한다.
All services 메뉴를 확장한 후 Compute 항목에서 EC2를 선택한다.
아래쪽으로 스크롤하여 Launch instance 메뉴를 확장 후 다시 한번 Launch instance를 클릭한다
화면 가운데 왼쪽 메뉴 중 AWS Marketplace를 선택 후 위쪽 검색란에 "openvpn"을 입력 후 나타나는 검색 결과 중 가장 첫 번째에 있는 OpenVPN Access Server가 우리가 사용할 OS image이다. Select 버튼을 클릭한다
OpenVPN Access Server의 구성과 가격표가 표시된다. Continue를 클릭하여 다음으로 넘어간다
서버 목록 중 Free tier eligible 마크가 표시된 1vCPU와 1GB Memory로 구성된 서버를 선택한 후 Review and Lauch를 클릭한다.
Free tier eligible 마크는 말 그대로 무료로 사용할 수 있다는 의미이므로 반대로 다른 사양의 서버를 선택하면 비용이 발생하게 된다. 다음으로 넘어가기 전에 반드시 다시 한번 정확히 확인하기 바란다
서버 구성을 다시 한번 확인 후 Launch 버튼을 클릭하여 서버를 생성한다
가장 중요한 단계인 Key pair 생성하기. Drop-down list에서 "Create a new key pair"를 선택한 후 Key pair name란에 사용하고자 하는 key의 이름을 입력한다. 이름 자체는 중요치 않지만 해당 서버에 접속할 때 key pair 이름이 필요하므로 서버 역할에 맞게 openvpn 등과 같이 입력 후 반드시 Download Key Pair 메뉴를 클릭하여 로컬 컴퓨터에 저장해 두어야 한다. Key pair는 이때 밖에 다운로드 받을 수 없으므로 이때 다운로드 받아두지 않으면 해당 서버 접속 시 인증을 받을 방법이 없다. 키를 다운로드 받은 후 Launch Instance 메뉴를 클릭하여 서버를 생성한다
서버 생성에는 일 이분 정도 소요된다. 서버가 생성되면 instance 이름(예: i-0a8257f743a9c0d1c)을 클릭한다
생성된 서버에 접속을 위해서 instance 상세 페이지에서 instance 이름 위에서 마우스 오른쪽 버튼을 클릭 후 Connect를 선택한다
instace 접속 옵션 중 SSH client를 선택하면 해당 서버의 IP 주소와 FQDN 및 접속 명령어가 표시된다. 이중 예시에 표시되어 있는 SSH 접속 코드를 복사해 둔다
PowerShell에서 폴더 이동은 DOS 기본 명령어인 CD <Directory Name> 으로 폴더로 이동할 수 있다.
C: 드라이브 루트로 이동할 경우 CD \ 입력 후 엔터
한단계 상위 폴더로 이동시에는 CD .. 입력 후 엔터
Downloads 폴더는 유저 프로파일 내에 위치하므로 다음과 같은 경로를 갖는다.
C:\Users\<UserName>\Downloads
예를 들어 유저 이름이 BlueShark라면 다운로드 폴더의 경로는 아래와 같다
C:\Users\BlueShark\Downloads
PowerShell 창에 아래 복사한 명령어를 붙여 넣는다. PowerShell 화면에서 마우스 오른쪽 클릭하면 붙여넣기가 된다.
ssh -i "openvpn.pem" root@ec2-18-136-105-21.ap-southeast-1.compute.amazonaws.com
Are you sure you want to continue connecting (yes/no/[fingerprint])? 프롬프트가 표시되면 yes 를 입력 후 엔터하여 접속을 진행한다.
EULA 동의 화면이 표시되면 yes를 입력 후 엔터하여 계속 진행한다
여러가지 선택 사항이 표시되는데, 대부분은 기본설정 그대로 사용하면 되므로 엔터를 입력하고 지나간다. 단, client traffic과 client DNS traffic routing 관련된 선택 사항은 yes를 입력 해야한다. 혹시 여기서 놓치고 지나가도 OpenVPN 설정 화면에서 변경은 가능하나, 어렵지 않은 부분이니 yes를 입력하도록 하자.
Should client traffic be routed by default through the VPN?
> Press ENTER for default [no]: yes
Should client DNS traffic be routed by default through the VPN?
> Press ENTER for default [no]: yes
그 외 모든 구성 관련 선택 사항을 기본 설정을 사용하면 되므로 엔터를 입력하여 진행한다. 마지막 질문 사항인 Activate key 또한 그냥 엔터를 입력한다
설정 사항에 따라 서비스가 구성되고 설치가 완료된다. 현재 root로 로그인되어 있는 상태이므로 구성이 완료되면 연결이 자동으로 종료된다. 추후 설정은 openvpnas라는 미리 만들어진 root 권한이 없는 계정을 통해 진행하여야 한다.
다시 Windows PowerShell에서 SSH를 통해 OpenVPN 서버로 접속한다. 단, 이번에는 root 계정이 아닌 openvpnas라는 계정으로 접속해야 하므로 접속 명령어에서 root 부분을 openvpnas로 변경해준다
ssh -i "openvpn.pem" openvpnas@ec2-18-136-105-21.ap-southeast-1.compute.amazonaws.com
명령 프롬프트의 openvpnas@ip-172-31-26-87:~$ 를 통해 현재 접속된 사용자가 root가 아님을 확인할 수 있다
아래 명령어를 입력하여 openvpn 유저 계정 비밀번호를 설정한다.
sudo passwd openvpn
이로써 SSH를 통한 작업은 모두 완료되었다.
기대와는 달리 OpenVPN 웹콘솔이 아닌 에러 메시지가 표시될 것이다. 이는 해당 서버에서 자체 발행한 인증서를 통해 SSL 접속을 제공하기 때문에 브라우저에서 접속이 안전하지 않을 수도 있음을 경고하는 것이다. 브라우저마다 위치가 다르겠지만 에러 메시지 하단에 있는 Advanced를 클릭 후 Accept the Risk and Continue 등과 같은 버튼을 눌러 진행한다.
드디어 OpenVPN 웹 관리화면이 열린다. 사용자 이름은 openvpn, 비밀번호는 앞서 18번 단계에서 설정한 비밀번호를 입력하여 로그인한다
최초 접속 시 표시되는 EULA (End User License Agreement)에 동의하면 OpenVN 웹콘솔에 접속된다. 좌측 메뉴에서 VPN Settings를 선택 후 Routing 섹션까지 스크롤 다운한다.
Should client Internet traffic be routed through the VPN? 부분이 Yes로 선택되어 있는지 다시 한번 확인한다. 만일 이 부분이 No로 선택되어 있다면 VPN이 접속되어 있더라도 인터넷 접속 시 VPN 서버를 통하지 않고 접속하게 되므로 IP 주소 우회를 위해 사용하는 VPN이 말짱 도루묵이 된다.
여기까지 완료하면 Open VPN 서버 구성은 모두 완료되었다.
OpenVPN은 Microsoft Windows, Mac OS, iOS, Androd 기기 등 대부분의 운영체제를 지원한다. Windwos client의 경우 OpenVPN 홈페이지에서 내려받아 설치하여도 되지만, 앞서 설치한 OpenVPN 서버에 접속 프로필이 구성되어 있는 설치 파일을 내려 받을 수 있다.
https://<OpenVPN server IP address>:943/ 을 웹 브라우저 주소창에 입력 후 접속하면 OS 별 클라이언트를 내려 받을 수 있는 페이지가 표시된다.
본 예시의 경우는 아래 주소를 입력
Mac OS, iOS 및 Android의 경우는 프로필이 사전 구성된 클라이언트가 제공되지 않으므로 각각의 앱스토어에서 내려 받는 것과 차이가 없다.
내려 받은 클라이언트 프로그램 설치 후 실행하면 이미 프로필이 생성되어 있어 해당 프로필을 선택한 후 패스워드를 입력하면 접속할 수 있다. 패스워드는 서버 구성 18번 단계에서 설정한 패스워드를 입력하면 된다.
혹시나 접속 프로필을 다시 생성할 경우 아래 정보를 사용하여 구성하면 된다
Server IP address: <서버 구성시 사용한 IP>
사용자 이름: openvpn
패스워드: 앞서 18번 단계에서 설정한 패스워드
안드로이드나 아이폰에서 접속할 경우, 프로필이 미리 생성되어 있지 않으므로 서버의 IP 주소를 함께 입력해 주어야 한다.