{{tag>[cli wg-quick wireguard network vpn linux security]}} ====== wg-quick ====== ''wg-quick''은 common use case에서 WireGuard interface를 간단히 시작하고 종료하는 script다. ''wg''와 운영체제의 network command를 감싸 address, MTU, route, 선택적 DNS와 hook을 함께 처리한다. ===== Summary ===== * ''up''은 interface를 만들고 configuration, address, MTU와 route를 적용한다. * ''down''은 interface를 종료·제거하고 선택적으로 현재 설정을 저장한다. * ''save''는 interface를 내리지 않고 현재 configuration을 저장한다. * ''strip''은 ''wg-quick'' 전용 key를 제거해 ''wg''에 전달할 형식으로 출력한다. ===== Installation ===== ''wg-quick''은 Unix 계열 환경의 ''wireguard-tools''에 포함된다. ==== Debian / Ubuntu ==== sudo apt update sudo apt install wireguard ==== Fedora ==== sudo dnf install wireguard-tools ==== RHEL 8 ==== 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 이 upstream 절차는 RHEL 8 전용이다. 다른 major version에는 그대로 적용하지 않는다. ==== macOS ==== brew install wireguard-tools ==== Windows ==== Windows용 WireGuard는 native manager와 tunnel service를 사용하며 Unix shell script인 ''wg-quick''을 기본 workflow로 제공하지 않는다. ==== 설치 확인 ==== wg-quick --help 현재 문서 작성 환경에는 ''wg-quick''이 설치되어 있지 않아 live help를 실행하지 않았다. command와 동작은 upstream ''wg-quick(8)'' manual을 기준으로 정리했다. ===== Usage ===== * ''**wg-quick** up|down|save|strip INTERFACE|CONFIG_FILE'' sudo wg-quick up wg0 sudo wg-quick down wg0 interface 이름만 주면 일반적으로 ''/etc/wireguard/INTERFACE.conf''를 찾는다. file path를 직접 줄 때는 file 이름이 interface 이름과 같은 ''INTERFACE.conf'' 형식이어야 한다. ===== Commands ===== ^ Command ^ 역할 ^ | ''up'' | interface 생성, configuration·address·route 적용과 up hook 실행 | | ''down'' | down hook 실행, 선택적 저장과 interface 제거 | | ''save'' | 활성 interface의 configuration을 file에 저장 | | ''strip'' | ''wg-quick'' 확장 key를 제외한 ''wg'' configuration 출력 | ===== Interface Lifecycle ===== ==== 일회성 시작과 종료 ==== sudo wg-quick up wg0 sudo wg-quick down wg0 ==== systemd에서 자동 시작 ==== sudo systemctl enable --now wg-quick@wg0 systemctl status wg-quick@wg0 --no-pager journalctl -u wg-quick@wg0 -b --no-pager full tunnel 설정으로 SSH session의 default route나 source address가 바뀌면 연결이 즉시 끊길 수 있다. console 접근과 ''sudo wg-quick down wg0'' rollback 경로를 먼저 확보한다. ===== Configuration ===== ''wg-quick''은 ''wg'' configuration에 ''Address'', ''DNS'', ''MTU'', ''Table'', ''PreUp'', ''PostUp'', ''PreDown'', ''PostDown'', ''SaveConfig''를 확장한다. 전체 작성법은 [[wireguard:config:ko|WireGuard configuration]]을 참고한다. ==== wg 형식으로 변환 ==== sudo wg-quick strip wg0 출력에는 secret이 포함될 수 있으므로 terminal log나 ticket에 그대로 공유하지 않는다. ==== 활성 interface에 차이 반영 ==== sudo wg syncconf wg0 <(sudo wg-quick strip wg0) 이 방식은 ''wg''가 이해하는 peer 설정 변경에 적합하다. address, DNS, route, MTU 또는 hook이 바뀌면 ''down'' 후 ''up''이 필요할 수 있다. ==== SaveConfig 주의 ==== ''SaveConfig = true''이면 ''down'' 시 runtime 상태가 configuration file을 덮어쓸 수 있다. 선언적 file을 source of truth로 관리한다면 일반적으로 생략하고 변경 전 backup을 보관한다. ===== Troubleshooting ===== ==== 시작 실패 ==== sudo wg-quick up wg0 systemctl status wg-quick@wg0 --no-pager journalctl -u wg-quick@wg0 -b --no-pager sudo wg-quick strip wg0 configuration file permission, key 형식, CIDR, interface 중복, 필요한 ''resolvconf'' 또는 firewall command의 존재 여부를 확인한다. ==== route 또는 DNS 문제 ==== * ''AllowedIPs''에서 자동 생성된 route와 기존 route가 충돌하는지 확인한다. * default route가 포함되면 policy routing과 firewall mark도 함께 확인한다. * Linux의 ''DNS'' 처리는 ''resolvconf''를 호출할 수 있으므로 resolver manager와의 호환성을 확인한다. * MTU 문제로 특정 크기의 packet만 실패하면 path MTU와 ''MTU'' 설정을 점검한다. ===== Compatibility ===== * ''wg-quick''은 단순한 use case용 helper다. 복잡한 policy는 NetworkManager 또는 명시적인 network configuration이 더 적합할 수 있다. * route, DNS, firewall helper 동작과 configuration 검색 경로는 운영체제·배포판별로 다를 수 있다. * Windows에서는 native WireGuard manager와 service workflow를 사용한다. ===== Help ===== ++++ wg-quick --help | ++++ ===== See Also ===== * [[wireguard:ko|WireGuard]] * [[wireguard:wg:ko|wg]] * [[wireguard:config:ko|WireGuard configuration]] * [[networkmanager:ko|NetworkManager]] * [[https://git.zx2c4.com/wireguard-tools/about/src/man/wg-quick.8|wg-quick(8)]] ===== History ===== * codex:: 2026-08-13 WireGuard 문서에서 wg-quick command reference를 분리했다. {{indexmenu>.#1|js}}