자신의 서비스에서 받은 WireGuard 설정 파일이 있는 사용자를 위한 안내입니다. 먼저 로컬 Interface와 원격 Peer를 구분한 뒤, 키·터널 주소·Endpoint·AllowedIPs·DNS·MTU의 관계를 설명하고 Shadowrocket에 추가하는 방법과 단계별 점검 순서를 소개합니다. 이미 받은 설정을 정확히 입력하는 것이 목적이며, 서버에 등록되지 않은 새 설정을 만드는 방법은 다루지 않습니다.
Interface와 Peer 구분하기
WireGuard는 UDP 기반 암호화 터널 프로토콜입니다. 기존의 사용자 이름과 비밀번호로 로그인하지 않고, 키를 사용해 통신 양쪽을 식별합니다. Shadowrocket에서 WireGuard를 선택하려면 서로 짝을 이루는 클라이언트와 서버 설정이 필요합니다. 서버 주소만으로는 설정을 완료할 수 없습니다.
일반적인 WireGuard 설정 파일에서 [Interface]는 로컬 터널 인터페이스를, [Peer]는 상대 Peer를 나타냅니다. 여기서 '로컬'은 현재 기기이고, '상대'는 보통 사용자가 이미 이용 중인 서비스의 서버입니다. 클라이언트 설정의 PrivateKey는 현재 기기에 속하며, 같은 파일의 [Peer] 아래에 있는 PublicKey는 서버의 키입니다. 두 키는 한 쌍이 아닙니다.
기본 WireGuard 설정 파일과 Shadowrocket 설정 파일은 형식이 서로 다릅니다. 기본 설정의 [Interface]와 [Peer]를 Shadowrocket의 [Rule] 규칙으로 그대로 사용할 수 없습니다. 직접 추가할 때는 각 값을 WireGuard 편집 화면의 해당 항목에 입력하세요. 어떤 클라이언트에서 기본 설정의 모든 항목이 표시되지 않더라도, 남은 값을 다른 항목에 임의로 넣어도 된다는 뜻은 아닙니다.
키 설정: PrivateKey, PublicKey, PresharedKey
PrivateKey는 로컬 개인 키이므로 안전하게 보관해야 합니다. 보통 Base64로 인코딩된 텍스트이며, 32바이트 키는 인코딩 후 일반적으로 44자입니다. 끝에 붙는 =도 값의 일부입니다. 복사할 때 항목 이름, 따옴표, 공백, 줄바꿈이 포함되지 않도록 하고, URL처럼 디코딩하지 마세요. 글자 수가 맞더라도 형식이 올바를 가능성만 확인할 수 있을 뿐, 서버에 등록된 키와 일치한다는 뜻은 아닙니다.
PublicKey는 상대 Peer의 공개 키로, 통신 상대를 확인하는 데 사용됩니다. 클라이언트의 공개 키는 클라이언트 개인 키에서 파생되며 서버의 해당 Peer에 등록됩니다. 클라이언트 편집 화면에 입력하는 상대 공개 키는 서버에서 제공한 값입니다. 클라이언트 자신의 공개 키를 상대 키 항목에 넣거나 서버 공개 키를 개인 키로 잘못 입력하면 핸드셰이크가 정상적으로 이루어지지 않습니다.
로컬 Interface 설정
- PrivateKey
- 현재 기기의 개인 키입니다. 서버 개인 키가 아닙니다.
- Address
- 로컬 터널 인터페이스에 할당된 주소입니다. 원래의 prefix 길이를 유지하세요.
- DNS
- 설정에서 제공한 DNS 서버 주소입니다. 실제 적용 방식은 클라이언트의 DNS 설정도 함께 확인해야 합니다.
- MTU
- 터널 인터페이스의 최대 전송 단위이며 단위는 바이트입니다.
이 값들은 로컬 인터페이스에 해당합니다. 서버의 공인 주소와 혼동해 입력하지 마세요.
원격 Peer 설정
- PublicKey
- 서버 공개 키입니다. 연결 대상 서버의 키와 일치해야 합니다.
- PresharedKey
- 선택 항목인 사전 공유 키입니다. 사용 설정했다면 양쪽 값이 완전히 같아야 합니다.
- Endpoint
- 서버 호스트 주소와 UDP 포트입니다.
- AllowedIPs
- 해당 Peer가 연결할 터널 대상 주소 범위입니다.
이 값들은 상대 Peer에 해당합니다. 서버 설정 파일을 클라이언트 설정에 그대로 입력하지 마세요.
PresharedKey는 공개 키와 개인 키를 대체하지 않는 추가 대칭 키입니다. 기존 설정에 이 항목이 없다면 입력하지 않은 상태로 두세요. 서버에서 사용하도록 설정한 경우 클라이언트에서 빠뜨리거나 잘못 입력하면 핸드셰이크가 실패할 수 있습니다. 모든 항목을 채우려고 값을 임의로 만들지 말고, PrivateKey를 복사해 PresharedKey로 사용하지도 마세요.
- 클라이언트 개인 키를 새로 생성했다면 서버에 등록된 해당 클라이언트의 공개 키도 업데이트해야 합니다. 로컬 키만 바꾸면 보통 연결이 복구되지 않습니다.
- 기기마다 별도로 등록된 키와 터널 주소를 사용하는 것이 좋습니다. 동일한 사용자 정보를 두 기기에서 함께 사용하면 서버에서 상대 주소가 번갈아 바뀔 수 있습니다.
- 문제 해결용 스크린샷을 공유할 때는 개인 키와 사전 공유 키를 모두 가리세요. 키가 포함된 전체 설정을 공개 게시판에 올리지 마세요.
Endpoint와 Address: 공인 접속 주소와 터널 주소의 차이
Endpoint는 터널을 만들 때 처음 접속하는 서버 주소입니다. 예를 들어 192.0.2.10:51820에서 192.0.2.10은 문서용 예시 주소이고 51820은 UDP 포트입니다. Shadowrocket 편집 화면에서 주소와 포트가 분리되어 있다면 각각 입력하세요. 포트까지 포함된 전체 문자열을 주소 칸에 반복해서 넣지 마세요. 주소 앞에 https://를 붙이거나 끝에 웹 경로를 추가하지 않습니다.
Endpoint에 도메인 이름을 사용하는 경우 먼저 도메인이 정상적으로 조회되어야 하며, 현재 네트워크에서 해당 UDP 포트에 접속할 수 있어야 합니다. 웹 페이지가 열리거나 TCP 포트 테스트에 성공해도 UDP 접속이 가능하다는 뜻은 아닙니다. IPv6 주소와 포트를 함께 표기할 때는 [2001:db8::10]:51820처럼 대괄호를 사용합니다. 편집 화면에 별도의 주소 입력란이 있다면 해당 형식에 맞춰 입력하고, 대괄호가 포함된 표기를 무조건 그대로 복사하지 마세요.
| 항목 | 문서 예시 | 잘못 입력하기 쉬운 값 |
|---|---|---|
| Endpoint | 192.0.2.10:51820 | 로컬 터널 Address를 입력하면 안 됩니다. |
| Address | 10.66.0.2/32 | 서버 공인 접속 주소나 집의 Wi-Fi 주소를 입력하면 안 됩니다. |
| AllowedIPs | 0.0.0.0/0, ::/0 | 서버 주소 목록으로 사용하면 안 됩니다. |
| DNS | 10.66.0.1 | 기존 설정에 명시되어 있고 터널에서 연결할 수 있는 경우에만 사용하세요. |
Address는 서버가 클라이언트에 할당한 터널 내부 주소이며 IPv4와 IPv6를 함께 포함할 수 있습니다. 서비스에서 제공한 prefix 길이를 그대로 유지하세요. 예를 들어 /32 또는 /128을 사용합니다. 가정용 네트워크에서 흔히 쓰는 /24를 보고 임의로 바꾸지 마세요. 주소가 충돌하거나 서버에 등록되지 않았거나 서버의 허용 범위와 맞지 않으면 핸드셰이크가 이루어진 뒤에도 데이터가 전송되지 않을 수 있습니다.
AllowedIPs, DNS, MTU의 역할
WireGuard에서 AllowedIPs는 Peer의 터널 주소 범위와 연관되며, 송신 Peer 선택과 수신 출처 검증에 사용됩니다. 0.0.0.0/0은 모든 IPv4 대상 주소를 포함하고 ::/0은 모든 IPv6 대상 주소를 포함합니다. 그러나 이것이 서버에서 듀얼 스택 전달을 지원한다는 뜻도, Shadowrocket의 모든 요청이 해당 WireGuard 연결을 통과한다는 뜻도 아닙니다. 실제 요청에 어떤 정책을 적용할지는 클라이언트의 라우팅 모드와 설정 규칙에 따라 달라집니다.
DNS는 도메인을 IP 주소로 변환하고, 터널은 데이터를 전송합니다. 기본 설정의 DNS는 설정 관리 프로그램이 적용하는 경우가 많으며 WireGuard 핸드셰이크 자체에 포함되지 않습니다. 이를 Shadowrocket에 수동으로 옮길 때는 현재 설정의 DNS 항목도 확인해야 합니다. 원본 파일에 DNS 한 줄이 있다고 해서 앱의 DNS 경로도 동일하다고 단정하지 마세요.
- 도메인만 접속되지 않는 경우: 같은 대상의 IP 주소로는 접속되지만 도메인 조회에서 오류가 난다면 먼저 DNS 응답 여부와 DNS 서버에 연결할 수 있는지 확인하세요.
- IPv6만 실패하는 경우: IPv6 Address,
::/0, 서버의 IPv6 전달 지원 여부를 확인하세요. 주소 범위를 하나 추가하는 것만으로 전체 IPv6 지원이 된다고 볼 수 없습니다. - 핸드셰이크는 되지만 서비스 이용이 안 되는 경우: 터널 Address, AllowedIPs, 서버의 트래픽 전달을 확인하세요. 먼저 키를 반복해서 바꾸지는 마세요.
MTU는 터널 인터페이스가 한 번에 전송할 수 있는 IP 패킷의 최대 크기입니다. WireGuard는 바깥쪽 IP, UDP, 암호화 캡슐화에 필요한 공간도 사용합니다. 추가 캡슐화가 없는 경우 IPv4 외부 헤더에는 보통 약 60바이트, IPv6에는 약 80바이트가 필요합니다. 따라서 경로 MTU가 1500이면 1420이 흔히 참고하는 값이지만, 모든 네트워크나 Shadowrocket에서 고정으로 사용하는 기본값은 아닙니다.
기존 설정에 MTU 값이 명시되어 있다면 우선 그대로 사용하세요. 작은 요청은 응답하지만 큰 웹 페이지를 불러오거나 업로드할 때 계속 멈춘다면 기존 값을 기록한 뒤 한 가지 변수만 바꿔 테스트할 수 있습니다. 예를 들어 1420에서 1380으로 낮추고 같은 요청을 다시 시도합니다. 이는 경로 MTU 문제를 점검하는 방법일 뿐, 특정 네트워크에서 측정된 결과는 아닙니다. 값을 낮춰도 달라지지 않으면 원래 값으로 되돌리고 다른 항목을 확인하세요.
Shadowrocket에 추가하고 연결 확인하기
아래 단계는 Home에서 WireGuard를 수동으로 추가하는 경우를 기준으로 합니다. 플랫폼마다 편집 화면에서 항목을 나누거나 합쳐 표시할 수 있으므로, 입력란 수가 아니라 각 항목의 의미에 맞춰 값을 입력하세요. 시작하기 전에 원본 설정을 저장하고 최소 항목으로 먼저 연결을 확인한 다음 라우팅, DNS, MTU를 조정하세요. 한 번에 여러 항목을 바꾸면 원인을 파악하기 어렵습니다.
-
원본 설정 확인
[Interface]와[Peer]를 나눠 읽고 로컬 PrivateKey와 Address, 서버 PublicKey와 Endpoint가 있는지 확인하세요. PresharedKey가 있는지도 살펴보고, 빠진 항목을 임의로 만들어 넣지 마세요. -
프로토콜 선택
Home → 오른쪽 위 '+' → Type → WireGuard로 이동합니다. 현재 편집 중인 연결이 WireGuard인지 확인하세요. 이 설정값을 다른 프로토콜 유형의 항목에 입력하면 안 됩니다.
-
설정값 입력
로컬 인터페이스와 원격 Peer의 대응 관계에 맞춰 입력하세요. Endpoint가 주소와 포트 입력란으로 나뉘어 있다면 각각 입력하고, 키는 빠짐없이 복사하며 Address의 기존 prefix 길이를 유지하세요. 표시되지 않는 선택 항목을 다른 입력란으로 대신 채우지 마세요.
-
저장 후 연결 선택
저장한 뒤 Home으로 돌아가 방금 추가한 연결을 선택합니다. 현재 Global Routing 모드를 기록해 두세요. 설정 규칙의 영향을 잠시 제외하고 싶다면 Proxy로 한 번 테스트한 다음 평소 설정으로 되돌리세요.
-
연결 확인 및 기록
연결을 시작하고 시스템 안내에 따라 VPN 구성을 승인합니다. 도메인 접속, 작은 요청, 큰 콘텐츠 로딩을 각각 테스트하고 네트워크 유형, 오류 증상, 변경한 항목을 기록하세요. Settings → On Demand에 자동 연결 조건이 설정되어 있다면 수동으로 전환할 때 영향을 주지 않는지도 함께 확인하세요.
구독에 포함된 WireGuard 항목과 수동으로 추가한 항목은 구분해야 합니다. 기존 구독을 업데이트하면 원격에서 관리되는 항목의 내용이 바뀔 수 있으며, 로컬에서 임시로 수정한 값은 장기 설정의 기준이 될 수 없습니다. 업데이트 후 연결되지 않는다면 Endpoint, PublicKey, Address가 바뀌었는지 먼저 비교한 뒤 직접 보유한 설정을 다시 가져올지 판단하세요.
Global Routing 모드와 문제 원인 찾기
Shadowrocket에서는 프로토콜 설정이 올바른지와 실제 요청이 해당 연결을 사용하는지는 별개의 문제입니다. WireGuard는 터널을 만드는 방식을 정의하고, Global Routing과 Config의 규칙은 요청이 어떤 경로로 전달될지 정합니다. 특정 웹사이트가 열렸다는 사실만으로 WireGuard 연결이 확인된 것은 아닙니다. 해당 요청이 DIRECT로 처리되었을 수도 있습니다.
Config
규칙현재 활성화된 설정의 규칙에 따라 요청에 적용할 정책을 선택합니다. 규칙에 따라 요청을 DIRECT, 프록시 정책 또는 REJECT로 보낼 수 있습니다. 규칙과 일치하지 않는 요청은 FINAL에 지정된 정책으로 처리되며, 항상 직접 연결되는 것은 아닙니다.
적합한 경우: 설정 확인을 마친 뒤 기존 규칙에 따라 평소처럼 트래픽을 분기할 때.
Proxy
프록시 경로에 현재 선택한 연결을 사용합니다. Config의 트래픽 분기 규칙이 영향을 주는지 잠시 확인할 때 쓸 수 있습니다. 선택한 항목이 대상 WireGuard 연결인지, 현재 네트워크에서 해당 UDP Endpoint에 접속할 수 있는지도 확인해야 합니다.
적합한 경우: WireGuard 연결과 설정 규칙 중 어느 쪽에 문제가 있는지 짧게 확인할 때.
Direct
직접 연결 경로를 사용하므로 현재 네트워크의 기본 상태를 비교하기 좋습니다. 이 모드에서 접속에 성공해도 WireGuard 키, 서버 Endpoint, 터널 전달이 정상이라는 뜻은 아닙니다.
적합한 경우: 현재 네트워크에서 같은 대상에 직접 접속할 수 있는지 비교할 때.
Scene을 사용한다면 현재 Scene에서 실제로 어떤 라우팅 설정을 쓰는지 먼저 확인하세요. Scene 이름만으로 프로토콜 연결 결과를 판단할 수는 없습니다. Config에서 DOMAIN-SUFFIX, IP-CIDR, GEOIP는 서로 다른 일치 조건이고 FINAL은 마지막 기본 규칙입니다. 문제를 찾을 때는 규칙 파일에 WireGuard라는 문구가 있는지만 보지 말고, 요청이 어떤 정책과 일치했는지 확인하세요.
| 증상 | 먼저 확인할 항목 | 다음 조치 |
|---|---|---|
| 핸드셰이크가 확인되지 않음 | Endpoint, UDP 접속 가능 여부, 양쪽 키, PresharedKey. | 서버 상태를 확인할 수 있다면 핸드셰이크 기록을 살펴보고, 사용 가능한 것으로 알려진 다른 네트워크에서도 비교해 보세요. |
| 핸드셰이크는 확인되지만 요청 시간 초과 | Address, AllowedIPs, 서버의 트래픽 전달 및 반환 경로. | 할당된 터널 주소가 여전히 유효한지 확인한 뒤, 해당 요청이 대상 정책으로 전달되는지 살펴보세요. |
| 도메인으로만 접속되지 않음 | DNS 응답, DNS 서버 접속 가능 여부, 실제 DNS 설정. | DNS 조회 시간 초과, 빈 응답, 조회 성공 후 연결 실패를 구분하세요. |
| 작은 요청은 되지만 큰 콘텐츠에서 멈춤 | 경로 MTU, 캡슐화 오버헤드, 네트워크 패킷 손실. | 기존 값을 기록한 뒤 MTU만 낮춰 테스트하세요. 나아지지 않으면 원래 값으로 되돌립니다. |
| 네트워크 전환 또는 유휴 상태 후 연결 실패 | NAT 매핑, Endpoint 접속 가능 여부, 자동 연결 조건. | 연결을 다시 설정해 비교한 다음 keepalive 설정과 On Demand 조건을 확인하세요. |
문제를 점검할 때는 한 번에 한 가지 변수만 바꾸고, 재현에 필요한 조작을 기록하세요. 한 번의 지연 시간 테스트만으로는 핸드셰이크, DNS, 실제 서비스 요청을 확인할 수 없습니다. 연결 스위치가 켜져 있어도 서버가 현재 키를 승인했다는 뜻은 아닙니다. 기존 서비스에 문의해야 한다면 발생 시간, 네트워크 유형, Endpoint 포트, 오류 증상을 전달하면 됩니다. 개인 키와 사전 공유 키는 문의 내용에 포함해 공개적으로 보내지 마세요.