자신이 보유한 WireGuard 설정이 있는 사용자를 위한 안내입니다. 먼저 로컬 Interface와 원격 Peer를 구분하고, Add Server 입력 순서에 따라 주소, 포트, 키, 터널 매개변수를 확인합니다. 이어 AllowedIPs, Global Routing, MTU를 각각 점검합니다. 각 값을 어느 쪽에 입력해야 하는지, 연결 스위치를 켰는데도 요청이 실패할 때 어느 단계부터 확인해야 하는지 파악할 수 있습니다.
1. 설정의 Interface와 Peer 구분하기
Shadowrocket의 WireGuard 유형은 WireGuard 프로토콜로 터널을 구성합니다. UDP로 통신하고 양쪽의 키로 신원을 확인하므로, 사용자 이름과 암호를 입력하는 방식이 아닙니다. 이 글은 사용자가 이미 보유한 유효한 설정을 전제로 합니다. 현재 기기에 할당된 동일한 설정의 매개변수를 사용하고, 기기나 Peer가 서로 다른 설정의 항목을 섞지 마세요.
일반적인 설정 파일은 [Interface]와 [Peer] 두 부분으로 나뉩니다. 앞부분은 로컬 터널 인터페이스, 뒷부분은 원격 대상을 설명합니다. Home → 오른쪽 위 “+” → Add Server → Type → WireGuard로 이동한 다음, 설정 파일을 줄 순서대로 복사하기보다 각 입력란의 의미에 맞춰 값을 옮기세요. 화면 구성이나 선택 항목의 위치는 인터페이스 업데이트에 따라 달라질 수 있습니다.
| 설정 구분 | 주요 항목 | 입력 전 확인 |
|---|---|---|
[Interface] | PrivateKey、Address、MTU | 현재 클라이언트를 설명하는 항목입니다. 서버의 개인 키나 공인 주소가 아닙니다. |
[Peer] | PublicKey、Endpoint、AllowedIPs | 원격 대상의 신원과 연결 주소, 해당 Peer로 전달할 주소 범위를 설명합니다. |
[Peer] 선택 항목 | PresharedKey、PersistentKeepalive | 원래 설정에 포함되어 있거나 실제 네트워크에서 필요한 경우에만 입력합니다. |
| 이름 해석 설정 | DNS | 이름 해석에 관한 설정입니다. Peer 공개 키나 Endpoint 포트가 아닙니다. |
2. Add Server에서 주소와 키 입력하기
먼저 원격 주소와 포트를 확인하고, 양쪽 키를 대조한 다음 로컬 주소와 고급 매개변수를 점검하세요. 아래 단계는 입력 순서에 맞춰 정리했습니다. WireGuard 전용 항목이 별도 그룹에 표시되더라도 동일한 의미의 입력란에 맞춰 설정하면 됩니다.
-
유형 선택
Home → “+” → Add Server → Type → WireGuard로 이동합니다. 다른 프로토콜 입력란에서 같은 이름의 항목을 찾지 않도록 매개변수를 입력하기 전에 Type부터 확인하세요.
-
Endpoint 분리하기
원래 설정의 Endpoint를 Address의 원격 호스트와 Port의 포트 번호로 나눕니다. 예를 들어
vpn.example.com:51820은 형식 설명용입니다. 호스트는vpn.example.com, 포트는51820이며, 실제로는 자신의 값을 입력하세요. -
키 확인하기
PrivateKey에는 로컬 Interface 개인 키를, PublicKey에는 원격 Peer 공개 키를 입력합니다. 원래 설정에 PresharedKey가 있다면 해당 항목에도 입력하세요. 클라이언트의 공개 키를 원격 공개 키 대신 입력하지 않도록 주의하세요.
-
터널 항목 입력하기
Interface의 Address를 로컬 터널 주소 입력란에 입력하고, 입력란이 지원하는 형식에 맞춰 주소 유형과 프리픽스 정보를 유지합니다. 이어 AllowedIPs, MTU, 선택 항목인 PersistentKeepalive를 확인하세요.
-
저장 후 확인하기
저장한 뒤 Home으로 돌아가 방금 추가한 설정을 선택하고 Global Routing을 확인합니다. 처음 연결할 때 시스템 안내에 따라 VPN 설정 권한을 승인한 다음, 해당 설정을 실제로 사용하는 요청을 보내 테스트하세요.
Address는 문맥에 따라 의미가 다릅니다.Add Server의 일반 주소 입력란은 보통 원격 서버를 가리키지만, WireGuard Interface의 Address는 로컬 터널 주소입니다. 예를 들면 10.66.0.2/32입니다. 설정을 옮길 때는 입력란이 어느 그룹에 속하는지 확인하고, 사설 터널 주소를 원격 서버 입력란에 넣지 마세요. 원래 설정에서 IPv6 Endpoint는 [2001:db8::10]:51820처럼 표시되는 경우가 많습니다. 대괄호는 주소와 포트를 구분하는 용도이며, 로컬 인터페이스 주소라는 뜻이 아닙니다.
PrivateKey, PublicKey, PresharedKey는 인코딩된 키 값이므로 일반 암호로 대신할 수 없습니다. WireGuard 키는 32바이트이며, Base64 문자열은 보통 44자입니다. 길이가 맞으면 문자가 빠졌는지 확인하는 데 도움이 되지만, 키 쌍이 올바르다는 뜻은 아닙니다. 복사할 때 끝의 =, 보이지 않는 줄바꿈, 앞뒤 공백에 특히 유의하세요.
3. AllowedIPs와 Global Routing의 역할
AllowedIPs는 WireGuard Peer의 주소 프리픽스 목록입니다. 송신 시 대상 주소를 어느 Peer로 보낼지 판단하는 데 사용되며, 수신 시에는 해당 Peer가 사용할 수 있는 소스 주소도 제한합니다. 웹사이트 도메인 목록이 아니므로 example.com을 입력할 수 없고, DOMAIN-SUFFIX 규칙 전체를 붙여 넣어서도 안 됩니다.
Shadowrocket의 규칙 계층과 WireGuard의 Peer 계층은 서로 다른 기준으로 동작합니다. Global Routing에서 Proxy, Direct, Config, Scene 등의 모드를 선택하면 요청이 정책 처리 과정에 들어가는 방식이 결정됩니다. 요청이 WireGuard로 전달된 뒤에도 Peer의 주소 범위와 원격 전달 조건을 충족해야 합니다. AllowedIPs만 바꿨다고 앱의 모든 트래픽이 해당 터널로 전달되는 것은 아닙니다.
| 설정 | 의미 | 적용 범위 |
|---|---|---|
0.0.0.0/0 | 모든 IPv4 주소 범위를 포함합니다. | IPv6는 포함하지 않으며 Global Routing의 선택을 대신하지 않습니다. |
::/0 | 모든 IPv6 주소 범위를 포함합니다. | 원격과 로컬 설정 모두 해당 IPv6 기능을 지원해야 합니다. |
10.20.0.0/16 | 지정한 IPv4 서브넷만 포함합니다. | 제한된 서브넷에 사용하는 경우, 이 Peer를 통해 모든 공인 주소에 연결할 수 있는 것은 아닙니다. |
DOMAIN-SUFFIX、IP-CIDR、FINAL | Config에서 사용하는 규칙 키워드입니다. | 요청에 적용할 정책을 결정합니다. 규칙 설정에 넣고 AllowedIPs에는 넣지 마세요. |
정리: 두 계층의 범위를 각각 확인하세요
공인 네트워크로 요청이 나가지 않을 때는 먼저 해당 요청이 실제로 WireGuard를 선택했는지 확인한 다음, AllowedIPs에 대상의 주소 유형과 서브넷이 포함되어 있는지 점검하세요. 한쪽 설정만 올바른 것으로는 정상적인 데이터 경로를 구성할 수 없습니다.
Config 모드에서는 현재 활성화된 설정의 규칙 순서와 최종적으로 적용된 정책을 확인하세요. Direct 모드는 WireGuard 출구를 테스트하기에 적합하지 않습니다. Scene은 현재 장면의 세부 설정을 기준으로 판단해야 합니다. 규칙의 영향을 분리해 확인하려면 기존 설정을 기록한 뒤 Proxy를 임시로 선택하고 테스트할 WireGuard를 지정하세요. 확인 후에는 원래 모드로 되돌리면 됩니다.
4. MTU, UDP 포트, Keepalive 설정 기준
MTU는 터널 인터페이스가 전송할 수 있는 IP 패킷의 최대 크기를 바이트 단위로 제한합니다. 터널 캡슐화에 외부 패킷 공간이 사용되므로 접속 네트워크의 MTU를 터널에 그대로 적용할 수는 없습니다. MTU가 너무 크면 작은 요청은 되지만 큰 응답이 멈추는 것처럼 보일 수 있습니다. 다만 DNS 문제, 원격 전달 문제, 패킷 손실도 비슷한 증상을 일으킬 수 있으므로 웹페이지가 열리지 않는다는 이유만으로 결론을 내리지 마세요.
- MTU: 현재 경로에 맞춰 서비스 제공자가 안내한 값을 우선 사용하세요. 외부 경로의 MTU가 1500일 때 WireGuard의 오버헤드는 외부 IPv4 기준 약 60바이트, 외부 IPv6 기준 약 80바이트로 계산하는 경우가 많습니다. 1420은 흔히 사용하는 시작점일 뿐, 모든 네트워크에 맞는 값은 아닙니다.
- Port: Endpoint와 일치해야 합니다. 서버가 다른 UDP 포트를 사용한다면 예시에 51820이 있다고 해서 51820으로 바꾸면 안 됩니다. 웹페이지 접속이나 TCP 테스트에 성공해도 같은 주소의 UDP 경로가 정상이라는 뜻은 아닙니다.
- PersistentKeepalive: NAT 매핑을 유지하는 데 도움이 되도록 주기적으로 연결 유지 데이터를 보냅니다. 원래 설정이 25라면 보통 25초를 뜻하며 25밀리초가 아닙니다. 0은 일반적으로 주기적인 연결 유지를 사용하지 않는다는 의미입니다.
- PresharedKey: 양쪽에서 추가로 공유하는 키이며 두 곳에 같은 값을 입력해야 합니다. 원래 설정에 없다면 직접 생성해 클라이언트에만 입력하지 마세요. 키가 일치하지 않게 됩니다.
정리: 한 번에 하나의 값만 바꾸세요
핸드셰이크와 라우팅을 확인한 뒤 큰 응답만 문제가 있다면 현재 MTU를 기록하고, 비교 테스트를 위해 1420을 1380으로 잠시 낮춰 볼 수 있습니다. 개선되지 않으면 원래 값으로 되돌리고 경로를 계속 확인하세요. 이는 문제 진단을 위한 절차이며 속도 향상을 보장하지 않습니다.
5. 연결 권한부터 웹 접속까지 점검하기
Home의 연결 스위치가 켜졌다는 것은 클라이언트가 연결 처리를 시작했다는 뜻입니다. WireGuard 핸드셰이크가 완료되었거나 DNS와 원격 전달이 정상이라는 의미는 아닙니다. WireGuard는 보통 필요할 때 핸드셰이크를 수행하므로, 확인할 때는 해당 설정으로 실제 요청을 보내고 표시되는 로그와 통계 또는 서비스 제공자 측 상태를 함께 살펴보세요.
- 권한과 선택 항목 확인: 시스템의 VPN 설정 권한을 승인했는지, Home에서 다른 저장 항목이 아니라 대상 WireGuard 설정을 선택했는지 확인하세요.
- 요청 경로 확인: Global Routing 설정을 확인하고, Config 모드에서는 대상 요청에 예상한 정책이 적용되는지 점검하세요. 자동 연결 규칙이 수동 연결 해제나 재연결 상태 확인에 영향을 주지 않도록 점검 중에는 Settings → On Demand 상태도 기록해 두세요.
- Endpoint 연결 확인: 원격 주소가 도메인이라면 먼저 도메인이 올바르게 해석되는지, 현재 네트워크에서 지정한 UDP 포트를 허용하는지 확인하세요. Wi-Fi와 셀룰러 네트워크를 바꿔 테스트하면 접속 네트워크의 영향을 구분하는 데 도움이 됩니다. 테스트 중에는 동일한 설정을 유지하세요.
- 키 쌍 확인: 로컬 PrivateKey가 서버에 등록된 클라이언트 공개 키와 일치하는지, 원격 PublicKey가 현재 Peer의 키인지 확인하세요. 모든 항목이 맞아 보이는데도 정상적인 핸드셰이크가 없다면 원래 설정을 제공한 곳에 등록 정보를 확인해 달라고 요청하세요.
- 데이터 전송과 이름 해석 확인: 핸드셰이크는 완료됐지만 요청에 응답이 없다면 AllowedIPs, 원격 전달, 접근 권한을 확인하세요. 도메인으로 접속할 때만 문제가 있다면 DNS 경로를 살펴보세요. 먼저 MTU나 키부터 바꾸지는 마세요.
6. WireGuard 설정을 옮길 때 자주 묻는 질문
PrivateKey와 PublicKey를 서로 바꿔 입력해도 되나요?
안 됩니다. 원래 설정에서 Interface의 PrivateKey는 로컬 개인 키이고, Peer의 PublicKey는 원격 공개 키입니다. 받은 설정이 클라이언트용이 아니라 서버용이라면 두 부분을 바꾸지 말고 현재 기기에 할당된 클라이언트 매개변수를 먼저 받아야 합니다.
AllowedIPs에 모든 주소 범위를 넣었는데도 요청이 직접 연결되는 이유는 무엇인가요?
먼저 Home에서 Global Routing을 확인하세요. Config 모드에서는 규칙에 따라 요청이 WireGuard로 전달되는지가 결정됩니다. Direct 모드에서는 AllowedIPs가 전체 범위여도 터널을 통하지 않습니다. 현재 규칙에서 적용된 정책을 확인한 뒤 IPv4와 IPv6 범위가 각각 포함되어 있는지 점검하세요.
원래 설정의 DNS를 Address에 입력해야 하나요?
두 값을 한 입력란에 넣으면 안 됩니다. Address는 원격 주소 또는 로컬 터널 주소를 뜻하므로 그룹을 확인해야 합니다. DNS는 이름을 해석하는 서버입니다. 현재 Config의 DNS 설정과 해당 서버에 도달할 수 있는 경로를 확인하세요. DNS 서버가 터널 내부 네트워크에 있다면 WireGuard를 통해 그 주소에 연결되는지도 확인해야 합니다.
화면을 잠갔다가 다시 켜면 연결에 오래 걸립니다. MTU를 바꾸면 해결되나요?
먼저 유휴 상태 이후 NAT 매핑이 만료됐는지 확인하세요. 원래 설정의 PersistentKeepalive 값을 살펴보고, 요청을 다시 보낼 때 핸드셰이크가 복구되는지 확인합니다. MTU는 패킷 크기를 조절하는 값이지 NAT 매핑을 유지하는 설정이 아닙니다. 네트워크를 바꾼 뒤에도 계속 실패한다면 Endpoint와 UDP 경로를 확인하세요.
문제 해결 기록에는 네트워크 유형, Global Routing 모드, 대상 주소 유형, MTU, 실패 단계만 남기는 것이 좋습니다. 이를 통해 “핸드셰이크가 되지 않음”, “핸드셰이크는 됐지만 데이터가 없음”, “도메인 접속만 실패함”을 구분할 수 있습니다. 키, 라우팅, 이름 해석 설정을 한꺼번에 계속 바꾸면 테스트 결과를 비교하기 어려워집니다.