wg
wg는 WireGuard tunnel interface의 전용 configuration을 조회하고 변경하는 command-line utility다. interface 생성·삭제, IP address와 route 설정은 운영체제의 network tool이 담당한다.
Summary
- command를 생략하면
show가 기본값이다. show는 interface와 peer의 runtime 상태를,set계열은 WireGuard 전용 설정을 다룬다.genkey,pubkey,genpsk로 key material을 생성·변환한다.wg set의 runtime 변경은 configuration file에 자동으로 기록되지 않는다.
Installation
wg는 일반적으로 wireguard-tools 또는 WireGuard client package에 포함된다.
Debian / Ubuntu
sudo apt update sudo apt install wireguard
Fedora
sudo dnf install wireguard-tools
RHEL 8
WireGuard upstream이 명시한 RHEL 절차는 RHEL 8용이다. 다른 major version에는 해당 배포판의 현재 package 지침을 확인한다.
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm sudo yum install kmod-wireguard wireguard-tools
macOS
brew install wireguard-tools
Windows
공식 WireGuard installer 또는 MSI는 tunnel service에서 사용할 수 있는 표준 wg utility를 제공한다. Windows Package Manager community source를 사용할 때는 다음 package를 설치할 수 있다.
winget install --exact --id WireGuard.WireGuard
설치 확인
wg --version wg help
wg가 설치되어 있지 않아 live help를 실행하지 않았다. command와 argument는 upstream wg(8) manual을 기준으로 정리했다.
Usage
wg COMMAND [OPTIONS] ARGS
sudo wg show sudo wg show wg0
Commands
| Command | 역할 |
|---|---|
show | interface configuration과 runtime 상태 출력 |
showconf | 현재 설정을 wg configuration 형식으로 출력 |
set | interface 또는 peer의 runtime 설정 변경 |
setconf | file 내용으로 현재 설정 교체 |
addconf | file 내용을 현재 설정에 추가 |
syncconf | 현재 설정과 file의 차이만 반영 |
genkey | base64 private key 생성 |
genpsk | base64 preshared key 생성 |
pubkey | standard input의 private key에서 public key 계산 |
help | usage 출력 |
Key Generation
private key 파일이 다른 사용자에게 노출되지 않도록 restrictive umask를 먼저 적용한다.
umask 077 wg genkey | tee privatekey | wg pubkey > publickey wg genpsk > presharedkey
privatekey는 해당 peer 밖으로 공유하지 않는다.publickey만 상대 peer의PublicKey에 등록한다.presharedkey는 선택 사항이며 양쪽 peer에 안전한 별도 경로로 전달한다.- terminal 화면, shell argument, chat, ticket에 실제 key를 붙여 넣지 않는다.
Status
sudo wg show sudo wg show wg0 sudo wg show interfaces sudo wg show wg0 latest-handshakes sudo wg show wg0 transfer ip address show dev wg0 ip route show
latest-handshakes, endpoints, allowed-ips, transfer, dump 같은 selector는 script-friendly output을 제공한다. pretty output에서는 private key와 preshared key가 기본적으로 숨겨진다.
Configuration
현재 설정 출력
sudo wg showconf wg0
peer runtime 설정
sudo wg set wg0 peer PEER_PUBLIC_KEY \ endpoint vpn.example.com:51820 \ allowed-ips 10.10.0.2/32 \ persistent-keepalive 25
peer 제거
sudo wg set wg0 peer PEER_PUBLIC_KEY remove
wg set의 runtime 변경은 file에 자동으로 저장되지 않으므로 source of truth와의 차이를 관리한다.
session 중단을 줄인 반영
wg-quick 전용 항목을 제거한 configuration의 차이만 활성 interface에 반영한다.
sudo wg syncconf wg0 <(sudo wg-quick strip wg0)
address, DNS, route, MTU 또는 hook은 wg의 관리 범위가 아니므로 별도 lifecycle 처리가 필요할 수 있다.
Troubleshooting
Handshake가 없음
sudo wg show wg0 sudo ss -lunp | grep 51820 ip route get PEER_ENDPOINT_IP
- 양쪽
PublicKey, 선택적PresharedKey, server의ListenPort를 확인한다. - UDP firewall/NAT port forwarding과 endpoint hostname·port를 확인한다.
- NAT 뒤에서 수신을 기다려야 하는 peer에만
PersistentKeepalive = 25를 고려한다.
Handshake는 있지만 traffic이 없음
- 양쪽
AllowedIPs가 겹치거나 빠지지 않았는지 확인한다. - interface address, route, forwarding과 firewall forwarding policy를 확인한다.
- site-to-site 또는 internet gateway에서는 return route와 NAT 정책을 별도로 검토한다.
Compatibility
wg는 WireGuard 전용 설정을 다루며 Linux의 link, address, route 자체는ipcommand 등이 담당한다.- Windows tunnel service도 표준
wgutility로 runtime 상태를 조회·변경할 수 있지만 service lifecycle은 Windows 전용 interface를 따른다.
Help
See Also
History
- codex:: 2026-08-13 WireGuard 문서에서 wg command reference를 분리했다.