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

共有リンクは単一ノード、サブスクリプションリンクは定期更新できるノード一覧を指します。4種類のプレフィックスの構造、両者の違い、Shadowrocketへの取り込み方法を解説します。

この記事の要点

利用中のサービスとサブスクリプションをすでにお持ちで、Shadowrocketに接続情報を追加する方を対象としています。まずリンクのプレフィックスから単一の共有リンクとリモートサブスクリプションを見分け、サーバー、ポート、認証情報、通信設定を確認します。その後、追加・テスト・更新の順に動作を確認してください。記事中の例は構造の説明用で、接続には使えません。当サイトではノードやサブスクリプションの提供・販売・推奨は行っていません。

1. 共有リンクとサブスクリプションリンク:保存されるのは接続情報か、リモートURLか

ss://、vmess://、vless://、trojan://は通常、1つのノードの接続情報を文字列にエンコードしたものです。追加すると、クライアントにサーバーアドレス、ポート、認証情報、関連設定が登録されます。サーバーのポートが後から変更されても、保存済みの共有リンクは自動更新されません。

サブスクリプションリンクは通常、https://形式のURLです。ShadowrocketがそのURLにアクセスし、応答に含まれるノード一覧を読み込みます。再度更新すると、内容を改めて取得します。そのため、サブスクリプションで複数のノードを管理できる一方、一時的に1つだけ返される場合もあります。更新できるかどうかは、一覧に現在何件あるかではなく、リモートのサブスクリプション元が登録されているかで決まります。

4種類
この記事で扱う共有リンクのプレフィックス:ss / vmess / vless / trojan
2種類
追加元:単一の接続情報とリモートサブスクリプションURL
443
この記事のTLS例で使用するポートです。プロトコルで固定されたポートではありません。

https://で始まるだけでは、そのURLがサブスクリプションだとは限りません。サービスのアカウントページ、利用案内ページ、サブスクリプションAPIもHTTPSを使うことがあります。有効なサブスクリプションURLは、ログイン画面やウェブページではなく、クライアントが認識できるサブスクリプションデータを返す必要があります。

2. ss://:Shadowsocksの暗号化方式、パスワード、サーバー

一般的なShadowsocks共有リンクはSIP002形式を採用し、「暗号化方式:パスワード」をBase64でエンコードしたユーザー情報の後に、サーバーとポートを続けます。Base64はエンコード方式であり、情報を秘匿する仕組みではありません。リンク全体を入手した人は、通常、認証情報を復元できます。

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

古い形式では、「暗号化方式:パスワード@サーバー:ポート」全体をエンコードするものもあります。そのため、同じss://で始まっていても、後続の文字列をすべて@で分割できるとは限りません。追加に失敗した場合は、リンクが完全か、暗号化方式が対応しているかを確認してください。異なる形式を無理に組み替えるのは避けましょう。

3. vmess://:Base64の中身は通常JSON

一般的なVMess共有形式は、vmess://の後にBase64エンコードされたJSONが続きます。通常のURLのように、外側からホストやポートを直接確認することはできません。以下はデコード後の構造を説明するための例で、コピーして追加できる共有リンクではありません。

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

デコード後に閉じ括弧が欠けている、フィールドが途中で切れている、または装飾付きの引用符が含まれている場合は、コピー時にデータが壊れた可能性があります。認証フィールドを推測で補うのではなく、元の場所からリンク全体をコピーし直してください。JSONを正しく解析できても、サーバーに接続できるとは限りません。

4. vless://とtrojan://:形式は似ていても認証の意味は異なる

この2種類のリンクはURI形式が一般的です。プレフィックスの後に認証情報、@の後にサーバーとポート、?の後に通信方式やセキュリティ設定、#の後に備考が続きます。形式が似ていてもプロトコルを相互に置き換えられるわけではありません。プレフィックスを変更しても、サービスを別のプロトコルに変換することはできません。

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
項目VLESSの例Trojanの例
認証情報UUIDパスワード
通信設定type=ws。Hostとパスの一致が必要type=tcp。指定された設定に従って使用
TLS名sni=example.comsni=example.com
備考Demo-VLESSDemo-Trojan

例のencryption=noneはVLESSのプロトコル層の設定です。接続全体にTLSが使われていないことを意味するわけではありません。security=tlsなどのパラメーターも確認してください。共有形式や通信方式の組み合わせによっては、flowなどのフィールドが含まれる場合もあります。具体的な値は既存の設定に従い、すべてのVLESSリンクに同じ値を設定しないでください。

URLエンコードも解析結果に影響します。%2Fdemoをデコードすると/demoになります。パスワードやパスに@、#、&などの予約文字が含まれる場合は、正しくエンコードする必要があります。チャットアプリが付けた句点、改行、引用符まで一緒にコピーしないでください。また、リンク全体を何度もデコードすると、パラメーターの区切りが変わるおそれがあります。

5. Shadowrocketに単一リンクとサブスクリプションを追加する

以下では、iPhone / iPadで一般的なHome画面を操作例として説明します。他のプラットフォームではボタンの配置が異なる場合がありますが、「単一サーバーの追加」と「Subscribeソースの追加」は区別してください。Homeではノードと接続を管理し、Configではルール設定、Settingsではアプリのオプションを管理します。ノードリンクをConfigに読み込んでも、Homeへのサーバー追加の代わりにはなりません。

既存の共有リンクを1つ追加する

  1. ご自身の設定元からリンク全体をコピーし、プロトコルのプレフィックスから備考の末尾まで保持してください。
  2. Homeを開き、クリップボードから読み込む項目を選択します。クリップボードへのアクセス許可が表示された場合は、許可してから続行してください。他のプラットフォームでこの項目が表示されない場合は、対応する読み込みメニューを使用します。
  3. QRコードを使う場合は、完全なリンクがコード化されていることを確認してください。スキャンは入力方法にすぎず、リンク内のプロトコル設定は変わりません。
  4. 追加後、登録内容の詳細を開き、プロトコル、アドレス、ポート、認証情報、TLS / 通信設定を確認します。その後、保存して該当の登録内容を選択してください。

既存のリモートサブスクリプションを追加する

  1. Home → +を開き、TypeをSubscribeに設定します。
  2. 既存のサブスクリプションURLをURLに貼り付け、見分けやすい備考を入力して保存します。ここに入力するのはサブスクリプションのURLで、サービスのトップページではありません。
  3. そのサブスクリプションの更新操作を実行し、リクエストが完了するまで待ってから、サブスクリプショングループを開いて返されたノードを確認します。アイコンメニューが表示される場合は、その中のUpdateを選択してください。
  4. 後で更新できるよう、サブスクリプションの登録情報を残してください。ノードを1つだけコピーして元の登録情報を削除した後も、コピーが同期されると期待しないでください。

6. 追加結果を確認する:まず接続情報を確認し、その後ルールを確認

追加に成功したという表示は、クライアントがデータを認識したことを示すだけです。認証、通信、リモートサーバーが正常とは限りません。まず追加した項目を選択し、システムの接続許可を完了して接続をオンにします。その後、接続テストと実際のアクセスを確認してください。テスト結果の数値は使用したテスト方法によるもので、継続的なダウンロード速度を示すものではありません。

Global Routing → Config

おすすめ

現在のConfigのルールに従って通信先を決定します。ルールに一致すると、DIRECT、プロキシ、または設定済みの別のポリシーが選ばれる場合があります。すべてのリクエストが選択中のノードを経由するわけではありません。

適した用途:追加確認後、日常的なルール振り分けに使う場合

Global Routing → Proxy

クライアントのプロキシ処理対象となる通信をプロキシ経由にし、一時的にルール選択による影響を減らします。システム上のあらゆる通信が必ずプロキシ経由になるわけではありません。

適した用途:「ノードは使えるのに、対象の通信がプロキシを経由しない」場合の切り分け

Global Routing → Direct

通信を直接接続にします。この状態では、追加したプロキシノードが利用可能かどうかを確認できません。この状態でウェブページが開けても、確認できるのは該当する直接接続経路が使えることだけです。

適した用途:プロキシ経由の経路と一時的に比較する場合

Global RoutingのSceneは、設定されたシーンに応じて関連設定を適用する機能で、5つ目の共有プロトコルではありません。切り分け時はSettings → On Demandも確認してください。オンデマンド接続は条件に応じて接続を再確立することがありますが、誤ったUUID、パスワード、WebSocketパスを修正するものではありません。

まとめ:確認条件を一度に1つだけ変更する

まずアドレス、ポート、認証情報を確認し、次にTLSと通信設定を確認します。接続情報を確認してから、一時的にGlobal Routingを切り替えてください。ProxyではアクセスできてConfigではできない場合は、すぐにサブスクリプションを削除して再追加するのではなく、ルールの一致状況とポリシー選択を優先して確認します。

7. 共有リンクとサブスクリプションの追加に関するよくある質問

リンクをコピーしたのに、Homeに項目が追加されないのはなぜですか?

コピーした内容がウェブページのタイトルではなく、ss://、vmess://、vless://、trojan://のいずれかで始まる完全な文字列か確認してください。外側の引用符や末尾の句読点は取り除きますが、リンク内部のクエリパラメーターは削除しないでください。その後、Homeの読み込み項目からもう一度追加します。

httpsのURLを追加したのに、更新後もノードが表示されないのはなぜですか?

登録内容のTypeがSubscribeに設定されているか、URLがご自身のサブスクリプションURLかを確認してください。ログインページ、期限切れのトークン、未対応の応答内容ではノードを生成できない場合があります。元のURLとエラーメッセージを確認し、サブスクリプションを別のプロトコルプレフィックスに変更して「変換」しようとしないでください。

サブスクリプション更新後、手動で変更したノード設定が元に戻るのはなぜですか?

サブスクリプションの登録内容は通常、リモートのデータによって管理されます。更新時に関連ノードが再生成または上書きされることがあります。一時的に設定を確認する場合は、元のサブスクリプションを残したまま、独立した複製を作成してテストしてください。長期的な変更は元の設定元で行うと、更新のたびに修正し直す手間を防げます。

TLSエラーが表示された場合、証明書の検証を無効にしてもよいですか?

検証を無効にすることを一般的な解決策にしないでください。まず端末の時刻、SNI、接続先アドレス、サーバー証明書が想定どおりかを確認します。WebSocketではHostとパスも確認してください。認証情報を伏せたうえでエラー内容を保存し、ご自身の設定元に問い合わせてください。

同じリンクを別のプロトコルにそのまま変更できますか?

できません。Shadowsocks、VMess、VLESS、Trojanでは認証とハンドシェイクが異なり、サーバー側も対応するプロトコルを提供している必要があります。切り替える場合は、既存の設定から該当プロトコルの接続情報一式を使用してください。プレフィックスやポートだけを置き換えてはいけません。

元のリンクを完全な状態で保持し、プロトコルごとに項目を確認して、サブスクリプションの登録情報から更新してください。共有形式は接続情報を受け渡すためのもので、接続結果は設定、ネットワーク、リモートサーバーに左右されます。

Shadowrocket をダウンロード