13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

WireGuard로 홈랩 VPN 구축하기 — 1코어 512MB면 충분한 경량 VPN

밖에서 집 홈랩에 안전하게 접속하는 방법으로, 저는 WireGuard를 씁니다. 설정이 단순하고, 빠르고, 무엇보다 1코어·512MB짜리 초경량 컨테이너 하나면 충분합니다. 실제 제 홈랩의 WireGuard 구성과 클라이언트 추가 방법을 정리합니다.

1. 왜 WireGuard인가

VPN 하면 예전엔 OpenVPN이었지만, 지금 홈랩이라면 WireGuard가 정답에 가깝습니다.

WireGuard 기존 VPN(OpenVPN 등)
설정 키 한 쌍 + 짧은 conf 인증서·설정이 복잡
속도 커널 레벨, 매우 빠름 상대적으로 느림
코드량 수천 줄(감사 쉬움) 수십만 줄
자원 1코어·512MB로 충분 더 무거움

제 홈랩에서도 WireGuard는 1코어·512MB LXC 하나에서 돌아갑니다. 이 가벼움이 홈랩엔 큰 장점입니다.

2. 동작 방식 — 공개키 한 쌍

WireGuard는 SSH처럼 공개키/개인키 쌍으로 동작합니다. 서버와 각 클라이언트(피어)가 서로의 공개키만 알면 암호화 터널이 열립니다. 서버 인터페이스는 보통 wg0, 기본 포트는 UDP 51820입니다.

# 서버 키 쌍 생성
wg genkey | tee server_private.key | wg pubkey > server_public.key

# 현재 터널 상태 확인
wg show

3. 서버 설정 (wg0.conf)

서버 설정은 /etc/wireguard/wg0.conf 하나입니다. 구조는 이렇게 단순합니다(키·IP는 예시).

[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <서버 개인키>

# 클라이언트(피어) 하나당 [Peer] 블록 추가
[Peer]
PublicKey = <클라이언트 공개키>
AllowedIPs = 10.0.0.2/32
# 인터페이스 올리기 / 부팅 시 자동 시작
wg-quick up wg0
systemctl enable wg-quick@wg0

4. 클라이언트(폰·노트북) 추가

클라이언트도 자기 키 쌍을 만들고, 서버를 [Peer]로 가리킵니다.

[Interface]
Address = 10.0.0.2/32
PrivateKey = <클라이언트 개인키>

[Peer]
PublicKey = <서버 공개키>
Endpoint = my-home.example.com:51820
AllowedIPs = 192.168.x.0/24     # 홈랩 내부망만 터널로
PersistentKeepalive = 25

여기서 AllowedIPs가 핵심입니다. 홈랩 내부 대역만 넣으면(스플릿 터널) 집 서버 접속에만 VPN을 타고 나머지 인터넷은 평소대로 나갑니다. 0.0.0.0/0을 넣으면 모든 트래픽이 집을 경유하는 풀 터널이 됩니다.

5. 실전 팁

  • 포트 하나만 UDP 개방: 51820만 열면 됩니다. 단, Cloudflare Tunnel과 달리 WireGuard는 인바운드 포트가 필요합니다(고정 IP·DDNS 조합).
  • PersistentKeepalive = 25: 공유기 NAT 뒤 클라이언트의 연결이 끊기지 않게 유지해 줍니다.
  • 키 관리: 개인키는 절대 공유 금지. 피어를 늘릴 때마다 서버 conf에 [Peer]를 추가하고 wg syncconf로 무중단 반영할 수 있습니다.
  • 스플릿 터널 권장: 대부분은 집 서버 접속만 필요하니 AllowedIPs를 내부망으로 좁히는 게 속도·배터리에 유리합니다.

밖에서 홈랩에 접속할 일이 있다면, WireGuard는 가장 가볍고 빠른 안전한 통로입니다. 라즈베리파이든 작은 LXC든 하나면 충분하니 부담 없이 올려 보시길 권합니다.