리눅스에서 WireGuard 서버 설정 (wg0, NAT, 피어)
12분 소요 - 2026년 6월 22일

리눅스용 실용적인 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다음 PostUp 와 PostDown 줄을 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 요금제를 확인해 보세요.

전용 서버에 Ollama AI 모델을 호스팅하는 방법
데이터 보안을 유지하고, 확장성을 보장하며, 성능을 향상시키기 위해 전용 서버에서 Ollama AI 모델을 호스팅하는 방법을 알아보세요.
5분 소요 - 2025년 9월 8일

질문이 있거나 맞춤형 솔루션이 필요하신가요?
유연한 옵션
글로벌 도달 범위
즉시 배포
유연한 옵션
글로벌 도달 범위
즉시 배포