공공 와이파이에서 인터넷을 하고 계시다면, 같은 네트워크에 있는 누군가가 내 패킷을 가로채고 있을 수 있습니다. 카페, 공항, 호텔 와이파이는 암호화되어 있지 않은 경우가 대부분입니다. 은행 로그인, 비밀번호, 메신저 내용이 전부 노출됩니다. VPN을 쓰면 이 트래픽이 암호화 터널을 통과합니다. 상용 VPN에 매월 돈을 내는 대신, VPS 하나로 내 VPN을 만들 수 있습니다. WireGuard를 쓰면 5분이면 됩니다.
공공 와이파이의 위험
공공 와이파이는 편리하지만 보안은 거의 없습니다. 같은 네트워크에 있는 누구나 ARP 스푸핑, 패킷 스니핑 도구로 다른 사용자의 트래픽을 엿볼 수 있습니다. 공짜 와이파이라며 함정(AP)을 설치하는 공격자도 있습니다. ‘Starbucks_Free_WiFi’라는 이름의 가짜 와이파이에 연결하는 순간, 모든 트래픽이 공격자 서버를 거쳐갑니다.
HTTPS가 적용된 사이트는 어느 정도 보호됩니다. 암호화가 되어 있으니까요. 하지만 모든 사이트가 HTTPS인 건 아닙니다. 그리고 DNS 쿼리 자체는 암호화되지 않아, 어떤 사이트에 접속하는지는 노출됩니다. VPN은 이 모든 트래픽을 암호화 터널 안에 넣습니다. DNS 쿼리까지 암호화됩니다.
VPN을 쓰면 공공 와이파이 사업자, 같은 네트워크의 다른 사용자, 중간 패킷 감시자 전부가 내 트래픽을 읽을 수 없습니다. 암호화된 데이터만 보입니다. 목적지는 VPN 서버의 IP로 나타납니다.
왜 WireGuard인가
VPN 프로토콜은 여러 가지가 있습니다. OpenVPN, IPSec, L2TP, PPTP… 근데 WireGuard가 현재 가장 빠르고 가벼운 프로토콜로 평가받습니다. 리누스 토르발스가 ‘예술 작품’이라고 극찬한 기술입니다.
WireGuard는 다른 VPN 프로토콜이 수천 줄인 코드를 4천 줄로 줄였습니다. 간결함이 곧 보안입니다. 뭐가 안 들어가서 안전한 게 아니라, 뭐가 들어갔는지 전부 검증할 수 있어서 안전한 겁니다. 코드가 짧으니 취약점이 발견되면 빨리 수정할 수 있습니다.
속도도 빠릅니다. 최신 암호화 알고리즘(ChaCha20, Poly1305, Curve25519)을 사용해서 기존 프로토콜보다 처리량이 높고 지연이 낮습니다. 모바일에서 배터리 소모도 적습니다. 연결이 끊겼다가 복구되는 핸드오버도 매끄럽습니다.
Linux 커널 5.6부터 정식 포함되었습니다. Ubuntu 20.04 이상이면 커널 모듈이 기본입니다. 설치가 매우 간단합니다.
WireGuard 서버 구축 — 5분
먼저 VPS 서버에 WireGuard를 설치합니다.
# WireGuard 설치
sudo apt update
sudo apt install wireguard
서버의 개인키와 공개키를 생성합니다. 이 키 쌍이 암호화의 핵심입니다.
# 키 생성
wg genkey | tee privatekey | wg pubkey > publickey
# privatekey: 서버 개인키 (절대 유출 금지)
# publickey: 서버 공개키 (클라이언트 설정에 들어감)
서버 설정 파일을 만듭니다. /etc/wireguard/wg0.conf에 작성합니다.
[Interface]
PrivateKey = <서버_개인키>
Address = 10.0.0.1/24
ListenPort = 51820
# 클라이언트 피어
[Peer]
PublicKey = <클라이언트_공개키>
AllowedIPs = 10.0.0.2/32
Address는 VPN 내부 IP입니다. 10.0.0.0/24 대역을 쓰면 최대 253개 클라이언트를 연결할 수 있습니다. ListenPort 51820번은 WireGuard 기본 포트입니다. UDP를 사용합니다.
설정이 끝나면 VPN을 시작합니다.
# VPN 시작
sudo wg-quick up wg0
# 부팅 시 자동 시작
sudo systemctl enable wg-quick@wg0
# 상태 확인
sudo wg
sudo wg를 입력하면 현재 연결된 피어, 데이터 전송량, 핸드셰이크 시간이 나옵니다. latest handshake가 recent하면 정상 연결된 것입니다.
클라이언트 설정
클라이언트(폰, 노트북)에서도 같은 방식으로 키를 생성합니다. 그리고 클라이언트 설정 파일을 만듭니다.
[Interface]
PrivateKey = <클라이언트_개인키>
Address = 10.0.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = <서버_공개키>
Endpoint = <서버_IP>:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
AllowedIPs = 0.0.0.0/0은 모든 트래픽을 VPN 터널로 보내라는 뜻입니다. 특정 대역만 VPN으로 보내고 나머지는 직접 연결하려면(분할 터널링) 대역을 지정하면 됩니다.
클라이언트 공개키를 서버의 [Peer] 섹션에 추가해야 합니다. 이게 핵심입니다. 서버와 클라이언트가 서로의 공개키를 교환해야 연결이 됩니다.
WireGuard 공식 클라이언트 앱(Windows, macOS, iOS, Android)을 쓰면 설정 파일을 가져오기(import)만 하면 됩니다. 터미널 명령어를 칠 필요가 없습니다.
다중 클라이언트 연결하기
폰, 노트북, 태블릿을 전부 VPN에 연결하려면 클라이언트마다 고유한 키 쌍과 IP를 할당해야 합니다. 서버 설정 파일에 [Peer] 섹션을 추가하면 됩니다.
# /etc/wireguard/wg0.conf — 여러 클라이언트
[Interface]
PrivateKey = <서버_개인키>
Address = 10.0.0.1/24
ListenPort = 51820
# 클라이언트 1: 노트북
[Peer]
PublicKey = <노트북_공개키>
AllowedIPs = 10.0.0.2/32
# 클라이언트 2: 폰
[Peer]
PublicKey = <폰_공개키>
AllowedIPs = 10.0.0.3/32
# 클라이언트 3: 태블릿
[Peer]
PublicKey = <태블릿_공개키>
AllowedIPs = 10.0.0.4/32
각 클라이언트는 자신의 IP(10.0.0.2, 10.0.0.3, 10.0.0.4)를 받습니다. 설정 파일에서 Address와 서버의 AllowedIPs가 일치해야 합니다. 새 클라이언트를 추가할 때마다 서버에 [Peer] 블록을 하나씩 추가하고 sudo wg-quick down wg0 && sudo wg-quick up wg0로 재시작합니다.
방화벽 설정
UFW 방화벽을 쓰고 있다면 51820번 UDP 포트를 열어야 합니다. TCP가 아닙니다. WireGuard는 UDP만 사용합니다.
# 51820번 UDP 허용
sudo ufw allow 51820/udp
# 상태 확인
sudo ufw status
주의. WireGuard는 UDP만 사용합니다. TCP 폴백이 없습니다. 일부 회사 네트워크나 호텔 와이파이에서 UDP를 막는 경우가 있습니다. 이런 환경에서는 WireGuard가 작동하지 않습니다. TCP 기반 VPN이 필요하면 다른 프로토콜을 고려하세요. 방화벽 기본 설정은 UFW 방화벽 가이드(EP24)를 참고하세요.
연결 문제 트러블슈팅
클라이언트에서 연결이 안 되는 경우, 다음을 순서대로 확인합니다.
# 1. 서버에서 51820번이 열려 있는지 확인
sudo ss -ulnp | grep 51820
# 2. 클라이언트에서 서버로 핑 (VPN 내부 IP)
ping 10.0.0.1
# 3. 서버에서 핸드셰이크 로그 확인
sudo wg
# latest handshake가 없으면 키 불일치 또는 포트 문제
# 4. UFW에서 51820/udp가 허용되어 있는지 확인
sudo ufw status | grep 51820
# 5. MTU 문제 의심 (연결되나 속도가 0)
# 클라이언트 설정에 MTU 추가
# [Interface]
# MTU = 1360
가장 흔한 원인은 공개키/개인키 불일치입니다. 서버의 [Peer] PublicKey에 클라이언트의 공개키가 정확히 들어가 있는지, 반대로 클라이언트의 [Peer] PublicKey에 서버의 공개키가 들어가 있는지 다시 확인하세요. sudo wg 출력에서 latest handshake가 비어 있으면 키 문제일 확률이 높습니다.
정리
자체 VPN, VPS 하나면 충분합니다. 상용 VPN에 매월 5천 원~1만 원을 내는 대신, VPS 한 대로 내 VPN을 운영할 수 있습니다. WireGuard는 설치가 간단하고 속도가 빠릅니다. 공공 와이파이에서 안전하게 인터넷을 하고 싶다면, 자체 VPN이 가장 비용 효율적인 해결책입니다.
UFW 방화벽 설정(EP24)과 Let’s Encrypt SSL(EP25)을 먼저 적용했다면, VPN까지 구축해서 VPS 보안 스택이 거의 완성됩니다. VPN 서버 자체도 Fail2ban으로 보호하면 더 안전합니다. 구독하고 VPS 실전 팁 매주 받아보세요. 데이터 백업은 rsync 자동 백업 가이드(EP27)를 참고하세요.



















