WireGuard · 2026-02-18

IPv6 전용 네트워크에서 WireGuard 설정

IPv6 전용 네트워크에서 WireGuard를 설치하고 인터페이스, 라우팅, 방화벽 설정 및 검증 절차를 포함하여 설명하는 실무 중심의 구성 방법

작성일 : 2026-02-18 ㆍ 작성자 : 관리자
post
목차

개요

이 문서는 IPv6 전용 네트워크 환경에서 WireGuard를 구성하는 방법을 단계별로 설명한다. 대상 독자는 IPv4/IPv6 네트워크의 기본 개념을 알고 있지만, IPv6 전용 VPN 구성은 처음 접하는 사람도 이해할 수 있도록 설명을 구성했다. 핵심 목표는 안정적인 터널링과 적절한 라우팅, 방화벽 정책 설정을 통해 클라이언트와 서버 간 IPv6 패킷이 원활히 흐르도록 하는 것이다. 본문에서는 실제 설정 예제와 검증 절차를 제시한다.

사전 준비

필수 조건

  • 커널이 WireGuard를 지원하거나 wireguard-tools 설치 가능
  • 서버와 클라이언트가 각자 고유한 IPv6 주소 체계 또는 ULA(fd00::/8) 범위를 보유
  • 관리 권한(root)과 기본 네트워크 명령(ip, sysctl, nft 또는 ip6tables) 사용 권한

설계 고려사항

  • IPv6 전용 네트워크에서 NAT는 일반적으로 사용하지 않으므로 라우팅 기반 설계가 권장된다
  • 프라이빗 주소 체계로 ULA(fd00::/64 등)를 사용하면 외부 라우터 의존도를 줄일 수 있다
  • 서버는 클라이언트에게 라우팅 정보를 제공하거나 각 클라이언트에 고정 주소를 할당하는 방식 선택

키 생성 및 기본 파일 구조

WireGuard 키는 서버와 클라이언트 각각에서 생성한다. 공개키와 개인키를 파일로 관리한다.

wg genkey | tee server_private.key | wg pubkey > server_public.key
wg genkey | tee client_private.key | wg pubkey > client_public.key

서버 측 설정

서버는 터널 인터페이스에 IPv6 주소를 할당하고 클라이언트로부터 들어오는 트래픽을 포워딩한다. 예시 구성은 다음과 같다.

[Interface]
Address = fd00:10:0::1/64
ListenPort = 51820
PrivateKey = SERVER_PRIVATE_KEY

# Peer: client
[Peer]
PublicKey = CLIENT_PUBLIC_KEY
AllowedIPs = fd00:10:0::2/128

위 구성에서 Address는 서버의 터널 주소이며 AllowedIPs는 해당 클라이언트가 사용하는 IPv6 주소를 지정한다. 서버 쪽에서는 각 클라이언트에 대해 Peer 블록을 추가한다.

클라이언트 측 설정

클라이언트는 서버의 공개키와 엔드포인트 정보를 사용한다. 엔드포인트는 서버의 IPv6 주소 또는 도메인과 포트로 입력한다.

[Interface]
Address = fd00:10:0::2/128
PrivateKey = CLIENT_PRIVATE_KEY

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = 2001:db8::1:51820
AllowedIPs = ::/0

AllowedIPs에 ::/0을 넣으면 모든 IPv6 트래픽이 터널을 통해 라우팅된다. 필요에 따라 특정 프리픽스만 허용하도록 조정한다.

IPv6 포워딩 및 시스템 설정

서버에서 IPv6 포워딩을 활성화해야 패킷이 터널과 물리 인터페이스 사이에 전달된다. 다음은 일시적 설정과 영구 설정 예시이다.

# 즉시 적용
sysctl -w net.ipv6.conf.all.forwarding=1
# 영구 적용: /etc/sysctl.d/99-wireguard.conf에 저장
net.ipv6.conf.all.forwarding = 1

방화벽 설정 (nftables 예시)

IPv6 전용 환경에서는 포워드 체인과 WireGuard 포트를 허용해야 한다. 간단한 nftables 규칙 예시는 다음과 같다.

nft add table ip6 wg
nft 'add chain ip6 wg input { type filter hook input priority 0 ; }'
nft 'add chain ip6 wg forward { type filter hook forward priority 0 ; }'
# WireGuard 포트 허용
nft add rule ip6 wg input udp dport 51820 accept
# 터널 인터페이스에서 포워드 허용
nft add rule ip6 wg forward iifname "wg0" accept
nft add rule ip6 wg forward oifname "wg0" accept

상황에 따라 추가적인 포트나 서비스 규칙을 구성한다. 관리 목적의 접근 제어는 input 체인에서 별도 처리한다.

라우팅과 프리픽스 광고

IPv6 전용 환경에서는 클라이언트에 라우트를 알려주어야 외부로의 접근이 가능하다. 서버가 클라이언트에게 고정 주소를 할당하면 별도 라우팅 없이도 터널 내부 통신이 가능하다. 만약 서버가 네트워크의 게이트웨이 역할을 수행하는 경우 다음과 같이 라우트를 추가한다.

# 서버에서 특정 네트워크로 향하는 트래픽을 wg0으로 라우팅
ip -6 route add fd00:10:1::/64 dev wg0

프리픽스 광고(RA)가 필요한 환경이라면 radvd 또는 systemd-networkd의 설정을 통해 내부 네트워크에 프리픽스를 배포할 수 있다. 다만 VPN 터널 상에서는 일반적으로 정적 주소 할당이 더 간단하다.

검증 절차

  • wg show으로 터널 상태 확인: handshake와 전송량 확인
  • ping6 fd00:10:0::1 같은 명령으로 엔드 투 엔드 연결 확인
  • tcpdump -i wg0 ip6로 터널 내부 트래픽 관찰

문제 해결 팁

  • 연결 불가: 서버와 클라이언트의 공개키/개인키 쌍이 올바르게 매칭되었는지 확인
  • 라우팅 문제: AllowedIPs 값이 올바른지와 서버의 포워딩 설정 확인
  • 방화벽 차단: nftables/ip6tables 규칙이 WireGuard 포트 및 포워딩을 허용하는지 점검
  • 패킷 손실/지연: MTU 설정 문제 가능성. MTU 값을 낮춰 재검증

권장 사항

운영 환경에서는 키 관리를 엄격히 하고, 로그와 모니터링을 통해 접속 상태를 지속적으로 확인하는 것이 중요하다. 또한 IPv6 라우팅 정책을 문서화하여 네트워크 변경 시 혼선을 줄이는 것이 바람직하다.

요약

이 글은 IPv6 전용 네트워크에서 WireGuard를 구성하는 전체 흐름을 다루었다. 키 생성, 서버/클라이언트 설정, IPv6 포워딩, 방화벽 규칙, 라우팅, 검증 방법을 포함하여 실무에서 적용 가능한 구성 방법을 제시했다. 필요에 따라 AllowedIPs나 라우팅 방식을 조정하면 다양한 IPv6 전용 VPN 시나리오에 대응할 수 있다.

IPv6 WireGuard 설정 WireGuard IPv6 구성 IPv6 전용 VPN WireGuard WireGuard 설정 IPv6 라우팅 IPv6 방화벽 WireGuard 키 생성 nftables IPv6