Jerry's Log

VPN

contents

1. 핵심 개념: VPN이란 무엇인가?

가장 근본적인 수준에서 VPN은 공용 네트워크(인터넷) 상에서 로컬 머신(클라이언트)과 원격 서버(VPN 서버) 사이에 암호화된 사설 데이터 터널을 생성하는 기술입니다.

일반적인 인터넷 사용 시 데이터의 흐름은 다음과 같이 공개됩니다:

VPN을 사용할 때:


2. 작동 원리: "터널링(Tunneling)" 프로세스

"터널"은 물리적인 케이블이 아니라, 캡슐화(Encapsulation)암호화(Encryption) 를 통해 생성된 논리적인 경로입니다.

A. 캡슐화 (패킷 안의 패킷)

편지를 보내는 상황을 상상해 보세요.

  1. 원본 데이터 (편지 내용): 실제 요청 데이터입니다(예: "https://www.google.com/search?q=Google.com 접속 요청"). 여기에는 사용자의 출발지 IP와 목적지 IP가 포함됩니다.
  2. 캡슐화 (편지 봉투): VPN 클라이언트는 이 원본 패킷을 새로운 패킷 안에 감쌉니다.
  3. 새로운 헤더: 겉면의 패킷에는 새로운 출발지(사용자)와 새로운 목적지(VPN 서버 IP)가 적힙니다.

B. 암호화 (잠금 장치)

"편지"를 "봉투"에 넣기 전에 내용을 뒤섞어 버립니다. 누군가 겉면의 패킷을 가로채서 뜯어보더라도, 해독할 수 없는 난수 코드만 보게 됩니다.

C. 처리 흐름 (Process Flow)

  1. 핸드셰이크 (Handshake): 클라이언트와 VPN 서버가 공개 키를 교환하여 신원을 확인하고 "세션 키"에 동의합니다.
  2. 암호화: 사용자의 컴퓨터가 세션 키(주로 AES-256)를 사용하여 데이터를 암호화합니다.
  3. 전송: 암호화된 데이터가 캡슐화되어 VPN 서버로 전송됩니다.
  4. 복호화: VPN 서버가 패킷을 받아 겉면을 벗겨내고, 세션 키를 사용해 내부 데이터를 복호화합니다.
  5. 전달 (Forwarding): 서버는 원본 요청을 최종 목적지(예: https://www.google.com/search?q=Google.com)로 보냅니다.
  6. 반환: 응답 데이터에 대해 이 과정이 역으로 진행됩니다.

3. VPN 프로토콜: 통신 규칙

프로토콜은 터널이 형성되는 방식과 암호화 처리 방식을 결정합니다. VPN 선택 시 가장 기술적으로 중요한 부분입니다.

프로토콜 아키텍처 속도 보안 비고
WireGuard 최신, 경량화 매우 빠름 높음 (ChaCha20) 새로운 업계 표준입니다. 커널(OS 핵심) 레벨에서 동작하며, 코드 라인 수가 약 4,000줄(OpenVPN은 10만 줄 이상)에 불과하여 빠르고 감사가 용이합니다.
OpenVPN 전통적, 강력함 보통 매우 높음 (AES-256) 오랫동안 사용된 표준입니다. 설정이 유연(TCP/UDP)하지만, "컨텍스트 스위칭" 오버헤드로 인해 WireGuard보다 느립니다.
IKEv2/IPsec 모바일 친화적 빠름 높음 WiFi에서 LTE/5G로 전환될 때 즉시 재연결되므로 모바일 기기에 적합합니다. iOS/macOS에 내장되어 있습니다.
L2TP/IPsec 구형 느림 좋음 이중 캡슐화로 인해 속도가 느리며, 방화벽에 의해 쉽게 차단됩니다. 거의 사장되었습니다.
PPTP 구형 (사용 금지) 빠름 취약함 90년대 Microsoft가 개발했습니다. 보안이 매우 취약하여 쉽게 해킹됩니다. 사용하지 마세요.

4. 암호학 (Cryptography): 내부 구조

"매우 상세한" 설명을 위해 데이터를 보호하는 수학적 원리를 살펴보겠습니다.


5. VPN 아키텍처의 종류

A. 원격 액세스 VPN (Remote Access - 소비자/직원용)

일반적으로 사람들이 말하는 "VPN"입니다.

B. 사이트 간 VPN (Site-to-Site - 기업용)


6. 고급 기술 기능

분할 터널링 (Split Tunneling)

어떤 앱을 VPN으로 보내고, 어떤 앱을 일반 ISP로 보낼지 선택하는 기능입니다.

킬 스위치 (Kill Switch)

VPN 연결이 끊어질 경우 인터넷을 차단하는 안전장치입니다.

난독화 (Obfuscation / Stealth Mode)

검열(예: 중국의 황금방패)을 우회하기 위해 사용됩니다.


7. 신뢰의 역설 (중요!)

VPN은 익명성을 완벽하게 보장하는 것이 아니라, 신뢰의 대상을 옮기는 것입니다.

요약

VPN은 두 지점 간의 트래픽을 인증하고 암호화하는 보안 도구입니다. WireGuard와 같은 프로토콜을 사용하여 데이터 패킷을 캡슐화하고, AES나 ChaCha20으로 암호화하여 IP 주소를 숨기고 외부 감시로부터 데이터 무결성을 보호합니다.


클라우드를 활용해서 상용 VPN보다 훨씬 저렴한 비용(월 $3~$5 수준)으로 데이터에 대한 완전한 통제권을 가질 수 있는 나만의 VPN 서버 구축 방법을 두 가지(Algo, OpenVPN)로 나누어 보겠습니다.


사전 준비 (Prerequisites)

먼저 클라우드 서버 (VPS) 가 필요합니다.


옵션 1: Algo VPN (추천)

Algo는 개인용 IPsec 및 WireGuard VPN 설정을 단순화해주는 Ansible 스크립트 모음입니다. 보안 전문가 그룹(Trail of Bits)이 개발했으며, 기본적으로 보안이 강화된 상태로 설정됩니다.

단계별 가이드

  1. 로컬 환경 준비

Algo는 서버가 아니라 사용자의 로컬 컴퓨터(macOS) 에서 실행됩니다. 스크립트가 클라우드 제공업체 API를 호출하여 서버를 대신 생성해 줍니다.

  1. Algo 다운로드

터미널을 열고 다음을 입력합니다:

git clone https://github.com/trailofbits/algo.git
cd algo
  1. 의존성 패키지 설치

Algo는 필요한 Python 라이브러리와 Ansible을 설치하는 헬퍼 스크립트를 제공합니다.

python3 -m venv env
source env/bin/activate
python3 -m pip install -U pip
python3 -m pip install -r requirements.txt

4. 배포 마법사 실행

./algo

대화형 마법사가 실행되며 몇 가지 질문을 합니다:

  1. Provider: 클라우드 제공업체 선택 (예: DigitalOcean, EC2 등).

  2. API Keys: API 토큰 입력 (클라우드 대시보드에서 미리 생성해야 함).

  3. Region: 서버 위치 선택 (한국에서 속도를 원하면 서울/도쿄, 콘텐츠 우회를 원하면 미국).

  4. VPN On Demand: iOS/macOS 기능 (Wi-Fi 접속 시 자동 연결 여부).

  5. 결과 확인

Algo가 서버를 생성하고, OS 보안을 강화하고, WireGuard/IPsec을 설치한 뒤 연결을 종료합니다.

로컬 컴퓨터의 configs/ 폴더 안에 다음 파일들이 생성됩니다:


옵션 2: OpenVPN (헬퍼 스크립트 사용)

전통적인 OpenVPN 방식을 선호하거나 이미 가지고 있는 서버에 설치하고 싶다면, 커뮤니티에서 널리 쓰이는 Nyr의 스크립트를 사용하는 것이 좋습니다.

단계별 가이드

  1. 서버 생성

클라우드 제공업체(예: DigitalOcean)에서 수동으로 "Droplet"(서버)을 생성합니다 (Ubuntu 22.04 권장).

2. 서버에 SSH 접속

ssh root@<서버_IP_주소>
  1. 설치 스크립트 실행

다음 명령어를 복사하여 붙여넣으면 설치 스크립트가 다운로드되고 실행됩니다:

wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh

4. 프롬프트 답변

  1. 설정 파일 가져오기

스크립트가 완료되면 /root/my_iphone.ovpn 파일이 생성됩니다. 이 파일을 로컬 컴퓨터로 가져와야 합니다.


클라이언트 설정 (연결 방법)

기기 Algo (WireGuard) OpenVPN
macOS App Store에서 WireGuard 설치. configs 폴더의 .conf 파일을 드래그 앤 드롭. OpenVPN Connect 또는 Tunnelblick 설치. .ovpn 파일을 드래그 앤 드롭.
iOS WireGuard 앱 설치. Algo가 생성한 QR 코드를 스캔하거나 .conf 파일을 AirDrop으로 전송. OpenVPN Connect 설치. .ovpn 파일을 앱으로 공유.
Windows WireGuard 클라이언트 설치. .conf 파일 가져오기(Import). OpenVPN GUI 설치. config 폴더에 .ovpn 파일 복사.

자가 구축 시 고려사항 (중요)

  1. 익명성 vs 프라이버시:
    • 상용 VPN: ISP로부터 나를 숨겨주며, VPN 업체는 (주장하건대) 사용자가 누구인지 모릅니다(여러 사용자가 IP를 공유).
    • 개인 VPN: ISP로부터는 숨겨주지만, 클라우드 제공업체(AWS, DigitalOcean 등)는 사용자가 누구인지 정확히 알고 있습니다. 결제 정보가 사용자 본인 명의이기 때문입니다. 또한 IP 주소가 사용자 혼자에게만 할당됩니다.
    • 결론: 공용 Wi-Fi 보안이나 지역 차단 우회용으로는 훌륭하지만, 불법적인 활동이나 완벽한 익명성을 위해서는 적합하지 않습니다.
  2. 유지보수:
    • 상용 VPN은 넷플릭스가 IP를 차단하면 즉시 다른 IP로 교체해 줍니다.
    • 개인 VPN은 넷플릭스가 내 서버 IP를 차단하면, 서버를 삭제하고 새로 만들어야 하는 번거로움이 있습니다.
  3. Oracle Cloud 무료 티어 팁:
    • Oracle Cloud는 "평생 무료(Always Free)" 티어에서 꽤 고성능의 ARM 인스턴스를 제공합니다. 이를 활용하면 WireGuard VPN을 비용 0원으로 운영할 수 있어 개발자들 사이에서 매우 인기가 높습니다.

references