GCP에서 WireGuard VPN 설치와 구성
Google Cloud Compute Engine에서 WireGuard VPN을 설치하고 네트워크·방화벽 설정, 클라이언트 구성 예제를 포함해 실무 적용 가능한 설정
목차
개요
이 문서는 Google Cloud(GCP) 환경에서 WireGuard VPN을 Compute Engine 인스턴스에 배포하는 절차를 단계별로 설명한다. 처음 접하는 사용자도 이해할 수 있도록 사전 준비, 인스턴스 생성, WireGuard 설치·설정, 방화벽 규칙 적용, 클라이언트 구성 및 테스트까지 구체적인 예제를 포함한다.
사전 준비
시작 전에 확인할 항목은 다음과 같다.
- 프로젝트와 결제 설정이 활성화된 GCP 계정
- Compute Engine API 활성화 및 충분한 권한
- 퍼블릭 IP를 할당할 VM 인스턴스(예: Ubuntu LTS 권장)
- 기본적인 SSH 접속 및 루트 권한 사용 가능
1단계: Compute Engine 인스턴스 생성
인스턴스는 최소한 1 vCPU, 1GB 이상의 메모리를 권장한다. 운영체제로 Ubuntu 20.04/22.04를 사용하면 패키지 설치가 간편하다. 외부 접속을 위해 정적 퍼블릭 IP를 할당하고, 방화벽에서 UDP 포트(기본 51820)를 허용한다.
권장 인스턴스 설정
- OS: Ubuntu 22.04 LTS
- Machine type: e2-medium 또는 그 이상
- 네트워크: 기본 VPC 또는 전용 VPC
- 방화벽: UDP 51820 허용
2단계: WireGuard 설치
SSH로 VM에 접속한 뒤 패키지를 설치한다. Ubuntu 기준으로 apt를 사용하면 된다.
sudo apt update
sudo apt install -y wireguard wireguard-tools
3단계: 서버 키와 구성 파일 생성
서버에서는 키를 생성한 후 인터페이스 설정 파일을 만든다. 예제는 wg0로 진행한다.
umask 077
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
SERVER_PRIV=$(cat /etc/wireguard/server_private.key)
SERVER_PUB=$(cat /etc/wireguard/server_public.key)
기본 서버 구성 예시는 다음과 같다. 프라이빗 네트워크는 10.10.0.0/24를 사용한다.
sudo tee /etc/wireguard/wg0.conf << 'EOF'
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY_PLACEHOLDER
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
# Peer entries will be added per client
EOF
위 파일에서 SERVER_PRIVATE_KEY_PLACEHOLDER를 생성한 키로 치환한다.
4단계: 방화벽과 라우팅 설정
GCP 콘솔 또는 gcloud CLI에서 인스턴스에 대한 방화벽 규칙을 추가한다. 예시는 UDP 51820을 허용하는 규칙이다.
gcloud compute firewall-rules create allow-wireguard-51820 \
--direction=INGRESS --priority=1000 --network=default \
--action=ALLOW --rules=udp:51820 --source-ranges=0.0.0.0/0
서버 내부에서는 IP 포워딩을 활성화한다.
sudo sysctl -w net.ipv4.ip_forward=1
# 영구 설정
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
5단계: WireGuard 서비스 시작 및 자동화
wg-quick을 사용해 인터페이스를 올리고 systemd로 자동 시작 설정을 한다.
sudo systemctl enable wg-quick@wg0
sudo systemctl start wg-quick@wg0
sudo wg show
6단계: 클라이언트 구성 예제
클라이언트도 키를 생성하고 서버의 PublicKey와 AllowedIPs를 지정한다. 예시는 모바일 또는 다른 Linux 클라이언트를 위한 설정이다.
# 클라이언트 키 생성
wg genkey | tee client_private.key | wg pubkey > client_public.key
# 클라이언트 설정 (예: client.conf)
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.10.0.2/32
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = SERVER_PUBLIC_IP:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
클라이언트의 PublicKey 값을 서버의 wg0.conf에 Peer로 추가하고, AllowedIPs에 클라이언트 주소를 넣는다.
7단계: 테스트 및 문제 해결
테스트는 다음 절차로 진행한다.
- 서버에서
wg show로 피어 연결 상태 확인 - 클라이언트에서 내부 IP(예: 10.10.0.1)로 핑 테스트
- 퍼블릭 IP를 통한 인터넷 접속이 가능하면 NAT 설정 정상
문제가 발생하면 방화벽 규칙, ip_forward 설정, /etc/wireguard/wg0.conf의 키와 주소를 우선적으로 점검한다.
운영 고려사항
운영 시에는 다음 사항을 고려한다.
- 키 관리: 주기적인 키 교체와 안전한 백업
- 로그 및 모니터링: 접속 로그와 네트워크 사용량 점검
- 확장성: 다수 클라이언트는 서브넷 설계와 동적 할당 정책 검토
- 보안: 관리용 포트 접근 제어, 최소 권한 원칙 적용
결론
WireGuard는 구성과 성능 면에서 효율적인 VPN 솔루션이다. 이 문서의 절차를 따르면 GCP Compute Engine에 안정적으로 WireGuard를 배포하고 운영할 수 있다. 필요에 따라 인증 통합, 오토스케일링 또는 고가용성 구성을 추가해 보완하면 더욱 안전한 네트워크 환경을 유지할 수 있다.