Shadowrocket 노드 링크 형식 정리: ss://, vmess://, vless://, trojan://와 구독 URL의 차이

ss://, vmess://, vless://, trojan:// 링크의 필드 구조와 단일 노드 링크·구독 URL의 차이를 살펴보고, Add Server와 Subscribe에서 사용하는 방법을 안내합니다.

핵심 요약

Shadowrocket의 단일 공유 링크는 연결 항목 하나를 설명하고, 구독 URL은 여러 항목을 가져와 업데이트하는 데 사용합니다. 이미 자신의 서비스 설정이나 구독 URL을 보유한 사용자를 위한 안내입니다. 먼저 링크 접두사를 확인하고 주소, 포트, 인증 정보와 전송 필드를 점검한 뒤 Add Server에서 단일 항목을 확인하거나 Subscribe로 구독을 저장하세요. 예시에 나오는 주소는 모두 example.com이고 인증 정보는 테스트용입니다. 형식 설명을 위한 예시이므로 실제 연결에는 사용할 수 없습니다.

1. 공유 링크와 구독 URL 구분하기

ss://, vmess://, vless://, trojan://으로 시작하는 텍스트는 일반적으로 단일 연결의 공유 형식입니다. 프로토콜에 필요한 필드를 복사 가능한 텍스트로 묶어 둔 것으로, 가져오면 Shadowrocket이 해당 필드를 Home의 연결 항목으로 저장합니다. 이름은 항목을 알아보기 위한 메모일 뿐, 주소·포트·인증 정보를 대신할 수 없습니다.

구독 URL은 보통 https://로 시작합니다. Shadowrocket이 이 주소에 요청을 보내면 서버가 반환한 구독 내용을 읽고 항목을 파싱합니다. 따라서 구독 URL은 특정 프록시 프로토콜이 아닙니다. 하나의 구독에 서로 다른 프로토콜의 항목이 들어갈 수 있습니다. 일반 웹페이지 주소도 HTTPS로 시작할 수 있으므로, 브라우저에서 열린다고 해서 Subscribe에 사용할 수 있는 것은 아닙니다.

4가지
이 글에서 다루는 공유 링크 접두사: ss / vmess / vless / trojan
8388
아래 Shadowsocks 예시의 포트는 고정값이 아닙니다
443
아래 TLS 예시의 포트는 실제 서비스 설정에 따라 달라집니다

2. ss://: 인증 정보와 서버 주소

Shadowsocks에서 흔히 사용하는 SIP002 공유 형식은 암호화 방식과 비밀번호를 method:password로 구성한 다음 Base64URL로 인코딩해 @ 앞에 둡니다. 뒤에는 서버 주소와 포트가 이어집니다. 아래 예시에서 인증 부분을 디코딩하면 aes-128-gcm:test이며, 여기서 test는 테스트용 비밀번호입니다.

ss://[email protected]:8388#SS%20Demo
위치예시 내용확인 방법
프로토콜 접두사ss://Shadowsocks를 나타내며 HTTPS 주소가 아닙니다.
인증 부분YWVzLTEyOC1nY206dGVzdA디코딩해 암호화 방식과 비밀번호를 확인하고, 가져온 뒤 각각 대조합니다.
서버example.com:8388도메인과 포트가 모두 기존 서비스 설정과 일치해야 합니다.
메모#SS%20Demo%20은 공백을 뜻하며, 표시 이름은 SS Demo입니다.

이전 형식도 볼 수 있습니다. method:password@host:port 전체를 인코딩한 뒤 ss:// 뒤에 붙이는 방식입니다. 인코딩된 텍스트 바깥에 @가 보이지 않아도 서버 주소가 빠진 것은 아닙니다. 쿼리 매개변수에 플러그인 정보를 담는 링크도 있습니다. 기존 서비스에 플러그인이 필요하다면 암호화 방식, 비밀번호, 포트만 복원해서는 설정이 완성되지 않습니다.

  • 인증 텍스트가 무작위 문자열처럼 보여도 다른 구독 URL이라고 단정하지 마세요. 인코딩된 필드일 수 있습니다.
  • Base64URL은 일반 Base64의 일부 문자를 -와 _로 바꾸며, 끝의 패딩 문자가 생략되기도 합니다. 직접 수정하지 않는 것이 좋습니다.
  • 암호화 방식은 서버 설정과 일치해야 합니다. 포트가 8388이라고 해서 모든 Shadowsocks 서비스가 해당 포트를 사용하는 것은 아닙니다.

3. vmess://: JSON을 인코딩한 형식

일반적인 VMess 공유 형식은 vmess:// 뒤에 Base64로 인코딩한 JSON을 붙입니다. 앞서 본 Shadowsocks 예시와 달리 서버 주소는 링크 끝에 직접 표시되지 않고 보통 JSON의 add 필드에 들어 있습니다. 아래는 디코딩된 구조이며 Subscribe에 바로 붙여 넣을 수 있는 주소가 아닙니다.

{
  "v": "2",
  "ps": "VMess Demo",
  "add": "example.com",
  "port": "443",
  "id": "00000000-0000-4000-8000-000000000000",
  "aid": "0",
  "scy": "auto",
  "net": "tcp",
  "type": "none",
  "host": "",
  "path": "",
  "tls": "tls",
  "sni": "example.com"
}

v는 공유 형식을 나타내며 Shadowrocket 앱 버전이 아닙니다. ps는 메모, add와 port는 연결 대상, id는 UUID 인증 정보, aid는 Alter ID에 해당합니다. 예시의 0으로만 이루어진 UUID 본문은 형식을 보여 주기 위한 값이므로, 실제 설정에는 기존 서비스에서 제공한 전체 값을 사용해야 합니다. 메모를 바꿔도 인증 오류는 해결되지 않습니다.

  • net은 전송 방식을 나타냅니다. 기존 설정에서 WebSocket을 사용한다면 host와 path도 확인해야 하며, 위의 TCP 예시를 그대로 적용할 수 없습니다.
  • tls와 sni는 TLS 설정과 관련된 필드입니다. 연결 주소와 TLS server name은 서로 다를 수 있으므로 기존 설정을 그대로 유지해야 합니다.
  • scy는 VMess 암호화 설정을 나타냅니다. TLS와는 서로 다른 계층의 필드이므로 대신 사용할 수 없습니다.
  • 인코딩된 텍스트에는 패딩 문자가 포함될 수 있고, 전달 과정에서 줄바꿈이 들어갈 수도 있습니다. 원본 링크 전체를 복사하고 첫 줄만 가져오거나 링크를 감싼 따옴표까지 함께 복사하지 마세요.

4. vless://와 trojan://: 비슷한 형식, 다른 인증 방식

VLESS와 Trojan의 일반적인 공유 링크는 URI 구조와 비슷합니다. 접두사 뒤에는 인증 정보, @ 뒤에는 서버 주소와 포트, ? 뒤에는 쿼리 매개변수, # 뒤에는 메모가 옵니다. 형식이 비슷해 보여도 접두사만 바꿔서는 안 됩니다. VLESS는 보통 UUID를, Trojan은 비밀번호를 사용하며 서버 측 프로토콜도 일치해야 합니다.

vless://[email protected]:443?encryption=none&security=tls&type=tcp&sni=example.com#VLESS%20Demo

trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Trojan%20Demo
필드VLESS 예시Trojan 예시
인증UUID비밀번호 demo-password
대상example.com:443example.com:443
전송type=tcptype=tcp
TLSsecurity=tlssecurity=tls
server namesni=example.comsni=example.com

VLESS 예시의 encryption=none은 프로토콜 필드이며, 해당 연결에서 TLS를 사용하지 않는다는 뜻은 아닙니다. 쿼리 매개변수에는 WebSocket 경로, Host, flow 또는 기타 전송 세부 정보가 포함될 수 있습니다. 공유 형식마다 필드 이름 규칙이 다를 수 있으므로 가져온 뒤 항목을 열어 원래 설정이 유지되었는지 확인하세요.

  • 비밀번호에 @, #, ? 같은 예약 문자가 포함되면 URI 규칙에 따라 인코딩해야 합니다. 그렇지 않으면 필드 구분자로 잘못 인식될 수 있습니다.
  • IPv6 주소는 URI에서 보통 대괄호로 감싼 뒤 포트를 붙입니다. 주소 내부의 콜론과 포트 구분자가 혼동되는 것을 막기 위해서입니다.
  • 메모는 알아보기 쉬운 이름으로 바꿔도 되지만 UUID, 비밀번호, SNI, 경로는 이름만 보고 추측해서는 안 됩니다.
  • 443은 예시 포트일 뿐입니다. TLS 사용 여부, 포트, 인증서에 해당하는 server name은 모두 기존 서비스 설정에 따라 달라집니다.

5. Add Server와 Subscribe에서 각각 설정하기

먼저 받은 것이 단일 공유 링크인지 구독 URL인지 확인한 뒤 해당 메뉴를 선택하세요. Home에서는 연결 항목을, Config에서는 설정 파일을, Settings에서는 앱 설정을 관리합니다. 구독 URL을 일반 연결의 서버 필드에 입력해도 앱이 자동으로 구독으로 파싱하지 않습니다.

  1. 접두사 확인

    텍스트의 시작 부분을 확인합니다. 네 가지 프로토콜 접두사는 단일 공유 링크로 처리합니다. HTTPS 주소라면 계정 웹페이지가 아니라 기존 서비스에서 제공한 Subscribe 주소인지 먼저 확인하세요.

  2. 단일 항목 확인

    Home 오른쪽 위의 «+»를 눌러 Add Server로 이동합니다. 수동으로 추가할 때는 Type에서 해당 프로토콜을 선택하고 기존 설정에 따라 주소, 포트, 인증 정보를 입력하세요. 공유 링크로 가져온 경우에도 항목을 열어 필드를 확인해야 합니다.

  3. 구독 추가

    Home → «+» → Add Server에서 Type을 Subscribe로 설정하고, 자신의 구독 URL을 URL에 입력합니다. 알아보기 쉬운 메모를 설정한 뒤 저장하세요. 단일 ss:// 링크를 구독 URL에 입력하지 마세요.

  4. 업데이트 확인

    Home으로 돌아가 아래로 당겨 구독을 새로 고친 뒤 항목이 표시되는지 확인합니다. 업데이트가 끝나면 항목 수, 프로토콜, 주요 필드를 점검하세요. 서버에서 내용을 변경했다면 목록도 달라질 수 있습니다.

  5. 연결 확인

    테스트할 항목을 선택하고 시스템 안내에 따라 VPN 구성을 허용한 다음 연결을 켜고 실제 요청 결과를 확인합니다. 필드 파싱 성공, 구독 업데이트 성공, 대상 웹사이트 접속 가능 여부는 서로 다른 결과이므로 각각 확인해야 합니다.

https://example.com/sub?token=xxxx

위 주소는 HTTPS 구독 URL의 형태를 보여 주기 위한 예시이며 실제로 사용할 수 있는 구독이 아닙니다. 실제 URL의 경로, 매개변수, token은 모두 그대로 유지해야 하며 불필요해 보이는 쿼리 매개변수도 삭제하지 마세요. 구독을 업데이트하면 구독으로 관리되는 항목이 바뀔 수 있습니다. 수동 수정 내용을 계속 유지해야 한다면 먼저 기존 값을 기록하고 업데이트 후 결과를 확인하세요.

6. 가져온 뒤 프로토콜을 바꾸기보다 Global Routing 확인하기

링크는 ‘서버에 연결하는 방법’을 정하고 Rule은 ‘요청에 어떤 정책을 적용할지’를 정합니다. 항목은 연결되지만 요청이 예상한 경로로 전달되지 않는다면 Home → Global Routing을 확인하세요. 아래 권장 사항은 기존 규칙을 사용하는 일상적인 설정에 관한 것이며 프로토콜이나 서비스를 추천하는 내용이 아닙니다.

Config

권장

현재 설정에 따라 요청을 처리합니다. Config에서 활성화된 설정과 Rule의 순서 및 대상 정책을 확인하세요. 설정에서 DIRECT로 지정한 요청은 연결 항목을 선택했다고 해서 자동으로 프록시를 통과하지 않습니다.

적합한 경우: 명확한 규칙이 있고 대상별로 요청을 처리해야 할 때.

Proxy

프록시 라우팅을 사용하면 테스트 중 Rule의 분기 처리를 일시적으로 배제할 수 있습니다. 전환하기 전에 선택된 프록시 또는 정책 그룹을 확인하고, 테스트가 끝나면 원래 라우팅 설정으로 되돌리세요.

적합한 경우: 연결 필드를 확인했고 규칙 문제의 범위를 좁혀야 할 때.

Direct

직접 연결 라우팅을 사용합니다. 이 상태에서 웹페이지가 열린다고 해서 방금 가져온 프록시 항목이 작동한다고 볼 수는 없습니다. 프록시 경로를 테스트하려면 해당 라우팅 모드로 명확히 전환해야 합니다.

적합한 경우: 직접 네트워크 접속 상태를 일시적으로 확인할 때.

Global Routing의 Scene은 상황별 설정에 사용됩니다. 앱에서 해당 Scene 조건을 확인해야 하며 공유 링크의 프로토콜 매개변수로 취급해서는 안 됩니다. Settings → On Demand에서는 주문형 연결 동작을 관리하지만, 링크에서 누락된 UUID, 비밀번호, 전송 경로를 보완하지는 않습니다. 필드에 관한 자세한 설명은 설정 필드 안내를, 기본 개념은 개념 빠른 참조를 확인하세요.

[Rule]
DOMAIN-SUFFIX,example.com,PROXY
FINAL,DIRECT

이 예시는 규칙 순서만 보여 줍니다. example.com과 하위 도메인에 접속할 때는 PROXY를 사용하고, 일치하는 규칙이 없는 나머지 요청은 FINAL에 따라 DIRECT로 처리합니다. DOMAIN-SUFFIX는 도메인 접미사를 기준으로 일치 여부를 판단합니다. GEOIP와 IP-CIDR은 IP 관련 규칙이므로 공유 링크의 인증 필드에 넣을 수 없습니다. 링크 메모를 PROXY로 바꿔도 라우팅 규칙은 생성되지 않습니다.

7. 형식 오류, 업데이트 실패, 인증 정보 보호

복사한 링크에서 형식 오류가 표시되면 어디부터 확인하나요?

먼저 링크의 시작 부분이 온전한지 확인한 다음 공백, 줄바꿈, 한글 문장 부호 또는 메시지 설명 문구가 섞였는지 살펴보세요. VMess는 인코딩된 텍스트 전체를 복사했는지 확인하고, VLESS와 Trojan은 @ 뒤에 주소와 포트가 남아 있는지 확인합니다. 프로토콜 접두사를 바꿔 억지로 가져오지 마세요.

구독 URL은 열리는데 항목이 없나요?

Home → «+» → Type이 Subscribe로 설정되었는지, URL에 전체 구독 주소를 입력했는지 확인하세요. 로그인 페이지, 오류 페이지, 일반 HTML을 반환하는 주소는 유효한 구독이 아닙니다. 기존 서비스의 관리 담당자에게 반환되는 콘텐츠 형식을 확인한 뒤 Home에서 다시 새로 고침하세요.

구독 업데이트가 계속 시간 초과되면 어떻게 하나요?

먼저 네트워크 시간 초과와 서버가 반환한 인증 오류를 구분하세요. 사용할 수 있는 연결이 이미 있다면 Settings → Subscribe에서 Update via Proxy를 확인한 다음 Home으로 돌아가 새로 고침할 수 있습니다. 이 설정은 구독 요청 경로만 변경하며 만료된 token, 잘못된 URL, 서버 오류를 해결하지는 않습니다.

가져오기는 성공했는데 접속이 안 되나요?

항목을 열어 프로토콜, 주소, 포트, 인증 정보, TLS server name, 전송 매개변수를 차례로 확인한 뒤 Home → Global Routing도 살펴보세요. 라우팅 모드에 따라 결과가 다르면 Config의 Rule을 추가로 점검합니다. 모든 모드에서 해당 항목으로 연결할 수 없다면 포트를 임의로 바꾸지 말고 기존 서비스 설정을 다시 확인하세요.

도움을 요청하며 스크린샷을 보낼 때 무엇을 가려야 하나요?

비밀번호, UUID, 전체 구독 URL, token을 가리고 전체 QR 코드도 공개하지 마세요. QR 코드는 보통 공유 텍스트를 담는 또 다른 형식일 뿐입니다. 인증 정보가 공개되었다면 기존 서비스의 관리 메뉴에서 해당 인증 정보를 재설정한 다음 Shadowrocket의 항목도 업데이트하세요.

Shadowrocket 구매 경로 및 확인 방법

Shadowrocket은 Apple 플랫폼용 유료 클라이언트이며 App Store에서만 받을 수 있습니다. 개발자 Shadow Launch Technology Limited, 공식 아이콘, 앱 ID 932747118을 확인하세요. 앱의 일회성 구매는 연결 서비스 요금제와 별개입니다. 시스템 요구 사항은 App Store 페이지에 표시된 내용을 기준으로 확인하세요. 처음 설정할 때는 본인이 이미 보유한 서비스 정보를 사용하세요.

App Store 정식 앱 확인 사용 설명서 보기
App Store 정식 앱 확인구매 및 복원 안내 보기