Shadowrocketの共有リンク形式を解説:ss://・vmess://・vless://・trojan://とサブスクリプションURLの違い

ss://、vmess://、vless://、trojan://の形式と項目を解説。単一リンクとサブスクリプションURLのインポート方法、更新方法、用途の違いを紹介します。

この記事の概要

Shadowrocketでは、共有リンクに1件分の接続設定が含まれるのに対し、サブスクリプションURLは再取得できる設定一覧を参照します。ご自身で用意した接続サービスの設定やサブスクリプションをお持ちの方向けに、リンクの種類、プロトコル項目の確認方法、インポート・更新・接続確認の手順を説明します。本文中のドメイン、パスワード、UUIDは形式を示す例であり、接続には使用できません。

まず確認:接続設定とリモートリストのURL

ss://、vmess://、vless://、trojan://は、1件分の設定を表す共有リンクでよく使われる接頭辞です。接続先のアドレス、プロトコル、認証方法を示します。インポートすると、Shadowrocketがリンクからサーバー、ポート、認証情報を読み取ります。インポートできたことは形式を認識できたことを示すだけで、サーバーへの接続やアカウントの有効性を保証するものではありません。

サブスクリプションURLは通常、https://で始まり、取得先のリモートアドレスを示します。URLから返される内容は、複数の共有リンクや、それらをBase64でエンコードしたテキストの場合があります。通常のWebページもhttps://で始まるため、接頭辞だけでサブスクリプションと判断することはできません。

4種類
この記事で扱う接頭辞:ss / vmess / vless / trojan
443
この記事のTLS例で使うポート。実際の値は既存の設定に従ってください
8388
この記事のShadowsocks例で使うポート。固定値ではありません

ss://:暗号化方式、パスワード、アドレスを確認

Shadowsocksの共有リンクには、認証情報を@の前に置き、その後にサーバーとポートを続けるSIP002形式がよく使われます。認証部分は通常、method:passwordをURL-safe Base64でエンコードしたものです。クエリパラメーターや、#以降の注記が付く場合もあります。長い文字列全体をエンコードする旧形式もあるため、手作業で分解する際は、すべてのリンクが同じ構造だと決めつけないでください。

ss://
デコード後の認証情報:aes-128-gcm:example-password
サーバー:example.com
ポート:8388
注記:Example
項目意味と確認方法
method例:aes-128-gcm。サーバー側の設定と一致させてください。名前が似ているという理由で置き換えることはできません。
password認証に使用します。大文字と小文字を区別します。コピー時は元の値を保持し、空白や改行を加えないでください。
host:portサーバーアドレスと待ち受けポート。8388は例であり、ご自身の実際のポートの代わりにはなりません。
pluginなどのクエリパラメーター転送方式に影響する場合があります。インポート結果と現在の対応状況を確認し、むやみに削除しないでください。
#以降の注記主にリスト内で項目を見分けるためのものです。注記を変更してもサーバーアドレスは変わりません。

Base64はエンコード方式であり、情報を保護する手段ではありません。認証情報を復元できる人はパスワードも読み取れます。インポートできない場合は、まずリンク全体がチャットアプリによって改行・切り詰められたり、句読点が加えられたりしていないか確認し、次にエンコードと形式を確認してください。暗号化方式を先に変更するのは避けてください。

vmess://:JSONに戻して転送項目を確認

VMessの共有リンクでは、vmess://の後にBase64エンコードされたJSONを置く形式がよく使われます。以下はエンコード前の構造であり、そのまま貼り付けてインポートできる完全な共有リンクではありません。取得元によって項目は異なるため、この例を自分の設定に上書きしないでください。

{
  "v": "2",
  "ps": "Example",
  "add": "example.com",
  "port": "443",
  "id": "00000000-0000-0000-0000-000000000000",
  "aid": "0",
  "net": "ws",
  "type": "none",
  "host": "example.com",
  "path": "/example",
  "tls": "tls"
}

インポート後は対象項目の編集画面を開き、サーバー、ポート、UUID、転送方式、TLSの設定を元の設定と一つずつ照合してください。テキストをデコードできてもアプリが認識しない場合は、共有形式の違いや項目の非対応が考えられます。リンクの接頭辞だけを変更するのではなく、元の設定の取得元から対応形式で再エクスポートしてください。

vless://とtrojan://:似た形式でも認証方法は異なる

どちらも「認証情報、サーバー、ポート、クエリパラメーター、注記」の組み合わせで表されることがありますが、認証項目の意味は異なります。VLESSでは通常UUIDを、Trojanでは通常パスワードを使います。以下の2例は項目の位置を示すだけで、ドメイン名と認証情報は架空の値です。

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

trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Example
項目の位置VLESSTrojan
@の前通常はUUID通常は必要に応じてURLエンコードしたパスワード
security=tlsこの例ではTLSを使用しています。すべての設定で同じセキュリティ設定が使われるわけではありません。この例ではTLSを使用しています。サーバー側の設定と一致させてください。
typeこの例ではwsを使用しています。Hostとpathもあわせて確認してください。この例ではtcpを使用しています。wsのパラメーターをそのまま流用しないでください。
sniTLSハンドシェイクに使用するサーバー名TLSハンドシェイクに使用するサーバー名

encryption=noneはこの例のVLESSプロトコルのパラメーターであり、通信全体でTLSを使用しないという意味ではありません。path=%2Fexampleをデコードすると/exampleになります。パスワード、パス、注記に@、#、&などの文字が含まれる場合は、位置に応じて正しくエンコードしてください。そうしないと区切り文字として解釈されることがあります。

インポートと更新:リンクの種類に応じた手順

まず、クリップボードに完全なリンクだけが入っており、前後に説明文が含まれていないことを確認してください。ShadowrocketのHomeでは接続項目を確認し、Configでは設定ファイルを管理し、Settingsではアプリの設定を行います。単一の共有リンクもSubscribeも、最終的にHomeで選択可能な項目として表示されることがありますが、その後の管理方法は異なります。

2つのインポート方法:単一設定とSubscribe

単一の共有リンクがある場合
  • ss://、vmess://、vless://、trojan://の完全なテキストをコピーします。
  • Homeに戻ります。クリップボードからのインポート通知が表示されたら、内容を確認してインポートし、システムの案内に従って読み取りを許可します。
  • 通知が表示されない場合は、該当するインポート機能を使うか、Home → +からプロトコルを選び、元の設定に従って各項目を入力します。
  • 保存後、編集画面を開き、アドレス、ポート、認証情報、転送パラメーターを確認します。
サブスクリプションURLがある場合
  • Home → + → Typeを開き、Subscribeを選択します。
  • URL欄にご自身のサブスクリプションURL全体を貼り付け、見分けやすい注記を入力して保存します。
  • 初回の取得を完了したら、該当するグループを展開して項目を確認します。同期が必要な場合は、そのサブスクリプションを更新してください。
  • 更新後、選択した項目を再確認してください。特に、取得元で削除または置換された項目に注意が必要です。

単一リンクは設定値を保存し、Subscribeはリモートリストの取得元を保持します。サブスクリプション内の項目を変更する前に、元の値を記録してください。次回の更新でローカルの変更が上書きされる場合があります。

サブスクリプションURLは、以下のようなテキスト形式の場合があります。これは形式を示す例であり、設定の取得には使えません。実際のURLでは、クエリパラメーターやパスにアクセス情報が含まれることが多いため、完全な状態で保持してください。また、公開ページに掲載したり、信頼できない変換サイトに渡したりしないでください。

https://example.com/sub?token=xxxx
  1. リクエストがタイムアウトする:現在のネットワークからサブスクリプションURLにアクセスできるか確認し、ドメイン解決の失敗、接続の失敗、HTTPレスポンスのエラーを切り分けます。
  2. 401または403が返される:URL内の認証情報が欠けていないか確認し、元の設定の取得元にアクセス権を確認してください。同じURLを繰り返しインポートしても、通常は権限の問題は解決しません。
  3. リクエストは成功したが項目がない:返された内容がサブスクリプションのデータであり、ログインページ、エラーページ、通常のWebページではないことを確認してください。ステータスコードが成功でも、内容の形式が正しいとは限りません。

インポート後の確認:設定の問題とルーティングの問題を分ける

項目がHomeに表示されても、接続確認が必要です。まず設定値を確認し、次にGlobal Routingの状態を確認してから、対象リクエストの接続結果を見ます。サブスクリプションは接続項目を更新するもので、完全なルール一式も必ず提供されるとは限りません。ルールが適用されるかどうかは、現在のConfigとルーティングの選択にも左右されます。

Global Routing → Config

おすすめ

ルールを準備したうえで、現在のConfigに応じてポリシーを決定します。DOMAIN-SUFFIX、GEOIP、IP-CIDRなどのルールとFINALのフォールバックが結果に影響します。一致するルールがないリクエストが必ず直接接続されるとは限りません。

適した用途:インポート後に、通常のルールと接続項目が連携して動作するかを確認する。

Global Routing → Proxy

アプリが処理する接続にプロキシを適用し、一時的にルールによる振り分けの影響を減らします。正しく、かつ利用可能な接続項目が選択されていることも確認してください。

適した用途:プロキシ接続の問題とConfigのルール判定の問題を、一時的に切り分ける。

Global Routing → Direct

直接接続との比較に使います。この状態でWebページを開けても、インポートしたプロキシ設定が有効だとは証明できず、サブスクリプション内の項目が使えるかどうかも判断できません。

適した用途:現在のネットワークで直接接続できるか確認し、障害時の比較基準を作る。

まとめ:同じ項目でルーティングを比較する

ネットワークと選択中の項目は変えず、一時的にConfigからProxyに切り替えて同じ接続先をテストします。Configでのみ失敗する場合は、まず適用されたルールと対象ポリシーを確認してください。どちらでも失敗する場合は、認証情報、転送パラメーター、サーバーへの到達性を確認します。テスト後は元のルーティング状態に戻してください。

Global RoutingにはSceneも含まれます。Sceneを4つ目の共有リンク形式やプロトコルと混同しないでください。Settings → On Demandでは条件に応じた接続を管理しますが、共有リンクをサブスクリプションに変換する機能ではありません。トラブルシューティング中は、複数の項目を同時に変更して原因が分からなくならないよう、各設定の変更前の状態を記録してください。

よくある質問:認識された後に確認すること

vmess://をvless://に変更すれば、そのまま使えますか?

使えません。共有リンクの構造、認証方法、転送要件が異なります。元の設定の取得元から、該当プロトコルの完全な設定を入手してインポートし、各項目を確認してください。接頭辞だけを置き換えると、解析に失敗したり、サーバーの要件に合わない項目が作成されたりします。

サブスクリプションを更新したら、手動で変更したポートが元に戻りました。なぜですか?

サブスクリプションの更新時に、リモートのデータで項目が再作成または上書きされる場合があります。まず、サブスクリプションから返される元のポートを確認してください。ローカルの変更を保持する必要がある場合は、別の項目を作成して区別しやすい注記を付けます。その項目は元のサブスクリプションと自動同期されない点にご注意ください。

インポートは成功したのに、接続できないのはなぜですか?

Homeで対象項目の編集画面を開き、サーバー、ポート、パスワードまたはUUID、TLS、SNI、転送パラメーターを順に確認してから、前のセクションの手順でGlobal Routingを比較してください。リンクを解析できても、読み取れたのは項目の形式だけで、接続先サービスの状態までは確認できません。

QRコードからのインポートとリンクのコピーでは、取得する内容が違いますか?

QRコードはテキストを伝えるためのものです。読み取った内容が単一のプロトコルリンクなら単一設定として、サブスクリプションURLならSubscribeとして扱います。保存前に内容の種類を確認してください。QRコードから読み込んだからといって、自動更新されるとは限りません。

トラブルシューティングのために、リンク全体のスクリーンショットを他の人に送ってもよいですか?

まず、パスワード、UUID、サブスクリプショントークン、アカウントを特定できる情報を隠し、プロトコル、エラーメッセージ、必要な転送項目だけを残してください。Base64のテキストにも認証情報が含まれる場合があります。すでに公開されている場合は、元の設定の取得元から該当する認証情報を無効化または変更してください。

項目の整理についてはサブスクリプションと接続項目の管理方法をご覧ください。初回設定とシステム許可の手順は使い方ガイドで確認できます。この記事では、ユーザーがすでにお持ちの設定の使い方を説明しており、接続サービスの提供や選定は扱いません。

App Storeで正規アプリを確認