この記事では、利用中のサービスから設定情報やサブスクリプションを入手済みの方に向けて、リンクの種類の見分け方、プロトコル項目の確認方法、読み込み先を解説します。Shadowrocketが読み込むのは設定データです。QRコードは、そのデータを文字列以外の形で表したものにすぎません。単一の設定とリモートサブスクリプションを区別し、アドレス、ポート、認証情報を確認することで、サブスクリプションURLをサーバーアドレス欄に入力するミスを防げます。
1. 単一ノードURIとサブスクリプションURLの違い
ss://、vmess://、vless://、trojan://は、この記事で取り上げる4種類の共有リンクの接頭辞です。接続パラメーターの解釈方法を示し、通常は1件のサーバー設定に対応します。一方、サブスクリプションURLはリモートコンテンツを参照するURLです。Shadowrocketがその内容を取得してから、含まれる設定項目を解析します。1つのサブスクリプションに複数のプロトコル設定が含まれる場合も、1件だけの場合もあります。
サブスクリプションURLには、https://example.com/sub?token=xxxxのようなHTTPS形式がよく使われます。これは説明用の架空の値で、有効な設定は取得できません。https://で始まるだけでは、サブスクリプションとは判断できません。Webページやアカウント画面、設定ファイルのURLにも使われるため、サービス提供元の案内と実際の応答内容を確認してください。
見分け方:リンクが何を返すか確認する
プロトコルの接頭辞があるリンクは単一の設定として扱います。HTTPSのURLは、ログインページではなくサブスクリプションのエンドポイントであることを確認してからSubscribeに登録してください。サブスクリプションURLを「簡略化」するためにクエリパラメーターを削除してはいけません。
2. ss://とvmess://:異なるエンコード形式
ss://:Shadowsocksの認証情報とサーバーの場所
一般的なShadowsocksの共有形式では、暗号化方式とパスワードを組み合わせてエンコードし、サーバーのドメインとポートは外側に残します。以前の形式では、さらに多くの項目をまとめてエンコードしている場合もあります。以下は構造を説明するための例であり、利用可能なサービスを示すものではありません。
ss://[email protected]:8388#Demo-SS
Base64デコード後の認証情報:
aes-128-gcm:pass
aes-128-gcmは暗号化方式、passは説明用のパスワードです。読み込み後、それぞれの項目を確認してください。エンコードされた文字列全体をパスワード欄に入力するものではありません。example.comは説明用のサーバーアドレス、8388はこの例のポート番号です。実際のポート番号は、利用中のサービスの設定と一致させてください。#Demo-SSは表示用の名前で、サーバー認証には使われません。名前に日本語や空白が含まれる場合、パーセントエンコードされることがあります。- プラグインパラメーターが含まれるリンクは、すべてのパラメーターを残し、アプリが該当する設定を解析できることを確認してください。ドメイン、ポート、パスワードだけを残すのでは不十分です。
vmess://:一般的な形式はJSONをBase64でエンコード
一般的なVMess共有リンクでは、JSONをエンコードしてvmess://の後ろに付けます。以下はデコード後の説明用データで、URIとしてそのまま貼り付けられる完全な共有リンクではありません。VMessの共有形式には複数の種類があり、特定のJSON項目の並びをすべての提供元に共通する標準とみなすことはできません。
{
"v": "2",
"ps": "Demo-VMess",
"add": "example.com",
"port": "443",
"id": "00000000-0000-0000-0000-000000000000",
"aid": "0",
"net": "ws",
"type": "none",
"host": "example.com",
"path": "/demo",
"tls": "tls"
}
この一般的な形式では、addとportが接続先アドレスとポート、idが認証用UUID、netが伝送方式を表します。ここでのhostとpathはWebSocket関連のパラメーターです。WebページのURLのように見えても省略できません。接続先アドレス、HTTP Host、TLSのサーバー名はそれぞれ異なる項目です。実際の値は、利用中の設定と照らし合わせて確認してください。
3. vless://とtrojan://:認証項目は似ていても意味は異なる
どちらのリンクも「認証情報、サーバーアドレス、ポート、クエリパラメーター、名前」という構成が一般的です。見た目が似ていても、プロトコルを相互に置き換えられるわけではありません。以下のドメイン、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
| 項目の位置 | VLESSの例 | Trojanの例 | 確認ポイント |
|---|---|---|---|
@より前 | UUID | パスワード | 認証方式が異なるため、相互に入力できません |
| アドレスとポート | example.com:443 | example.com:443 | 443は一例です。利用中の設定に従ってください。 |
type | ws | tcp | 伝送方式を表す項目で、プロトコル名ではありません |
sni | example.com | example.com | TLSのサーバー名に関する設定に使用 |
#より後 | Demo-VLESS | Demo-Trojan | 表示名であり、認証項目ではありません |
encryption=noneはVLESSの例にあるプロトコルパラメーターで、この例でTLSが無効という意味ではありません。security=tlsでTLS関連の設定を指定しています。また、ポート番号が443だからといって、TLSが有効とは限りません。ポート番号だけでは暗号化方式はわかりません。
クエリパラメーター内の%2Fはスラッシュを表し、&はパラメーターの区切りに使われます。コピー時は元のテキスト全体を保持し、エスケープ済みのパスを二重にエンコードしないようにしてください。共有形式によって対応するパラメーターは異なります。読み込み後もTLS、伝送方式、Host、Pathなどが適切な設定に反映されているか確認してください。
4. スキャン・貼り付け・Subscribe:設定の形式に合わせて読み込む
QRコードには単一のURIもサブスクリプションURLも格納できます。スキャンしても、中に含まれる形式は変わりません。以下はShadowrocketでの読み込み方法を比較したものです。「おすすめ」は更新可能なサブスクリプションをすでに利用している場合の選択肢を指し、特定のプロトコルやサービスの優位性を示すものではありません。
Subscribe
おすすめリモートサブスクリプションURLを保存し、そこから設定一覧を取得します。次回以降も同じURLで更新できるため、共有URIを1件ずつ貼り付け直す必要はありません。
こんな場合に:サブスクリプションURLがあり、リモート更新を維持したい
共有URIを貼り付け
プロトコルリンク全体をコピーし、アプリのクリップボード読み込み機能を使います。そのときのテキストに含まれるパラメーターが読み込まれますが、サブスクリプションとして登録されるわけではありません。
こんな場合に:ss://、vmess://、vless://、trojan://の単一リンクを受け取った
QRコードをスキャン
Homeのスキャン機能でQRコードを読み取り、認識された内容を確認します。結果がHTTPSのURLの場合は、サブスクリプションのエンドポイントかどうかも確認してください。
こんな場合に:設定がQRコードで提供され、長い文字列を手入力したくない
サブスクリプションの読み込み手順
- 利用中のサービスの管理画面からサブスクリプションURL全体をコピーし、パスとクエリパラメーターをそのまま残します。ページタイトルやログインページのURLはコピーしないでください。
Home → + → Type → Subscribeを開き、サブスクリプションURLをURLに入力します。識別しやすい名前を付けて保存してください。- 取得が完了するまで待ち、想定した設定項目が表示されているか確認します。HTTPエラーや解析エラーが起きた場合、一覧が空でも読み込み成功とは限りません。
- リモート側の変更を反映するには、Homeで該当するサブスクリプションの更新操作を行います。更新後、項目数、アドレス、選択中の項目に変化がないか確認してください。
単一のURIを読み込む場合は、プロトコルの接頭辞から末尾の名前までを含むテキスト全体をコピーしてから、Shadowrocketに戻ってクリップボードから読み込みます。貼り付け内容へのアクセス許可を求められた場合は、この操作に必要な範囲で許可してください。認識されない場合は、チャットの書式によって文字列に空白、改行、日本語の句読点が入っていないか確認します。URI全体をサーバーアドレス欄に入力してはいけません。
5. 読み込み後に接続とルーティングをそれぞれ確認
Homeに項目が表示されても、設定が保存されたことを示すだけで、認証、TLSハンドシェイク、アクセス先のWebサイトへの接続成功を意味するわけではありません。まず該当項目の編集画面を開き、元の設定と照らし合わせてプロトコル、アドレス、ポート、認証情報を確認します。その後、伝送方式とTLSのパラメーターを確認してください。
- Homeで使用する項目を選び、サブスクリプション更新前の別の設定を選んでいないか確認してください。
Connectivity Testを実行し、成功、タイムアウト、エラーの具体的な状況を記録します。テスト結果だけでは、実際の対象Webサイトへのアクセスを確認できません。Home → Global Routingを確認します。Configは現在の設定ルールに従って通信を処理し、Proxyはプロキシ経由、Directは直接接続します。Sceneは設定したシーンに従って処理します。Configを使う場合は、Configで現在の設定とルールも確認してください。共有URIにDOMAIN-SUFFIX、GEOIP、IP-CIDR、FINALのルールが含まれることは通常ありません。
サブスクリプションの更新で同期できるのはリモートの設定項目です。ローカルのルーティングルールは自動では修正されません。Settings → On Demandは条件に応じて接続を開始する動作を管理する項目で、サブスクリプションの読み込み先ではありません。読み込み、接続の開始条件、ルーティングを分けて確認すると、どの段階で失敗しているか特定できます。
6. 共有リンクとサブスクリプション更新に関するよくある質問
ss://をコピーしたのに認識されないのはなぜですか?
接頭辞が残っていること、テキストが途中で切れていないこと、引用符や説明文が混ざっていないことを確認してください。元の提供元からリンク全体をコピーし直して、クリップボードから読み込みます。それでも失敗する場合は、プラグインパラメーター付き、または異なるエンコード形式の共有リンクか確認し、利用中のサービス提供元にアプリが対応する形式の設定を問い合わせてください。
サブスクリプションURLをブラウザーで開けるのに、Subscribeでエラーになるのはなぜですか?
Webページが開くことからわかるのは、応答を受信したということだけです。ログインページに転送されていないか、設定データではなくアカウントの案内が返されていないか確認してください。URLのtokenが完全か確認します。401または403の場合は認証状態を、タイムアウトの場合は現在のネットワークからサブスクリプションのホストにアクセスできるかを確認してください。
サブスクリプションを更新したら、手動で変更した項目が変わったのはなぜですか?
サブスクリプションの項目はリモートの内容に基づくため、更新時に再生成または置き換えられることがあります。手動での変更を残したい場合は、必要なパラメーターを独立した設定として保存し、記録を取ってから更新してください。更新後は現在選択中の項目を確認し、同じ名前だからといって内容も変わっていないと判断しないでください。
確認を頼むためにリンク全体を他の人に送ってもよいですか?
共有URIにはパスワードやUUIDが、サブスクリプションURLには設定一式へのアクセス権を与えるtokenが含まれることがあります。認証情報とtokenを伏せ、プロトコル、ポート、エラーメッセージ、必要な伝送設定だけを共有してください。有効な認証情報が漏れた場合は、利用中のサービスの管理画面から再設定し、ローカルの設定も更新してください。
Shadowrocketはクローズドソースの商用アプリで、主にiPhoneとiPadで利用できます。入手先はApp Storeのみです。アプリの買い切り価格に接続サービスは含まれません。この記事は、利用者が自身の設定やサブスクリプションをすでに持っていることを前提としています。当サイトではノード、サブスクリプション、接続サービスの提供・販売・推奨は行っていません。