Shadowrocket 노드 링크 형식: ss://, vmess://, vless://, trojan://와 구독 URL 구분법

ss://, vmess://, vless://, trojan:// 링크의 형식과 인코딩, 단일 노드 링크와 구독 URL의 차이, Shadowrocket에서 확인하고 가져오는 방법을 설명합니다. 예시는 모두 가상 값입니다.

핵심 요약

Shadowrocket의 단일 노드 공유 링크에는 연결 매개변수가 직접 포함되지만, 구독 URL은 가져올 설정 내용을 가리킵니다. 자신의 연결 설정을 이미 보유한 사용자를 위해 접두사, 인코딩, 필드와 가져오기 경로를 차례로 살펴봅니다. 링크 가져오기, Type → Subscribe, Add Server에서 직접 입력하는 방법 중 무엇을 써야 하는지, 가져오기에 성공해도 연결이 되지 않을 수 있는 이유를 확인할 수 있습니다. 아래 주소, 비밀번호, UUID, 포트 조합은 모두 설명용 가상 값이며 실제 연결에 사용할 수 없습니다.

접두사부터 확인하고 주소의 용도를 구분하세요

링크 맨 앞의 scheme이 파싱 방식을 결정합니다. ss://는 Shadowsocks 매개변수, vmess://는 VMess 매개변수, vless://는 VLESS 매개변수, trojan://은 Trojan 매개변수를 나타냅니다. 이런 링크는 보통 서버 항목 하나를 설명합니다. 여러 링크를 줄줄이 붙여도 자동으로 계속 업데이트되는 구독 URL이 되지는 않습니다.

https://로 시작한다는 것은 HTTPS로 콘텐츠를 가져온다는 뜻일 뿐, 그 자체로 구독 URL임을 의미하지 않습니다. 웹 페이지, 계정 관리 페이지, 구독 엔드포인트 모두 HTTPS를 사용할 수 있습니다. 설정 제공자가 구독 주소라고 명확히 안내하고 응답 내용을 클라이언트가 인식할 수 있을 때만 Subscribe에 입력하세요.

4가지
이 글에서 다루는 공유 링크 접두사: ss / vmess / vless / trojan
443
아래 TLS 예시 포트는 모든 연결에 적용되는 고정 포트가 아닙니다
8388
아래 Shadowsocks 예시 포트는 설명용 값입니다. 실제 값은 원래 매개변수와 대조하세요
형식일반적으로 포함하는 정보먼저 확인할 항목
ss://…Shadowsocks의 암호화 방식, 비밀번호, 주소와 포트인코딩된 부분이 온전한지, plugin 매개변수가 있는지
vmess://…일반적으로 Base64로 인코딩된 JSON 매개변수주소, UUID, 전송 방식, TLS 설정이 모두 있는지
vless://…UUID, 주소, 포트와 쿼리 매개변수type, security, flow 등의 필드
trojan://…비밀번호, 주소, 포트와 TLS·전송 매개변수비밀번호 인코딩, SNI, 인증서 검증 조건
https://example.com/sub?token=xxxx구독 엔드포인트 예시. 실제 내용은 요청 후 확인해야 합니다로그인 페이지나 오류 페이지가 아니라 실제 구독 주소인지

ss://: Base64 부분과 서버 주소 구분하기

Shadowsocks 공유 링크는 보통 ss://사용자정보@호스트:포트#이름 형식이며, 사용자 정보는 method:password를 Base64로 표현한 값일 수 있습니다. 아래 사용자 정보를 디코딩하면 aes-128-gcm:demo-pass가 됩니다. example.com은 예시 호스트, 8388은 예시 포트, Demo-SS는 이름입니다.

ss://[email protected]:8388#Demo-SS

이전 형식 중에는 호스트와 포트를 포함한 전체 부분을 함께 인코딩하는 경우도 있습니다. 따라서 모든 ss:// 링크에서 @가 바로 보이는 것은 아닙니다. Base64와 URL-safe Base64는 표시 방식이 다를 수 있고, 끝의 =가 생략되기도 합니다. 이런 모양의 차이만으로 매개변수가 잘못됐다고 판단하지 마세요.

vmess://: 디코딩한 뒤 JSON 필드 확인하기

일반적인 VMess 공유 형식은 vmess:// 뒤에 Base64로 인코딩된 JSON이 이어집니다. 아래는 디코딩한 예시이며 Subscribe 입력란에 바로 붙여 넣을 링크가 아닙니다. 실제로 가져올 때는 완전한 원본 공유 텍스트를 그대로 사용하세요. 먼저 수동으로 디코딩한 뒤 다시 인코딩할 필요는 없습니다.

{
  "v": "2",
  "ps": "Demo-VMess",
  "add": "example.com",
  "port": "443",
  "id": "11111111-1111-4111-8111-111111111111",
  "aid": "0",
  "scy": "auto",
  "net": "ws",
  "type": "none",
  "host": "example.com",
  "path": "/demo",
  "tls": "tls",
  "sni": "example.com"
}

add와 port는 연결 대상이고 id는 UUID, aid는 alterId에 해당합니다. net은 전송 방식을 나타냅니다. 값이 ws라면 host와 path를 WebSocket 매개변수로 확인해야 합니다. tls와 sni는 TLS 설정을 확인할 때 사용합니다. 필드 간에 연관성이 있으므로 UUID만 입력해서는 충분하지 않습니다.

디코딩 결과가 예상한 JSON이 아니더라도 원문을 바로 수정하지 마세요. 공유 형식이 다르거나 텍스트가 잘렸을 수 있습니다. 인코딩된 내용을 반복해서 고치기보다 원본 링크를 다시 받은 뒤 클라이언트에서 가져온 후 표시되는 필드를 확인하는 편이 문제를 찾기 쉽습니다.

vless://와 trojan://: 쿼리 매개변수 확인하기

VLESS와 Trojan은 읽기 쉬운 URI 형식으로 공유되는 경우가 많습니다. @ 앞에는 각각 UUID 또는 비밀번호가, 뒤에는 호스트와 포트가 옵니다. ? 뒤에는 쿼리 매개변수가 이어지며, 여러 매개변수는 &로 구분합니다. 아래 두 링크는 형식 예시일 뿐 실제로 연결할 수 있는 서버를 나타내지 않습니다.

vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.com&path=%2Fdemo&sni=example.com#Demo-VLESS

trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Demo-Trojan
필드확인 방법자주 하는 오해
encryption=none여기서는 VLESS 자체가 해당 계층의 데이터 암호화를 제공하지 않는다는 뜻입니다이것만으로 TLS가 없다고 판단할 수 없습니다
security=tlsTLS를 사용하도록 요청하는 설정입니다. 관련 매개변수도 확인하세요포트가 443이라고 해서 TLS 설정이 올바르다는 뜻은 아닙니다
type=wsWebSocket 전송을 사용합니다. host와 path를 확인하세요비밀번호만 그대로 둔 채 ws를 tcp로 바꿔서는 안 됩니다
sniTLS 핸드셰이크에 사용하는 서버 이름연결 주소나 WebSocket Host와 반드시 같지는 않습니다
flow일부 VLESS 설정에서 사용하는 흐름 제어 매개변수모든 VLESS 링크에 이 필드를 추가해야 하는 것은 아닙니다
%2F퍼센트 인코딩된 값이며 디코딩하면 슬래시가 됩니다path를 직접 입력할 때 %252F로 이중 인코딩하지 마세요

Trojan 비밀번호에 @, #, & 같은 예약 문자가 들어 있다면 URI 인코딩을 올바르게 적용해야 합니다. 복사한 뒤 보기 좋게 만들겠다며 문자를 임의로 바꾸면 파싱 경계가 달라질 수 있습니다. 직접 입력할 때는 전체 URI를 Password에 붙여 넣지 말고 해당 필드에 필요한 값만 입력하세요.

정리: 포트로 프로토콜을 추측하지 말고 필드를 대조하세요

주소와 포트가 같은데도 연결 결과가 다르면 UUID나 비밀번호, type, SNI, path, flow를 추가로 비교하세요. 포트 443은 여러 프로토콜에서 사용할 수 있으므로 VLESS를 Trojan으로 바꿀 근거가 되지 않습니다.

구독 URL: 고정된 노드 하나가 아닌 콘텐츠를 가져옵니다

구독 URL은 반복해서 요청할 수 있는 엔드포인트입니다. 클라이언트가 응답을 가져온 다음 그 안의 서버 항목을 파싱합니다. 응답은 여러 공유 링크로 이루어진 텍스트, 이를 Base64로 표현한 값, 또는 클라이언트가 지원하는 다른 형식일 수 있습니다. 실제로 인식할 수 있는지는 반환된 콘텐츠에 달려 있으며 URL 길이만으로 판단할 수 없습니다.

예를 들어 https://example.com/sub?token=xxxx의 token은 설명용 매개변수 이름입니다. 실제 주소는 경로에 인증 정보를 포함하거나 다른 쿼리 매개변수를 사용할 수 있습니다. 관계없어 보이는 매개변수를 지우거나 대소문자를 바꾸거나 & 뒤의 내용을 빠뜨리면 노드 목록 대신 오류 페이지가 반환될 수 있습니다.

Type → Subscribe

권장

이미 보유한 구독 URL을 저장하고 업데이트해 항목을 다시 가져오세요. 여기서 권장하는 방식은 구독 URL을 이미 보유한 경우에만 해당하며, 어떤 연결 서비스도 추천하는 것이 아닙니다.

적합한 경우: 구독 주소라고 명확히 안내된 엔드포인트가 있고 이후 항목을 동기화해야 할 때

Type → 해당 프로토콜

Add Server에서 Shadowsocks, VMess, VLESS, Trojan 등 해당 유형을 선택하고 연결 매개변수를 하나씩 입력해 저장하세요. 직접 입력한 단일 항목은 원래 구독 내용이 바뀌어도 자동으로 새 매개변수를 가져오지 않습니다.

적합한 경우: 전체 매개변수 목록이 있고 서버 하나의 필드를 하나씩 확인해야 할 때

구독에서 노드 하나를 공유하면 보통 공유 당시 그 노드의 매개변수만 담긴 스냅샷을 얻을 수 있으며, 이를 바탕으로 전체 구독 URL을 복원할 수는 없습니다. 반대로 구독 URL을 보유했다고 해서 노드 하나만 보유한 것도 아닙니다. 업데이트로 항목이 추가·삭제되거나 수정될 수 있습니다. 구독에서 생성된 항목을 직접 수정하기 전에 변경 사항을 기록해 두는 편이 좋습니다. 이후 업데이트에서 수정 내용이 덮어써질 수 있습니다.

Shadowrocket에서 확인하고 가져오기

먼저 원본 텍스트를 따로 보관한 다음 적절한 메뉴를 선택하세요. Home에서는 주로 서버와 연결 상태를 관리하고, Config에서는 규칙 설정을 관리합니다. 아무 규칙 파일 주소나 노드 구독 주소로 입력해서는 안 됩니다. QR 코드 스캔과 클립보드는 텍스트를 읽는 방법일 뿐이며, 어떤 종류의 항목을 만들지는 최종적으로 텍스트 내용에 따라 결정됩니다.

  1. 원문 확인

    시작 부분이 ss://, vmess://, vless://, trojan://인지, 아니면 용도가 명확히 안내된 HTTPS 구독 주소인지 확인하세요. 메신저가 덧붙인 따옴표와 설명 문구는 지워도 되지만 링크 내부의 매개변수는 삭제하지 마세요.

  2. 구독 추가

    구독 주소는 Home → 오른쪽 상단 ‘+’ → Add Server → Type → Subscribe를 선택하고 URL에 전체 주소를 입력하세요. 저장한 뒤 해당 구독을 업데이트합니다. 일반 서버의 Address 입력란에 전체 HTTPS 주소를 넣지 마세요.

  3. 단일 링크 가져오기

    단일 노드 링크는 전체를 복사한 뒤 Shadowrocket으로 돌아와 안내에 따라 가져올 수 있습니다. 시스템에서 붙여넣기 권한을 묻는 경우 필요에 따라 허용하세요. QR 코드는 Home 상단의 스캔 메뉴로 읽고 인식된 결과를 확인한 뒤 저장하세요. 확인하지 않은 항목을 바로 덮어쓰지 마세요.

  4. 매개변수 확인

    가져온 항목의 편집 화면을 열고 Type, Address, Port와 해당 UUID 또는 Password를 확인한 다음 TLS 및 전송 매개변수를 점검하세요. 자동 인식에 실패했다면 Home → ‘+’ → Add Server에서 해당 Type을 선택하고 기존 매개변수를 직접 입력할 수 있습니다.

  5. 연결 확인

    Home으로 돌아가 대상 서버를 선택해 연결하세요. 처음 VPN 구성을 추가할 때는 시스템 안내에 따라 허용한 뒤 Connectivity Test로 상태를 확인하세요. Global Routing의 현재 선택이 테스트 목적에 맞는지도 확인해야 합니다.

전체 링크를 복사했는데 가져오기 안내가 나타나지 않으면 먼저 시스템에서 클립보드 접근을 허용했는지, 텍스트가 줄바꿈·공백·서식 있는 문장 부호 때문에 잘리지 않았는지 확인하세요. 같은 내용을 Subscribe에 반복해서 추가하지 마세요. 파싱 가능한 단일 노드 URI라고 해서 업데이트 가능한 구독 엔드포인트가 되는 것은 아닙니다.

가져오기 실패, 업데이트 결과 없음, 연결 실패를 각각 확인하세요

이 세 가지 문제는 서로 다른 단계에서 발생합니다. 가져오기 실패는 텍스트를 제대로 파싱하지 못한 경우입니다. 업데이트 결과가 없는 것은 구독 콘텐츠를 가져오거나 파싱한 결과가 예상과 다른 경우입니다. 연결 실패는 서버 항목을 만든 뒤에 발생합니다. 단계별로 점검하면 잘못된 곳을 반복해서 수정하는 일을 줄일 수 있습니다.

Global Routing의 Proxy, Direct, Config, Scene은 트래픽 경로를 선택하며 잘못된 링크를 올바른 매개변수로 바꾸지는 않습니다. 특히 Direct에서는 대상에 접속되더라도 방금 가져온 서버가 정상 작동한다는 뜻이 아닙니다. Config에서는 요청이 DIRECT 규칙을 따를 수 있습니다. 서버를 확인하려면 브라우저에서 페이지가 열리는지만 보지 말고 선택한 항목과 현재 라우팅 방식도 함께 확인하세요.

정리: 원문을 보관하고 한 번에 하나씩 수정하세요

‘텍스트 인식 → 콘텐츠 가져오기 → 필드 확인 → 연결 검증’ 순서로 점검하세요. 구체적인 오류와 변경한 항목을 기록하고 기존 설정의 원래 매개변수로 먼저 되돌린 뒤 하나씩 문제를 확인하세요. 프로토콜, 포트, TLS 설정을 동시에 바꾸면 어떤 변경이 결과에 영향을 줬는지 알기 어렵습니다.

App Store 정식 앱 확인구매 및 복원 안내 보기