Shadowrocket WireGuard 설정 방법: PrivateKey·PublicKey·Endpoint·MTU 설명

Shadowrocket에 WireGuard를 추가할 때 각 항목의 의미와 Address·DNS·MTU 입력값을 알아보고, 서비스 제공업체의 설정을 클라이언트에 적용하는 방법을 설명합니다.

이 글의 핵심

이 글은 서비스 제공업체에서 WireGuard 설정값을 받은 사용자를 대상으로, 로컬 키와 원격 키를 구분하고 설정 파일의 항목을 Shadowrocket에 대응하는 방법, Endpoint·DNS·MTU를 순서대로 점검하는 방법을 설명합니다. 먼저 원본 설정을 보존하고, 신원 정보와 주소를 확인한 다음 전송에 영향을 주는 항목을 조정하세요. 키를 반복해서 바꾸거나 예시 주소를 그대로 복사해 연결을 시도하지 마세요.

1. WireGuard 설정의 로컬 항목과 원격 항목

Shadowrocket에서 WireGuard는 연결 프로토콜이며, 구독 형식이나 트래픽 분배 규칙이 아닙니다. 이 글에서는 서비스 제공업체가 제공한 클라이언트 설정을 기준으로 설명합니다. [Interface]는 로컬 터널 인터페이스를, [Peer]는 원격 피어를 나타냅니다. 먼저 파일이 클라이언트용인지 확인한 뒤 항목을 입력하세요. 서버 설정을 클라이언트 설정으로 그대로 사용할 수는 없습니다.

구독 링크나 개별 설정은 서비스 제공업체에서 받아야 합니다. 구독을 가져온 뒤 완성된 WireGuard 항목이 생성됐다면 먼저 해당 항목을 확인하고, 같은 이름의 항목을 수동으로 다시 만들 필요는 없습니다. 구독을 업데이트하면 설정값이 다시 적용될 수 있습니다. 변경 사항을 시험하려면 원래 항목을 보존하고, 테스트용 복사본을 구독 관리 항목과 구분해 두세요.

섹션 2개
클라이언트 설정은 보통 [Interface]와 [Peer]로 구분됩니다
UDP
WireGuard의 외부 전송에는 UDP를 사용합니다
51820
일반적인 포트 예시이며, 반드시 입력해야 하는 고정값은 아닙니다

설정을 올바르게 입력하는 것과 요청이 실제로 해당 연결을 통과하는 것은 별개의 문제입니다. Home에서 선택한 항목, Global Routing 설정, Config에서 적용되는 규칙이 모두 요청 경로에 영향을 줍니다. 먼저 연결 매개변수를 확인한 뒤 트래픽이 해당 항목으로 전달되는지 점검하세요. 규칙에 따른 직접 연결을 WireGuard 장애로 오인하지 않도록 주의해야 합니다.

2. PrivateKey·PublicKey·PresharedKey의 관계

PrivateKey는 로컬 신원의 비밀 키입니다. 클라이언트 설정의 [Peer]에 있는 PublicKey는 원격을 식별하는 데 사용됩니다. 두 키는 서로 다른 신원에 속하므로 바꿔 쓸 수 없습니다. 또한 로컬 PrivateKey에서 파생된 PublicKey를 원격 PublicKey 항목에 입력해서도 안 됩니다. 서버에 로컬 PrivateKey에 대응하는 공개 키가 등록되어 있어야 양쪽 설정이 일치할 수 있습니다.

로컬 인터페이스: Interface

PrivateKey
클라이언트 개인 키입니다. 전체 값을 유지하고 다른 사람과 공유하지 마세요.
Address
클라이언트에 할당된 터널 주소이며, 원격 서버 주소가 아닙니다.
DNS
설정에서 제공한 DNS 서버 주소입니다. 실제 DNS 조회 경로와 함께 확인하세요.
MTU
터널 인터페이스의 패킷 크기 설정이며, 대역폭이나 속도 제한이 아닙니다.

이 항목은 로컬 설정을 나타내므로 서버 인터페이스 섹션의 값을 그대로 복사하면 안 됩니다.

원격 피어: Peer

PublicKey
원격 공개 키입니다. 연결 대상 서버의 신원과 일치해야 합니다.
PresharedKey
선택 사항인 추가 공유 키입니다. 서비스 제공업체가 제공하고 사용하도록 설정한 경우에만 입력하세요.
Endpoint
클라이언트가 통신을 시작할 원격 호스트와 UDP 포트입니다.
AllowedIPs
WireGuard에서 주소를 선택하고 검사하는 범위이며, 도메인 기반 트래픽 분배 규칙과는 다릅니다.

전체 WireGuard 설정의 항목이 편집 화면에 같은 이름으로 하나씩 표시되는 것은 아닙니다.

WireGuard 키는 Base64로 인코딩된 32바이트 값이며, 일반적으로 텍스트 길이는 44자이고 끝에 =가 올 수 있습니다. 길이가 맞는지는 형식 확인에만 도움이 되며, 키가 서버와 일치한다는 뜻은 아닙니다. 복사할 때 앞뒤 공백을 제거하고 줄바꿈, 따옴표, 설명 문구가 섞이지 않았는지 확인하세요. 끝의 패딩 문자는 삭제하지 마세요.

3. Endpoint와 Address: 서버 접속 주소와 터널 주소의 차이

Endpoint에는 원격 호스트와 포트가 들어갑니다. 예를 들어 192.0.2.1:51820에서 호스트는 192.0.2.1, 포트는 51820입니다. Shadowrocket 편집 화면에서 주소와 Port를 별도로 입력해야 한다면 각각 나눠 입력하세요. 호스트 이름만 받는 주소 입력란에 포트까지 포함한 전체 값을 넣지 마세요. IPv6 Endpoint를 함께 표기할 때는 대괄호를 사용합니다. 예: [2001:db8::1]:51820

Address는 터널 내부에서 사용하는 로컬 주소로, 보통 접두사 길이를 포함해 표시합니다. 예: 10.66.0.2/32. 서비스 제공업체가 IPv4와 IPv6를 모두 제공한다면 할당된 값을 그대로 입력하세요. Endpoint의 공인 주소를 Address에 넣지 마세요. 다른 기기의 터널 신원을 복사해 동시에 사용하면 신원이나 주소가 충돌할 수 있습니다.

항목예시 값확인할 내용
Endpoint192.0.2.1:51820원격 주소와 포트를 함께 확인하세요. 실제 포트는 51820이 아닐 수도 있습니다.
Address10.66.0.2/32서비스 제공업체가 할당한 로컬 터널 주소를 사용하고 접두사 정보를 유지하세요.
DNS10.66.0.1터널 내부 DNS 서버라면 해당 서버에 도달할 수 있는 경로가 있어야 합니다.
AllowedIPs0.0.0.0/0, ::/0WireGuard 기준으로 모든 IPv4·IPv6 주소를 포함한다는 뜻이며, 앱 수준의 모든 규칙이 이 항목을 통과한다는 의미는 아닙니다.

표의 주소는 항목을 설명하기 위한 예시일 뿐, 실제로 사용할 수 있는 설정이 아닙니다. 특히 192.0.2.1과 2001:db8::1은 문서용 예시 주소입니다. 실제 연결에는 포트 개방, 원격 서버의 UDP 지원, 키 일치, 로컬 네트워크에서 해당 통신 허용이 모두 필요합니다.

4. Home에서 WireGuard 항목을 추가할 때 확인할 단계

개별 설정값을 이미 받은 경우에는 수동으로 추가할 수 있습니다. 아래 경로는 영어 인터페이스 명칭을 기준으로 합니다. 기기 화면 배치에 따라 항목 순서는 다를 수 있습니다. 서비스 제공업체가 지정한 항목에 해당하는 입력란이 편집 화면에 없다면 다른 항목에 억지로 넣지 말고, 먼저 해당 설정의 가져오기 방법과 지원 범위를 확인하세요.

  1. 원본 설정 보존

    서비스 제공업체의 원본 설정값을 저장하고, Home에서 현재 선택한 항목과 Global Routing 설정을 기록하세요. 테스트할 때는 한 번에 하나씩만 변경해야 쉽게 되돌릴 수 있습니다.

  2. 프로토콜 선택

    Home → 오른쪽 위 ‘+’ → Type → WireGuard로 이동합니다. 주소, Port, 키를 입력하기 전에 Type이 맞는지 먼저 확인하세요. 다른 프로토콜 양식의 항목 의미를 그대로 적용하지 않도록 주의해야 합니다.

  3. 항목 대응

    Endpoint를 원격 호스트와 Port로 나눠 입력하세요. PrivateKey는 로컬 개인 키, PublicKey는 원격 공개 키에 해당합니다. Address·DNS·MTU는 원본 설정과 편집 화면에서 지원하는 항목에 맞춰 입력하세요.

  4. 저장 후 선택

    저장한 뒤 Home으로 돌아가 방금 추가한 항목을 선택하고 연결을 켜세요. VPN을 처음 설정할 때는 시스템 안내에 따라 권한을 허용해야 합니다. 시스템에 VPN 연결로 표시되더라도 원격 핸드셰이크와 실제 요청까지 성공했다는 뜻은 아닙니다.

  5. 테스트 조건 고정

    먼저 같은 네트워크와 같은 테스트 요청을 유지하세요. Settings → On Demand가 활성화되어 있다면 조건을 기록해 수동 테스트 중 자동 연결이 영향을 주지 않도록 하세요. 테스트가 끝나면 원래 설정으로 복구합니다.

Home에서 지연 시간 테스트 값이 한 번 표시됐다고 모든 서비스가 정상이라고 판단하지 마세요. 테스트 결과는 방식, 대상, 요청 경로에 따라 달라집니다. DNS 조회, 실제 페이지 로딩, 큰 데이터의 전송도 확인해야 합니다. 반대로 특정 지연 시간 테스트가 실패했다고 해서 PrivateKey가 잘못됐다고 단정할 수도 없습니다.

5. DNS와 AllowedIPs: DNS 조회 경로와 요청 경로 구분하기

DNS는 WireGuard 암호화 핸드셰이크 자체에 포함되는 항목이 아니라, 일반적인 설정 도구에서 DNS 서버를 지정하는 설정입니다. Shadowrocket의 실제 DNS 조회 동작은 현재 Config와 관련 DNS 설정에도 영향을 받습니다. 따라서 서비스 제공업체 설정의 DNS 주소와 앱에 이미 지정된 DNS 설정을 함께 확인해야 합니다.

Endpoint에 호스트 이름을 사용한다면 터널을 연결하기 전에 해당 이름을 조회할 수 있어야 합니다. 유일하게 사용할 수 있는 DNS 서버에 도달하려면 아직 연결되지 않은 터널이 필요한 경우, 의존성 순환이 생길 수 있습니다. 이때는 도달 여부를 확인하지 않은 주소로 DNS를 임의 변경하지 말고, 서비스 제공업체에 사용할 수 있는 Endpoint 조회 방법을 문의하세요.

6. MTU 선택 방법: 원래 값 유지 후 하나씩 비교

MTU는 인터페이스가 전송할 수 있는 최대 IP 패킷 크기를 바이트 단위로 나타냅니다. WireGuard는 원본 패킷에 전송용 캡슐화를 추가하므로 터널 MTU는 보통 하위 링크 MTU보다 작습니다. 일반적인 설정에서 1420을 볼 수 있지만, 모든 네트워크에 적용되는 정답은 아닙니다. 하위 링크, 추가 캡슐화, 경로 제한에 따라 적절한 값이 달라질 수 있습니다.

대표적인 점검 단서는 작은 요청은 처리되지만 큰 응답은 계속 멈추거나, 네트워크를 바꾼 뒤 같은 설정에서 대량 전송에 문제가 생기는 경우입니다. 이런 현상은 경로 MTU 탐색이나 패킷 분할과 관련될 수도 있고, 패킷 손실이나 혼잡 때문일 수도 있습니다. 먼저 키, Endpoint, DNS를 확인한 다음 MTU만 바꿔 비교 테스트를 해 원인을 좁히세요.

서비스 제공업체가 지정한 값 사용

권장

서비스 제공업체가 MTU를 명시했다면 우선 원래 값을 기준으로 사용하세요. 예를 들어 설정값이 1420이라면 DNS나 Endpoint를 함께 바꾸지 말고 해당 값에서 핸드셰이크, DNS 조회, 실제 데이터 전송이 되는지 먼저 확인합니다.

적합한 경우: 최초 가져오기, 설정 이전, 재현 가능한 테스트 기준을 마련할 때

기본 설정 유지

원본 설정에 MTU가 없고 편집 화면에서 값을 지정하지 않아도 된다면 우선 기본 설정을 유지하세요. 다른 설정에서 1420을 봤다는 이유만으로 억지로 입력하지 마세요. 기본 동작이 하나의 고정값을 사용한다는 뜻은 아닙니다.

적합한 경우: 서비스 제공업체의 별도 지침이 없고 현재 전송에 뚜렷한 문제가 없을 때

1280으로 비교 테스트

큰 패킷 전송에 문제가 있고 다른 설정을 확인했다면, 설정에서 허용하는 경우 1280을 임시로 테스트할 수 있습니다. 1280은 IPv6 최소 링크 MTU의 참고값이지만 모든 경로 문제를 해결하는 것은 아닙니다. 테스트 결과를 기록하고 필요한 경우 원래 값으로 되돌리세요.

적합한 경우: 작은 요청은 정상이지만 큰 데이터 전송이 멈춰 패킷 크기의 영향을 확인하려는 경우

MTU가 작다고 더 빨라지는 것은 아닙니다. 일부 경로에서 큰 패킷 문제를 줄일 수 있지만, 같은 양의 데이터를 전송하는 데 더 많은 패킷과 캡슐화 오버헤드가 발생합니다. 같은 네트워크·항목·대상을 유지해 전후를 비교해야 유효한 결론을 얻을 수 있습니다. 지연 시간 테스트 숫자만 비교해서는 안 됩니다.

7. 연결 실패 시 단계별 점검 순서

먼저 ‘시스템 VPN이 시작됨’, ‘원격 통신이 가능함’, ‘대상 요청이 완료됨’을 서로 다른 상태로 구분하세요. WireGuard는 실제 트래픽이 없을 때 조용히 대기할 수 있으므로, 잠시 데이터가 보이지 않는다고 연결이 끊겼다고 판단하면 안 됩니다. 연결을 반복해서 껐다 켜도 잘못된 PublicKey나 포트가 자동으로 수정되지는 않습니다.

확인된 증상우선 확인할 항목다음 단계
모든 요청 실패Endpoint, Port, UDP 연결 가능 여부, 양쪽 키의 일치 여부서비스 제공업체에 등록된 클라이언트 공개 키가 현재 PrivateKey에 대응하는지 확인하세요.
도메인 요청 실패Endpoint 사전 조회, 서비스 DNS, 현재 ConfigEndpoint 도메인 조회 실패와 터널 내부 DNS에 도달할 수 없는 상황을 구분하세요.
작은 요청은 정상이나 큰 데이터 전송이 멈춤패킷 손실, 경로 MTU, 네트워크 변경에 따른 차이나머지 조건을 고정하고 MTU만 바꿔 비교하세요.
구독 업데이트 후 설정값이 원래대로 돌아감해당 항목이 구독으로 관리되는지 여부원본 설정과 비교하고 테스트용 복사본에서 변경을 확인하세요. 원본 항목을 반복해서 덮어쓰지 마세요.
일부 대상만 터널을 통과하지 않음Global Routing, 현재 Config, 적용된 정책WireGuard 신원을 다시 만들기 전에 트래픽 분배 결과를 확인하세요.

기기가 Wi-Fi와 셀룰러 네트워크 사이를 자주 전환한다면 두 네트워크의 결과를 각각 기록하세요. 선택 항목인 PersistentKeepalive는 주기적으로 연결 유지 패킷을 보내는 설정이며, 일반적인 예시 값은 25초입니다. 서비스 제공업체가 요구하거나 NAT 매핑을 유지해야 할 이유가 있고 현재 설정 방식에서 지원되는 경우에만 설정하세요. 잘못된 키를 수정하거나 속도를 조절하는 기능은 아닙니다.

서비스 제공업체에 문의할 때는 네트워크 종류, Endpoint 포트, 문제가 발생한 요청 유형, 큰 데이터에서만 실패하는지, MTU 변경 전후의 차이를 기록하세요. 설정 화면이나 로그를 공유하기 전에 PrivateKey·PresharedKey·구독 토큰과 기타 신원 정보를 가리세요. 재현 가능한 조건을 전달하면 단순히 ‘연결이 안 된다’고 설명하는 것보다 문제를 파악하는 데 도움이 됩니다.

App Store에서 정품 다운로드개발자와 앱 ID 확인