Azure VM에서 WireGuard 구성(IPv6 포함)
Azure VM 환경에서 WireGuard를 설치하고 IPv6 주소를 포함해 안전하게 구성하는 절차와 핵심 설정을 초보자도 이해하기 쉬운 설명으로 정리한 설정
목차
개요
이 문서는 Azure VM에 WireGuard를 설치하고 IPv6을 포함한 네트워크를 구성하는 방법을 단계별로 설명한다. 목표는 안전한 VPN 터널을 만들고 Azure 네트워크 보안 규칙과 연동해 안정적으로 운영하는 것이다. Azure WireGuard 설정과 WireGuard IPv6 Azure 적용 방법을 중심으로 설명한다.
사전 준비
필수 항목
- Azure 구독과 CLI 접근 권한
- Ubuntu 20.04 이상을 사용하는 VM 권장
- 퍼블릭 IPv4 및 IPv6 주소(또는 IPv6 프라이빗/퍼블릭 구성 이해)
네트워크 고려사항
Azure에서 IPv6는 VNet에 IPv6 주소 공간을 추가하고 서브넷을 IPv6로 설정하거나, 퍼블릭 IPv6 주소를 네트워크 인터페이스에 연결해서 사용한다. NSG(Network Security Group)에서 UDP 포트 허용을 잊지 않는다.
Azure 리소스 생성(예시: Azure CLI)
간단한 예로 VNet과 IPv6 퍼블릭 IP, VM을 만든다. 리소스 이름은 환경에 맞춰 변경한다.
az group create --name myResourceGroup --location korea-central
az network vnet create --resource-group myResourceGroup --name myVnet --address-prefixes 10.0.0.0/16 2001:db8:1::/48 --subnet-name mySubnet --subnet-prefixes 10.0.0.0/24 2001:db8:1::/64
az network public-ip create --resource-group myResourceGroup --name myPublicIPv6 --sku Standard --version IPv6
az vm create --resource-group myResourceGroup --name myWgVm --image UbuntuLTS --admin-username azureuser --vnet-name myVnet --subnet mySubnet --public-ip-address myPublicIPv6 --size Standard_B1s --generate-ssh-keys
WireGuard 설치
VM에 접속한 뒤 WireGuard를 설치한다. Ubuntu 기준으로 apt 패키지를 사용한다.
sudo apt update
sudo apt install -y wireguard qrencode
서버 키 생성 및 구성
키를 생성하고 기본 구성 파일을 만든다. 실제 비밀키는 안전하게 보관한다.
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
cat > /etc/wireguard/wg0.conf <<'WGCONF'
[Interface]
Address = 10.10.0.1/24, fd86:ea04:1111::1/64
ListenPort = 51820
PrivateKey = $(cat server_private.key)
SaveConfig = true
# Peer 예시
#[Peer]
#PublicKey = CLIENT_PUBLIC_KEY
#AllowedIPs = 10.10.0.2/32, fd86:ea04:1111::2/128
WGCONF
sudo chmod 600 /etc/wireguard/wg0.conf
커널 및 포워딩 설정
IPv4와 IPv6 포워딩을 활성화하고 영구적으로 설정한다.
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.conf
echo 'net.ipv6.conf.all.forwarding=1' | sudo tee -a /etc/sysctl.conf
방화벽 및 NAT
서버에서 인터넷 출입을 허용하려면 간단한 iptables/nft 규칙을 추가한다. UDP 51820 포트는 Azure NSG에서도 허용한다.
sudo iptables -A FORWARD -i wg0 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# IPv6 라우팅은 NAT가 아닌 라우팅 기반으로 처리
Azure NSG 설정
네트워크 보안 그룹에서 UDP 51820 인바운드를 IPv4 및 IPv6 대상으로 허용한다. 포트를 변경했다면 해당 포트로 설정한다.
클라이언트 설정 예시
클라이언트 키를 생성하고 서버에 피어로 등록한다. 클라이언트 구성에 서버의 IPv6 주소를 AllowedIPs에 포함한다.
# 클라이언트 키 생성
wg genkey | tee client_private.key | wg pubkey > client_public.key
# 클라이언트 구성 예
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.10.0.2/32, fd86:ea04:1111::2/128
DNS = 1.1.1.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 2001:db8:1::2:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25
서버에 클라이언트 등록
서버의 wg0.conf에 피어 정보를 추가하거나 wg set 명령으로 런타임에 추가한다.
sudo wg set wg0 peer CLIENT_PUBLIC_KEY allowed-ips 10.10.0.2/32,fd86:ea04:1111::2/128
sudo wg show
sudo systemctl enable --now wg-quick@wg0
검증 및 문제 해결
- wg show로 핸드셰이크와 전송량 확인
- ping으로 IPv4와 ping6로 IPv6 연결 확인
- Azure NSG와 VM 내부 방화벽이 모두 포트를 허용하는지 점검
운영 팁
로그를 주기적으로 확인하고, 키 교체 정책을 마련한다. 또한 IPv6는 NAT 없이 라우팅되므로 라우팅 정책과 접근 제어를 신중히 설계한다. Azure WireGuard 설정 시 네트워크 아키텍처를 먼저 정리하면 문제가 줄어든다.
결론
이 절차를 따르면 Azure VM에서 WireGuard를 통해 IPv4·IPv6을 모두 사용하는 안전한 VPN 환경을 만들 수 있다. 필요에 따라 추가적인 모니터링과 자동화 스크립트를 적용해 확장성을 확보한다.