WireGuard · 2025-12-10

Raspberry Pi에 WireGuard 서버 구축하기

라즈베리파이에서 WireGuard 서버를 설치하고 초기 설정, 방화벽 구성, 클라이언트 연결 파일 생성까지 단계별로 정리한 설명서

작성일 : 2025-12-10 ㆍ 작성자 : 관리자
post
목차

개요

이 문서에서는 라즈베리파이에서 WireGuard VPN 서버를 구축하는 전체 과정을 설명한다. 처음 접하는 사람도 따라할 수 있도록 준비물, 설치, 설정, 방화벽, 클라이언트 구성, 테스트까지 순서대로 정리했다. 라즈베리파이를 원격 접속, 내부 네트워크 보호, 안전한 터널링 용도로 활용하려는 경우에 유용하다.

사전 준비

필수 장비 및 환경

  • 라즈베리파이(모델 3 이상 권장)와 최신 Raspberry Pi OS(raspbian) 설치
  • SSH 또는 로컬 터미널 접근 권한
  • 공인 IP 또는 포트 포워딩이 설정된 라우터
  • 기본 네트워크 및 sudo 권한

네트워크 확인

공유기에서 UDP 51820 포트 포워딩을 라즈베리파이 내부 IP로 설정한다. 고정 내부 IP를 사용하거나 DHCP 예약을 설정하면 관리가 편하다.

WireGuard 설치

Raspberry Pi OS는 WireGuard 패키지를 공식 저장소에서 제공한다. 먼저 시스템을 업데이트한 뒤 설치한다.

sudo apt update
sudo apt upgrade -y
sudo apt install wireguard -y

키 생성

서버와 클라이언트 각각 고유한 키 쌍이 필요하다. 아래 명령으로 키를 생성하고 안전한 경로에 저장한다.

umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
wg genkey | tee client_private.key | wg pubkey > client_public.key
wg genpsk > preshared.key

서버 설정 파일 작성

/etc/wireguard/wg0.conf 파일을 만들어 기본 인터페이스와 피어 정보를 입력한다. IP 대역은 내부 전용으로 사용한다(예: 10.99.0.0/24).

[Interface]
PrivateKey = SERVER_PRIVATE_KEY
Address = 10.99.0.1/24
ListenPort = 51820
SaveConfig = true

# 클라이언트 예시
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
PresharedKey = PSK_VALUE
AllowedIPs = 10.99.0.2/32

위에서 SERVER_PRIVATE_KEY, CLIENT_PUBLIC_KEY, PSK_VALUE는 앞서 생성한 값을 각 파일에서 복사해 붙여넣는다.

네트워크 포워딩 및 방화벽

IP 포워딩 활성화

패킷 포워딩을 위해 sysctl 설정을 적용한다.

sudo sysctl -w net.ipv4.ip_forward=1
# 영구 적용
sudo sh -c 'echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf'

iptables 예시

외부 인터넷 접근을 허용하려면 NAT 규칙을 추가한다. 인터페이스 이름은 실제 환경에 맞춰 변경한다(예: eth0 또는 wlan0).

sudo iptables -t nat -A POSTROUTING -s 10.99.0.0/24 -o eth0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wg0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
# 규칙 저장(배포판에 따라 방법 상이)
sudo sh -c 'iptables-save > /etc/iptables.rules'

서비스 시작 및 자동시작

구성을 마친 뒤 WireGuard 인터페이스를 올리고 자동 시작을 설정한다.

sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo systemctl status wg-quick@wg0

클라이언트 구성

클라이언트에는 다음과 같은 설정 파일을 만든다. 플랫폼에 따라 앱을 사용하거나 config 파일을 가져다 쓰면 된다.

[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.99.0.2/32
DNS = 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
PresharedKey = PSK_VALUE
Endpoint = your.public.ip:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

Endpoint는 라즈베리파이의 공인 IP 또는 DDNS 주소와 포트로 설정한다. AllowedIPs는 트래픽 라우팅 범위를 지정한다. 전체 트래픽을 터널링하려면 0.0.0.0/0을 사용한다.

연결 확인 및 문제 해결

  • 서버에서 상태 확인: sudo wg show
  • 로그 확인: sudo journalctl -u wg-quick@wg0
  • 포트 열림 확인: 외부에서 UDP 51820 포트가 접근 가능한지 테스트
  • 클라이언트에서 ping 테스트: ping 10.99.0.1

보안 권장사항

  • 개인키와 PSK는 권한을 제한해 저장한다(umask 077).
  • 필요하지 않은 경우 AllowedIPs를 최소한으로 제한한다.
  • 정기적으로 소프트웨어 업데이트를 적용한다.
  • 공개 와이파이에서 접근할 때는 클라이언트 측 방화벽을 함께 설정한다.

마무리

이제 라즈베리파이에 WireGuard 서버가 설치되어 외부에서 안전하게 내부 네트워크에 접속할 수 있다. 설정 과정은 비교적 단순하므로 요구사항에 따라 AllowedIPs와 방화벽 규칙을 조정하면 다양한 용도로 활용 가능하다.

라즈베리파이 WireGuard 서버 Raspberry Pi WireGuard 설치 raspbian WireGuard 설정 WireGuard 설치 라즈베리파이 VPN WireGuard 서버 구성 WG 설정 라즈베리파이 네트워크 보안