WireGuard는 OpenVPN, IPsec보다 훨씬 빠르고 설정이 간단한 현대적 VPN 프로토콜입니다. 코드베이스가 작아(약 4,000줄) 보안 감사가 용이하고 성능이 뛰어납니다.

WireGuard 설치

# Ubuntu 20.04+
sudo apt update
sudo apt install -y wireguard

# CentOS/RHEL
sudo dnf install -y epel-release
sudo dnf install -y wireguard-tools

서버 키 생성

# WireGuard 디렉터리 생성
sudo mkdir -p /etc/wireguard
sudo chmod 700 /etc/wireguard
cd /etc/wireguard

# 서버 개인키 및 공개키 생성
wg genkey | sudo tee privatekey | wg pubkey | sudo tee publickey

# 생성된 키 확인
sudo cat privatekey
sudo cat publickey

서버 설정 파일 생성

/etc/wireguard/wg0.conf:

[Interface]
# 서버 가상 IP (VPN 네트워크 대역)
Address = 10.0.0.1/24

# WireGuard 리슨 포트 (UDP)
ListenPort = 51820

# 서버 개인키 (위에서 생성한 privatekey 내용)
PrivateKey = 서버개인키내용

# 패킷 포워딩 활성화 (클라이언트가 인터넷 사용 시)
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

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

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

eth0은 서버의 실제 네트워크 인터페이스 이름으로 변경하세요 (ip link show 명령으로 확인).

IP 포워딩 활성화

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

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

방화벽 설정

# WireGuard 포트 허용 (UDP)
sudo ufw allow 51820/udp

# 또는 iptables
sudo iptables -A INPUT -p udp --dport 51820 -j ACCEPT

WireGuard 시작

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

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

# 상태 확인
sudo wg show

클라이언트 설정

클라이언트에서도 키를 생성합니다:

# 클라이언트에서 실행
wg genkey | tee client-privatekey | wg pubkey > client-publickey

클라이언트 설정 파일 (/etc/wireguard/wg0.conf 또는 앱에서 가져오기):

[Interface]
# 클라이언트 가상 IP
Address = 10.0.0.2/24

# 클라이언트 개인키
PrivateKey = 클라이언트개인키내용

# DNS 서버 (선택)
DNS = 1.1.1.1, 8.8.8.8

[Peer]
# 서버 공개키
PublicKey = 서버공개키내용

# 서버 주소 및 포트
Endpoint = 서버IP:51820

# 허용할 트래픽 범위
# VPN을 통해 모든 트래픽 라우팅
AllowedIPs = 0.0.0.0/0, ::/0

# VPN만 사용 (분할 터널링)
# AllowedIPs = 10.0.0.0/24

# 연결 유지 (NAT 환경)
PersistentKeepalive = 25

피어 추가 및 제거

# 서버에서 새 피어 실시간 추가 (재시작 불필요)
sudo wg set wg0 peer 새클라이언트공개키 allowed-ips 10.0.0.4/32

# 피어 제거
sudo wg set wg0 peer 클라이언트공개키 remove

# 설정 파일에도 반영
sudo wg-quick save wg0

연결 상태 모니터링

# 피어 연결 상태 확인
sudo wg show

# 인터페이스 통계
sudo wg show wg0

# 출력 예시:
# peer: 클라이언트공개키
#   endpoint: 클라이언트IP:포트
#   allowed ips: 10.0.0.2/32
#   latest handshake: 30 seconds ago
#   transfer: 1.44 MiB received, 4.52 MiB sent

QR 코드로 모바일 클라이언트 설정

sudo apt install -y qrencode

# 클라이언트 설정 파일을 QR 코드로 출력
qrencode -t ansiutf8 < client-wg0.conf

WireGuard는 특히 서버 관리자가 원격에서 내부 서비스에 안전하게 접근할 때 매우 유용합니다. 기존 OpenVPN 대비 설정이 훨씬 간단하고 성능도 뛰어납니다.