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のパラメータを示します。通常、それぞれのリンクが示すのは1つのサーバー項目です。複数のリンクを改行して並べても、自動更新できるサブスクリプションURLにはなりません。

https://で始まるアドレスは、HTTPSでコンテンツを取得することを示すだけで、接頭辞だけでサブスクリプションと判断することはできません。Webページ、アカウント管理ページ、サブスクリプションのエンドポイントはいずれも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またはパスワード、後ろにはホストとポートが続きます。?以降はクエリパラメータで、複数のパラメータは&で区切られます。以下の2つは構造を示すだけの例で、接続可能なサーバーを表すものではありません。

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は、説明用のパラメータ名にすぎません。実際のURLでは、認証情報がパスに含まれる場合も、別のクエリパラメータが使われる場合もあります。一見不要に見えるパラメータを削除したり、大文字・小文字を変えたり、&以降を省略したりすると、ノード一覧ではなくエラーページが返されることがあります。

Type → Subscribe

おすすめ

自分がすでに持っているサブスクリプションURLを保存し、更新して項目を再取得します。ここでのおすすめは、サブスクリプションURLをすでに持っていることが確認できている場合に限ります。接続サービスを推奨するものではありません。

適したケース:サブスクリプション用と明示されたエンドポイントがあり、今後も項目を同期したい場合

Type → 対応するプロトコル

Add ServerでShadowsocks、VMess、VLESS、Trojanなど該当するTypeを選び、接続パラメータを1つずつ保存します。個別に手入力した項目は、元のサブスクリプションが更新されても自動で新しいパラメータにはなりません。

適したケース:完全なパラメータ一覧があり、単一サーバーの各フィールドを照合したい場合

サブスクリプション内のノードを1つ共有しても、通常得られるのはその時点のパラメータのスナップショットで、サブスクリプションURL全体を復元することはできません。逆に、サブスクリプションURLを持っていても、ノードが1つだけとは限りません。更新によって項目が追加、削除、変更されることがあります。サブスクリプションから作成された項目を手動で変更する場合は、次回更新で上書きされる可能性があるため、変更内容を先に記録してください。

Shadowrocketで確認して追加する

まず自分の元のテキストを控えてから、追加方法を選びます。Homeでは主にサーバーと接続状態を管理し、Configではルール設定を管理します。任意のルールファイルURLをノードのサブスクリプションとして扱わないでください。QRコードやクリップボードはテキストを読み取る手段であり、最終的にどの種類の項目が作成されるかはテキストの内容で決まります。

  1. 元のテキストを確認

    先頭がss://、vmess://、vless://、trojan://のいずれかか、用途が明示されたHTTPSサブスクリプションURLか確認します。メッセージアプリが付けた引用符や説明文は取り除きますが、リンク内のパラメータは削除しないでください。

  2. サブスクリプションを追加

    サブスクリプションURLは、Home → 右上の「+」→ Add Server → Type → Subscribeの順に進み、URL欄に自分の完全なアドレスを入力します。保存後、そのサブスクリプションを更新してください。通常のサーバー設定のAddress欄に、HTTPS URL全体を入力しないでください。

  3. 単体リンクを追加

    単体ノードのリンクは全体をコピーしてShadowrocketに戻り、認識時の案内に従って追加します。ペーストの許可を求められた場合は、必要に応じて許可してください。QRコードはHome上部のスキャン機能で読み取り、認識結果を確認してから保存します。確認前の項目をそのまま上書きしないでください。

  4. パラメータを確認

    追加した項目の編集画面を開き、Type、Address、Portと、対応するUUIDまたはPasswordを確認します。続けてTLSと転送パラメータも照合してください。自動認識できない場合は、Home →「+」→ Add Serverから該当するTypeを選び、手元のパラメータを入力します。

  5. 接続を確認

    Homeに戻り、接続先のサーバーを選んで接続します。初回にVPN構成の追加を求められた場合は、システムの案内に従って許可してください。Connectivity Testも参考にしながら、Global Routingの現在の選択がテスト目的に合っているか確認します。

リンク全体をコピーしても追加の案内が表示されない場合は、まずクリップボードの読み取りが許可されているか、テキストが改行、空白、リッチテキストの句読点で途切れていないか確認してください。同じ内容を何度もSubscribeに追加しないでください。解析できる単体ノードのURIであっても、自動更新できるサブスクリプションエンドポイントになるわけではありません。

追加エラー・更新結果が空・接続エラーを個別に確認

この3種類の問題はそれぞれ異なる段階で発生します。追加エラーはテキストを正しく解析できていない状態、更新結果が空の場合はサブスクリプションの取得または解析で想定した項目を得られていない状態、接続エラーはサーバー項目を追加した後に発生する問題です。段階ごとに確認すれば、誤った箇所の設定を何度も変更せずに済みます。

Global RoutingのProxy、Direct、Config、Sceneは、トラフィックの経路を決めるものであり、誤ったリンクを正しいパラメータに直す機能ではありません。特にDirectでは、宛先にアクセスできても、追加したサーバーが使える証明にはなりません。ConfigではリクエストがDIRECTルールに一致する場合があります。サーバーを確認するには、ブラウザーでページを開けるかだけでなく、選択中の項目と現在のルーティング方式も確認してください。

要点:元のテキストを残し、変更は一度に1項目だけ

「テキストの認識 → 内容の取得 → フィールドの照合 → 接続の確認」の順に確認します。具体的なエラーと変更内容を記録し、まず手元にある設定の元のパラメータに戻してから、問題を1つずつ切り分けてください。プロトコル、ポート、TLS設定を同時に変更すると、どの変更が結果に影響したのか判断できません。

App Storeで正規アプリを確認購入と復元について