리눅스에서 WireGuard 서버 설정 (wg0, NAT, 피어)

12분 소요 - 2026년 6월 22일

hero section cover
목차
  • WireGuard 서버를 사용할 때
  • 서버 설정
  • 피어 추가 및 제거
  • 문제 해결
  • 키 교체 및 사전 공유 키
공유

리눅스용 실용적인 WireGuard 서버 설정: 키, wg0.conf, NAT, syncconf를 이용한 피어 관리, 그리고 시스템 관리자가 실제로 사용하는 문제 해결 명령어.

호스팅된 인프라에 대한 사설 액세스가 필요하지만 관리자 포트를 공용 인터넷에 노출하고 싶지 않을 때는 WireGuard 서버를 실행하십시오. 이 서버는 공개 키 인증을 사용하며, 리눅스 커널 5.6 버전부터 내부에서 실행되며, 일단 가동되면 별도의 관리가 필요하지 않습니다. 이 게시물에서는 WireGuard 서버를 언제 사용해야 하는지, 어떻게 구동하는지 wg0, 그리고 피어 간 연결을 일상적으로 원활하게 유지하는 방법을 다룹니다.

WireGuard 서버를 사용할 때

대부분의 설정은 원격 액세스, 서버 간 연결, 사이트 간 라우팅이라는 세 가지 패턴으로 분류됩니다.

원격 액세스의 경우, VPS 또는 전용 호스트에서 서버를 실행하고 관리 트래픽을 터널을 통해 라우팅하십시오. AllowedIPs 각 피어에서 사설 관리 서브넷(예: 10.0.0.0/24)로 설정하여 내부 시스템에 대한 트래픽만 터널을 사용하도록 하십시오. 그 외의 모든 트래픽은 사용자의 로컬 연결을 통해 처리됩니다. 사용자가 가정이나 모바일 네트워크에서 연결하는 경우, NAT 세션이 끊어지지 않도록 PersistentKeepalive = 25 를 추가하여 NAT 세션이 끊어지지 않도록 하십시오.

서버 간 연결의 경우, AllowedIPs 좁게 유지하십시오. 일반적으로 단일 /32 또는 소규모 백엔드 서브넷으로 제한하십시오. 이렇게 하면 관련 없는 트래픽이 터널로 유입되는 것을 방지하고 라우팅을 예측 가능하게 유지할 수 있습니다.

사이트 간 연결은 다릅니다. WireGuard 호스트는 서브넷 간의 게이트웨이 역할을 하므로, IP 전달을 활성화해야 하며 NAT 규칙은 반환 트래픽을 올바른 인터페이스로 전송하도록 설정해야 합니다.

패턴AllowedIPs 범위가장 적합한 경우설정 난이도
원격 액세스사설 서브넷(예: 10.0.0.0/24관리자 및 개발자 액세스낮음
서버 간특정 IP 또는 백엔드 서브넷점대점 호스트 링크낮음 ~ 중간
사이트 간전체 원격 LAN, 예: /24게이트웨이 간 라우팅중간~높음
전용 서비스 액세스내부 서브넷 전용 (분할 터널)백엔드 서비스 격리중간

서버 설정

서버는 개인 키를 보관하며, 기본적으로 UDP 51820 포트를 수신 대기하며 터널을 종료합니다. 동일한 기본 설정은 위의 세 가지 패턴 모두에 적용됩니다.

키 및 wg0.conf

서버 키 쌍 생성:

wg genkey | sudo tee /etc/wireguard/server_private.key | wg pubkey | sudo tee /etc/wireguard/server_public.key

개인 키를 안전하게 보관합니다:

sudo chmod 600 /etc/wireguard/server_private.key

개인 키는 서버에 보관됩니다. 공개 키는 피어에게 전달하는 것입니다.

생성 /etc/wireguard/wg0.conf:

[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = <SERVER_PRIVATE_KEY>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o <PUBLIC_IFACE> -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o <PUBLIC_IFACE> -j MASQUERADE
 
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.8.0.2/32

다음과 같이 드롭할 아웃바운드 인터페이스를 찾습니다 <PUBLIC_IFACE> 다음과 같이:

ip -o -4 route show to default | awk '{print $5}'

포워딩, 방화벽 및 NAT

수신 대기 중인 포트를 엽니다:

sudo ufw allow 51820/udp

다음 줄을 추가하여 IP 포워딩을 활성화합니다. /etc/sysctl.conf:

net.ipv4.ip_forward = 1

재부팅 없이 적용하려면:

sudo sysctl -p

다음 PostUpPostDown 줄을 wg0.conf 인터페이스가 활성화되거나 비활성화될 때 NAT 마스커레이드 규칙을 추가하거나 제거합니다. 이 줄들이 없으면 LAN에서 반환되는 트래픽이 피어(peer)로 절대 돌아가지 못합니다.

터널을 활성화하면

wg-quick 명령은 하나의 명령으로 인터페이스, 라우팅 및 PostUp/PostDown 훅을 한 번의 명령어로 처리합니다:

sudo wg-quick up wg0

재부팅 후 자동으로 시작되도록 하려면 systemd 유닛을 활성화하십시오:

sudo systemctl enable --now wg-quick@wg0

다음 명령어로 상태를 확인합니다:

sudo wg show

최근 latest handshake 출력 내용이 터널이 정상적으로 작동하고 있음을 확인해 줍니다. 출력이 오래되었거나 비어 있는 경우, 방화벽, 양쪽의 키, 그리고 피어의 AllowedIPs.

피어 추가 및 제거

각 피어에는 고유한 키 쌍이 필요합니다. 클라이언트 측에서 키 쌍을 생성한 후, 해당 피어의 공개 키를 wg0.conf[Peer] 블록에 AllowedIPs 터널 IP를 할당하는 항목이 포함된새로운

단일 장치의 경우 /32 다음과 같이 단일 기기에 적용하세요:

AllowedIPs = 10.8.0.3/32

이렇게 하면 한 피어가 다른 피어에게 할당된 주소를 차지하지 못하게 됩니다. 분할 터널 액세스의 경우, 터널을 통해 전송되어야 하는 사설 서브넷만 나열하십시오. 예를 들어 AllowedIPs = 10.8.0.0/24.

활성 세션을 끊지 않고 구성 변경 사항을 적용하려면:

sudo wg syncconf wg0 <(wg-quick strip wg0)

피어를 제거하는 방법도 동일합니다. 해당 피어의 [Peer] block을 wg0.conf 해당블록을 삭제하고 syncconf 명령을 다시 실행하십시오.

문제 해결

피어가 연결되었으나 반대편에 있는 어떤 대상에도 접속할 수 없는 경우, 원인은 대개 다음 네 가지 중 하나입니다:

  • IP 포워딩이 비활성화되어 있음
  • NAT 마스커레이드 규칙이 누락됨
  • NAT 규칙의 아웃바운드 인터페이스가 잘못 설정되어 있음
  • AllowedIPs 목적지가 포함되어 있지 않음

포워딩 설정 확인:

cat /proc/sys/net/ipv4/ip_forward

다음과 같은 결과가 반환되어야 합니다 1. 만약 0가 반환된다면, sysctl 변경 사항이 적용되지 않았거나 저장되지 않은 것입니다.

NAT 규칙 및 아웃바운드 인터페이스를 확인하십시오:

sudo iptables -t nat -L POSTROUTING
ip route get 1.1.1.1

두 번째 명령어는 ens3, enp1s0, 또는 eth0와 같은 실제 아웃바운드 인터페이스 이름을 표시합니다. 이 이름은 MASQUERADE 규칙에 지정된 인터페이스와 일치해야 합니다.

핸드셰이크 자체가 누락된 경우, UDP 51820 가 방화벽과 모든 업스트림 공급자에서 열려 있는지, 그리고 양측이 서로에 대한 올바른 공용 키를 가지고 있는지 확인하십시오.

유휴 UDP 세션을 종료하는 가정용 또는 모바일 NAT 뒤에 있는 피어의 경우, PersistentKeepalive = 25 을 설정하십시오.

키 교체 및 사전 공유 키

몇 달 동안 유지되는 터널의 경우, 키를 1년에 한 번 정도 교체하십시오. 새로운 키 쌍을 생성하고, 양쪽 끝점을 모두 업데이트한 후 다음 명령을 사용하여 적용하십시오 wg syncconf를 통해 적용하십시오. 두 피어 간에 개인 키를 재사용하지 마십시오. 이는 라우팅 충돌을 일으키고 두 피어 간의 데이터 전송을 중단시킵니다.

공개 키 인증에 추가 보안 계층을 더하려면 피어마다 사전 공유 키를 추가하십시오:

wg genpsk

결과를 PresharedKey = <PSK> 양쪽 모두의 [Peer] 블록에 추가하십시오. WireGuard는 PSK를 핸드셰이크에 혼합하므로, 공격자가 어떤 방법으로든 비대칭 키 중 하나를 탈취하더라도 PSK 없이는 트래픽을 해독할 수 없습니다.

일상적으로 유용한 명령어:

명령어용도
wg show피어, 핸드셰이크, 트래픽 카운터
wg show wg0 transfer다음 항목에 대한 바이트 카운터 wg0
wg show all dump모니터링 스크립트용 기계 가독형 출력
wg syncconf wg0 <(wg-quick strip wg0)세션을 종료하지 않고 구성 변경 사항 적용
wg genpsk사전 공유 키 생성

WireGuard 터널을 종료하고 사설 트래픽을 인프라로 라우팅하기 위해 안정적이고 외부에서 접근 가능한 호스트가 필요하다면, FDC의 데이터 사용량 제한 없는 VPS 요금제를 확인해 보세요.

블로그

이번 주 추천

더 많은 기사
디지털 눈의 피로: 화면 사용이 많은 세상에서 시력을 보호하는 방법

디지털 눈의 피로: 화면 사용이 많은 세상에서 시력을 보호하는 방법

하루 종일 화면을 보고 계신가요? 검증된 기법과 도구를 활용해 디지털 눈의 피로를 줄이는 방법을 알아보세요. 이 가이드는 재택근무자, 개발자, 그리고 기술 분야에 종사하는 모든 분께 필수적인 정보입니다.

4분 소요 - 2025년 5월 21일

강력하고 데이터 사용량 제한이 없는 VPS를 보유하는 것이 중요한 이유

8분 소요 - 2025년 5월 9일

더 많은 기사
background image

질문이 있거나 맞춤형 솔루션이 필요하신가요?

icon

유연한 옵션

icon

글로벌 도달 범위

icon

즉시 배포

icon

유연한 옵션

icon

글로벌 도달 범위

icon

즉시 배포