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 대비 설정이 훨씬 간단하고 성능도 뛰어납니다.