본문 바로가기
카테고리 없음

🔐 VPN 알아보기

by SuldenLion 2026. 2. 18.
반응형

VPN 완전 가이드: WireGuard vs OpenVPN 심층 비교

 

공공 Wi-Fi에서 비밀번호를 입력하는 순간, 해커가 지켜보고 있다

2024년 사이버 보안 연구에 따르면, 공항, 카페, 호텔의 무료 Wi-Fi 중 43%가 암호화되지 않았거나 취약한 암호화를 사용합니다. 이런 네트워크에서 인터넷 뱅킹을 하거나 회사 이메일에 접속하면, 같은 네트워크에 있는 공격자가 "패킷 스니핑(Packet Sniffing)"으로 모든 데이터를 가로챌 수 있습니다.

 

시나리오:

당신 → [공공 Wi-Fi] → 인터넷
              ↑
        [해커의 노트북]
   (Wireshark로 패킷 캡처)
   → ID, 비밀번호, 쿠키 탈취

VPN(Virtual Private Network, 가상 사설망) 은 이런 위험으로부터 당신을 보호합니다. 모든 인터넷 트래픽을 암호화된 터널로 전송하여, 같은 네트워크의 누구도 당신의 데이터를 읽을 수 없게 만듭니다.

현재 VPN 시장은 WireGuardOpenVPN 이라는 두 프로토콜이 양분하고 있습니다. WireGuard는 4,000줄의 간결한 코드로 빠른 속도를 자랑하고, OpenVPN은 400,000줄의 검증된 코드로 안정성을 보장합니다.

이 글에서는 VPN의 개념, WireGuard와 OpenVPN의 심층 비교, 설치 및 설정 방법, 실전 벤치마크, 그리고 트러블슈팅까지 완전히 정리하겠습니다.

 

VPN이란? — 암호화된 터널을 만드는 기술

정의

VPN(Virtual Private Network) 은 공용 인터넷 위에 암호화된 가상의 사설 네트워크를 구축하는 기술입니다.

비유:

인터넷 = 공용 고속도로 (누구나 볼 수 있음)
VPN = 공용 고속도로 위에 만든 전용 터널 (외부에서 볼 수 없음)

VPN이 하는 3가지 일

① 암호화 (Encryption)

모든 데이터를 AES-256 또는 ChaCha20으로 암호화합니다.

평문: "계좌번호 123-456-789"
암호화: "A7B3C9D2E4F1G8H5J6K7..."

중간자 공격(Man-in-the-Middle)을 당해도 암호화된 데이터만 보입니다.

 

② IP 주소 숨김 (IP Masking)

당신의 실제 IP 주소를 VPN 서버의 IP로 대체합니다.

실제 IP: 203.0.113.5 (서울)
VPN 연결 후 IP: 198.51.100.20 (미국 뉴욕)

웹사이트는 당신이 뉴욕에서 접속한 것으로 인식합니다.

 

③ 지리적 제한 우회 (Geo-Unblocking)

특정 국가에서만 접근 가능한 콘텐츠에 접속할 수 있습니다.

넷플릭스 미국 콘텐츠 → 미국 VPN 서버로 연결
중국 방화벽 우회 → 홍콩/일본 VPN 서버로 연결

 

 

VPN의 주요 사용 사례

1. 원격 근무 (Corporate VPN)

재택근무자가 회사 내부망에 안전하게 접속합니다.

집 → [VPN 터널] → 회사 네트워크
→ 내부 파일 서버, 개발 서버 접근

 

 

2. 공공 Wi-Fi 보호

카페, 공항, 호텔의 무료 Wi-Fi에서 안전하게 인터넷 사용.

 

3. 개인정보 보호

ISP(통신사)가 당신의 인터넷 사용 기록을 수집하는 것을 방지합니다.

VPN 없음: ISP가 모든 방문 사이트 기록
VPN 사용: ISP는 "VPN 서버에 연결했다"만 알 수 있음

 

 

4. 검열 우회

중국, 러시아 등 인터넷 검열이 있는 국가에서 자유로운 인터넷 접속.

 

WireGuard vs OpenVPN — 두 거인의 대결

역사와 철학

OpenVPN (2001년):

  • James Yonan이 개발
  • "보안과 유연성" 우선
  • 20년 이상 검증된 안정성

WireGuard (2016년):

  • Jason A. Donenfeld가 개발
  • "단순함과 속도" 우선
  • 리누스 토발즈도 극찬: "Work of art"

 

코드 복잡도 비교

프로토콜
코드 라인 수 의미
WireGuard ~4,000줄 감사 및 유지보수 용이
OpenVPN ~400,000줄 복잡하지만 기능 풍부

WireGuard의 철학:

"코드가 적을수록 버그도 적다. 간결함이 곧 보안이다."

OpenVPN의 철학:

"다양한 환경에 대응할 수 있는 유연성이 필요하다."

 

 

암호화 알고리즘

OpenVPN:

  • 암호화: AES-256-CBC / AES-256-GCM
  • 해시: SHA-256, SHA-512
  • 키 교환: RSA-2048 / ECDH
  • 라이브러리: OpenSSL (검증됨)

특징: 다양한 알고리즘 선택 가능 (유연성)

 

WireGuard:

  • 암호화: ChaCha20-Poly1305
  • 키 교환: Curve25519
  • 해시: BLAKE2s
  • MAC: SipHash24

특징: 고정된 최신 알고리즘 (단순성)

ChaCha20이 중요한 이유:

  • Google, WhatsApp, Cloudflare도 사용
  • AES보다 모바일/IoT에서 더 빠름 (하드웨어 가속 없이)
  • 타이밍 공격에 강함

 

성능 벤치마크 (실제 측정)

환경: Oracle Cloud Free Tier (1 vCPU, 1GB RAM)

항목
OpenVPN WireGuard
초기 연결 시간 5~10초 1~2초
최대 속도 160 Mbps 330 Mbps (2배)
CPU 사용률 16% 8% (절반)
Ping 지연 50ms 20ms (60% 감소)
재연결 시간 3~5초 즉시

결론: WireGuard가 속도, 지연, 자원 효율 모두 우수

 

프로토콜 및 포트

OpenVPN:

  • UDP (기본, 빠름) 또는 TCP (안정적)
  • 포트: 1194 (기본) 또는 443 (HTTPS 위장)
  • 장점: TCP 지원으로 방화벽 우회 유리

WireGuard:

  • UDP만 지원 (51820 기본 포트)
  • 단점: 일부 방화벽에서 차단 가능
  • 해결책: 포트 포워딩으로 443번 사용

 

설정 복잡도

OpenVPN 설정 파일 예시:

conf
# client.ovpn (약 40~100줄)
client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
verb 3

 

WireGuard 설정 파일 예시:

conf
# wg0.conf (단 10줄!)
[Interface]
PrivateKey = YOUR_PRIVATE_KEY
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = vpn.example.com:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

결론: WireGuard가 10배 이상 간결

 

WireGuard 실전 가이드

서버 설치 (Ubuntu 22.04)

bash
# 1. WireGuard 설치
sudo apt update
sudo apt install wireguard

# 2. 키 페어 생성
wg genkey | tee privatekey | wg pubkey > publickey

# 서버 개인 키
cat privatekey
# 서버 공개 키
cat publickey

 

 

서버 설정

bash
# /etc/wireguard/wg0.conf
sudo nano /etc/wireguard/wg0.conf
 
 
conf
[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.0.0.1/24
ListenPort = 51820
SaveConfig = true

# NAT 설정 (인터넷 공유)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# 클라이언트 1
[Peer]
PublicKey = CLIENT1_PUBLIC_KEY
AllowedIPs = 10.0.0.2/32

# 클라이언트 2
[Peer]
PublicKey = CLIENT2_PUBLIC_KEY
AllowedIPs = 10.0.0.3/32

 

 

IP 포워딩 활성화

bash
# 커널 파라미터 변경
sudo sysctl -w net.ipv4.ip_forward=1

# 영구 설정
echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

 

 

서버 시작

bash
# WireGuard 인터페이스 시작
sudo wg-quick up wg0

# 부팅 시 자동 시작
sudo systemctl enable wg-quick@wg0

# 상태 확인
sudo wg show

 

 

클라이언트 설정 (모바일 앱용 QR 코드)

bash
# 클라이언트 키 생성
wg genkey | tee client_private | wg pubkey > client_public

# QR 코드 생성
sudo apt install qrencode

cat << EOF | qrencode -t ansiutf8
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = YOUR_SERVER_IP:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
EOF

모바일 WireGuard 앱에서 QR 코드 스캔 → 즉시 연결!

 

OpenVPN 실전 가이드

서버 설치 (Ubuntu 22.04)

bash
# 1. OpenVPN 및 Easy-RSA 설치
sudo apt update
sudo apt install openvpn easy-rsa

# 2. PKI 디렉토리 설정
make-cadir ~/openvpn-ca
cd ~/openvpn-ca

 

CA 인증서 생성

bash
# vars 파일 편집
nano vars
 
bash
# vars 파일 내용
set_var EASYRSA_REQ_COUNTRY    "KR"
set_var EASYRSA_REQ_PROVINCE   "Seoul"
set_var EASYRSA_REQ_CITY       "Seoul"
set_var EASYRSA_REQ_ORG        "MyCompany"
set_var EASYRSA_REQ_EMAIL      "admin@example.com"
set_var EASYRSA_REQ_OU         "IT"
 
bash
# CA 초기화 및 생성
./easyrsa init-pki
./easyrsa build-ca nopass

# 서버 인증서 및 키 생성
./easyrsa gen-req server nopass
./easyrsa sign-req server server

# DH 파라미터 생성 (시간 소요)
./easyrsa gen-dh

# TLS 인증 키
openvpn --genkey secret ta.key

 

 

서버 설정

bash
# 인증서 복사
sudo cp pki/ca.crt pki/issued/server.crt pki/private/server.key pki/dh.pem ta.key /etc/openvpn/

# 설정 파일 생성
sudo nano /etc/openvpn/server.conf
 
conf
# /etc/openvpn/server.conf
port 1194
proto udp
dev tun

ca ca.crt
cert server.crt
key server.key
dh dh.pem
tls-auth ta.key 0

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"

keepalive 10 120
cipher AES-256-GCM
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3

 

 

NAT 설정

bash
# iptables 규칙
sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

# 영구 저장
sudo apt install iptables-persistent
sudo netfilter-persistent save

 

 

서버 시작

bash
# OpenVPN 시작
sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server

# 상태 확인
sudo systemctl status openvpn@server

 

 

클라이언트 설정 생성

bash
# 클라이언트 인증서 생성
cd ~/openvpn-ca
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

# client.ovpn 파일 생성 (인증서 내장)
cat << EOF > client.ovpn
client
dev tun
proto udp
remote YOUR_SERVER_IP 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
cipher AES-256-GCM
auth SHA256
verb 3
<ca>
$(cat pki/ca.crt)
</ca>
<cert>
$(cat pki/issued/client1.crt)
</cert>
<key>
$(cat pki/private/client1.key)
</key>
<tls-auth>
$(cat ta.key)
</tls-auth>
key-direction 1
EOF

 

 

WireGuard vs OpenVPN 선택 가이드

WireGuard를 선택하세요 (권장)

다음 경우:

  • 빠른 속도가 중요 (게임, 스트리밍)
  • 모바일 사용 (배터리 절약, 빠른 재연결)
  • 간단한 설정 원함
  • 최신 기술 선호
  • 개인 VPN 또는 스타트업

대표 사용자:

  • NordVPN (NordLynx = WireGuard 기반)
  • Cloudflare WARP
  • Mullvad VPN

 

OpenVPN을 선택하세요

다음 경우:

  • 검증된 안정성 필요 (20년 역사)
  • TCP 모드 필요 (방화벽 우회)
  • 복잡한 네트워크 구성 (TAP 모드, 브리지)
  • 감사 받은 라이브러리 선호 (OpenSSL)
  • 대기업, 금융기관

대표 사용자:

  • AWS Client VPN
  • 대부분의 기업 VPN
  • 레거시 시스템 통합

 

실전 시나리오

시나리오 1: 재택근무자를 위한 기업 VPN

요구사항:

  • 직원들이 집에서 회사 내부망 접근
  • 안정성 우선
  • 다양한 OS 지원 (Windows, Mac, Linux)

추천: OpenVPN

이유:

  • 20년 검증된 안정성
  • 모든 OS에서 공식 클라이언트
  • TCP 모드로 방화벽 우회
  • 기업용 관리 도구 풍부

 

시나리오 2: 개인 프라이버시 보호

요구사항:

  • 빠른 속도 (넷플릭스, YouTube)
  • 모바일 사용 (배터리 절약)
  • 간단한 설정

추천: WireGuard

이유:

  • 2배 빠른 속도
  • 모바일 앱 QR 코드 설정
  • 낮은 배터리 소모
  • 빠른 재연결 (Wi-Fi ↔ 4G 전환 시)

 

시나리오 3: 중국/러시아 등 검열 우회

요구사항:

  • DPI (Deep Packet Inspection) 우회
  • 방화벽 탐지 회피

추천: OpenVPN (TCP 포트 443)

이유:

  • TCP 모드가 HTTPS 트래픽으로 위장
  • 포트 443으로 탐지 회피
  • WireGuard는 UDP만 지원 → 차단 가능

 

트러블슈팅

문제 1: WireGuard 연결되지만 인터넷 안 됨

원인: IP 포워딩 미활성화 또는 NAT 설정 누락

해결:

bash
# IP 포워딩 확인
sysctl net.ipv4.ip_forward
# 0이면 비활성화됨

# 활성화
sudo sysctl -w net.ipv4.ip_forward=1

# NAT 규칙 확인
sudo iptables -t nat -L POSTROUTING -n -v

# NAT 규칙 추가
sudo iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

 

 

문제 2: OpenVPN 연결 느림

원인: MTU 크기 문제

해결:

conf
# server.conf에 추가
tun-mtu 1400
mssfix 1360

 

 

문제 3: 모바일에서 재연결 안 됨

WireGuard 해결:

conf
# PersistentKeepalive 추가
PersistentKeepalive = 25

 

OpenVPN 해결:

conf
# client.ovpn에 추가
persist-tun
persist-key

 

 

개발자를 위한 VPN 체크리스트

배포 전

  • 프로토콜 선택 (WireGuard vs OpenVPN)
  • 암호화 알고리즘 확인 (ChaCha20 / AES-256)
  • IP 포워딩 활성화
  • NAT 규칙 설정

보안

  • 강력한 키 사용 (Curve25519 / RSA-2048 이상)
  • DNS 누수 방지 (DNS = 1.1.1.1)
  • IPv6 비활성화 (누수 방지)
  • Kill Switch 설정

운영

  • 로그 모니터링 (journalctl -u wg-quick@wg0)
  • 주기적인 키 갱신 (90일 권장)
  • 클라이언트 수 제한
  • 대역폭 모니터링

 

마지막으로

VPN은 현대 인터넷에서 필수적인 보안 도구입니다. 공공 Wi-Fi의 패킷 스니핑, ISP의 데이터 수집, 정부의 검열 — 이 모든 것으로부터 당신을 보호합니다.

핵심 선택 기준:

① 속도가 중요하다면 → WireGuard
② 안정성이 중요하다면 → OpenVPN
③ 모바일 사용이 많다면 → WireGuard
④ 기업 환경이라면 → OpenVPN
⑤ 방화벽 우회가 필요하다면 → OpenVPN (TCP)

WireGuard 설치는 5분이면 충분합니다:

 
bash
sudo apt install wireguard
wg genkey | tee privatekey | wg pubkey > publickey
sudo nano /etc/wireguard/wg0.conf
sudo wg-quick up wg0

OpenVPN도 어렵지 않습니다. Easy-RSA 스크립트가 대부분의 작업을 자동화합니다.

VPN 없는 인터넷 사용은 문을 열어둔 집과 같습니다. 지금 당장 설정하세요.

반응형

댓글