Shadowrocketの単一ノード共有リンクは1つの接続先を示し、サブスクリプションURLは複数の項目を取得・更新するためのものです。利用中のサービスとサブスクリプションをお持ちの方向けに、リンクの接頭辞による種類の見分け方、認証・通信方式・エンコードされた情報、インポート後の確認とトラブル対処の手順を解説します。記載のアドレス、パスワード、UUIDはすべて架空の値で、接続には使用できません。
共有リンクとサブスクリプションURLを見分ける
ss://、vmess://、vless://、trojan://は、プロトコル共有リンクでよく使われる接頭辞です。これらが示すのはノードの接続情報であり、WebページのURLではありません。QRコードはテキストを格納する方法の一つです。QRコードを読み取っただけでサブスクリプションがインポートされるわけではなく、種類はコード内の内容によって決まります。
サブスクリプションURLには通常、https://が使われます。例:https://example.com/sub?token=xxxx。ShadowrocketはこのURLにアクセスし、返された内容を解析します。HTTPSで始まるだけではサブスクリプションとは断定できません。ログインページやエラーページ、通常のWebページもHTTPSを使うため、提供元の案内とインポート結果をあわせて確認してください。
| 入力の種類 | 内容 | その後の更新 |
|---|---|---|
| 単一ノードの共有リンク | 1つの接続先のアドレス、ポート、認証情報と任意の通信パラメータ | 通常はインポート時点の設定内容です。元のテキストが変わっても自動では追従しません |
| サブスクリプションURL | リモートの項目一覧を取得するための入口。アクセス用の認証情報が含まれる場合があります | 更新時にURLへ再アクセスし、取得できる項目は返された内容によって変わります |
| QRコード | テキストを画像にしたもの。共有リンクの場合もサブスクリプションURLの場合もあります | コード内に格納された入力の種類によって決まります |
ノードのサブスクリプションと、Config内のルール設定も別のものです。前者は主に接続先の項目を管理し、後者はルールなどの動作を設定します。ノードをインポートしても、DOMAIN-SUFFIX、IP-CIDR、FINALなどのルールが自動で作成されるわけではありません。
ss://:認証情報を読み取り、ポートを確認する
Shadowsocksの共有リンクでよく使われるSIP002形式では、暗号化方式とパスワードを組み合わせてBase64でエンコードし、その後にサーバーアドレス、ポート、任意のパラメータを続けます。以下の例では、認証部分をデコードするとaes-128-gcm:passwordになります。8388は説明用のポート番号で、固定値ではありません。
ss://[email protected]:8388#Demo-SS
認証部分のデコード結果:
aes-128-gcm:password
対応する項目:
method = aes-128-gcm
password = password
server = example.com
port = 8388
@より前の認証データにはmethodとpasswordが含まれます。Base64文字列全体をパスワードとして入力しないでください。#Demo-SSは備考です。備考を変更しても、パスワード、ポート、暗号化方式の不一致は解消されません。- 古い形式のリンクには、
method:password@server:port全体をエンコードしたものもあります。また、URLセーフなBase64を使ったリンクや、末尾のパディングを省略したリンクもあります。見た目だけで文字を補わず、元のテキストをそのまま保ってください。 pluginパラメータがある場合は、アプリ内で該当するプラグインとオプションが利用できるかも確認してください。アドレスとパスワードだけを残すと、接続に必要な設定が失われることがあります。
Base64はエンコード方式であり、機密情報を保護する仕組みではありません。リンクを読める人は、通常その中の認証情報も復元できます。トラブル対処時はType、ポート、追加パラメータの有無を記録し、共有リンク全体を公開コメント欄やオンラインのデコードサイトに貼り付けないでください。
vmess://:一般的な形式はBase64エンコードされたJSON
VMessの共有リンクでは、vmess://の後にBase64エンコードされたJSONを置く形式がよく使われます。以下はデコード後の構造例で、そのままインポートできる完全な共有リンクではありません。JSONのフィールド名は一般的な共有形式のもので、編集画面に表示される項目名と完全には一致しない場合があります。
{
"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"
}
vは共有データの形式を示し、Shadowrocketのバージョンではありません。addとportは接続先アドレスとポート、idはUUID、aidはalterIdに対応します。例の値は0です。リンクを「正常に見せる」ために、これらの認証項目をむやみに変更しないでください。
| 項目 | 例 | 確認ポイント |
|---|---|---|
| 認証 | id、aid、scy | UUID、alterId、暗号化オプションをそれぞれ確認します。相互に置き換えることはできません |
| 通信方式 | net=ws、path=/demo | WebSocketのパスはサーバー側の設定と一致させます。大文字・小文字やスラッシュもそのまま保ってください |
| HTTPホスト情報 | host=example.com | 該当する通信方式で使うHostです。接続先アドレスと同じとは限りません |
| TLS | tls=tls、sni=example.com | TLSの有効・無効、Server Name、証明書の検証をそれぞれ確認します |
ポートが443であっても、TLSが有効とは限らず、通信方式がWebSocketとも限りません。例のnet、tls、ポートはそれぞれ独立した情報です。インポート後、ノードの編集画面で項目ごとに確認してください。
vless://とtrojan://:認証情報の位置は同じでも、意味は異なる
この2種類のリンクは、URI形式を使うことがよくあります。@より前が認証情報、その後がサーバーとポート、疑問符の後がパラメータ、ハッシュ記号の後が備考です。VLESSでは認証情報にUUIDを、Trojanではパスワードを使うのが一般的です。接頭辞を入れ替えただけで、一方のプロトコルを他方へ変換することはできません。
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のプロトコルパラメータであり、通信経路全体が必ず保護されないという意味ではありません。例では別途security=tlsが指定されています。type=wsとtype=tcpは通信方式の選択を示します。UUIDやパスワードが正しくても、これらを無視することはできません。path=%2Fdemoはパーセントエンコードされており、デコード後のパスは/demoです。コピー時はエンコードされた形式を保ち、手作業で何度もデコードしないでください。- Trojanのパスワードに
@や#などの予約文字が含まれる場合は、正しくエンコードする必要があります。たとえばパスワード内の@は%40にエンコードできます。エンコードしないとURIの区切り文字として誤認されることがあります。 - リンクによっては、セキュリティや通信方式に関する追加パラメータが含まれます。短くするために不明な項目を削除せず、利用中のサービスから取得した元のパラメータとアプリ内の選択肢を照らし合わせてください。
要点:インポート後は認証情報と通信方式を確認する
Homeで新しい項目の編集画面を開き、まずType、アドレス、ポート、UUIDまたはパスワードを確認します。次にTLS、Server Name、通信方式、パスを確認してください。保存できても、それは項目が作成されたことを示すだけで、サーバーが接続を受け付けたとは限りません。
Homeからインポート:元のテキストとサブスクリプションの関連付けを保つ
利用中のサービスの管理画面から元のテキストを取得し、説明文を含むメッセージ全体をコピーしないようにします。共有リンクに引用符、日本語の句読点、空白、チャットアプリが挿入した改行が混ざらないようにしてください。QRコードにサブスクリプションURLが格納されている場合も、通常のプロトコル項目としてではなく、サブスクリプションとして扱います。
- 入力の種類を確認します。プロトコルの接頭辞は単一の接続先を見分ける目安です。利用中のサブスクリプションは、提供元が案内した完全なURLを使ってください。
- 内容全体をコピーし、Homeに表示されるクリップボードからのインポート案内を使います。QRコードの場合は、Homeのスキャン機能で読み取ります。インポート前に、認識された項目の種類を確認してください。
- 手動で追加する場合は、Homeで
+をタップしてAdd Serverを開きます。単一ノードでは該当するTypeを選び、各項目を確認します。サブスクリプションではTypeにSubscribeを選び、URLに完全なアドレスを入力してください。 - 保存後、Homeに戻ります。単一ノードは編集画面でパラメータを確認します。サブスクリプションは該当するグループが作成され、項目数と名称が利用中のサービスの内容に合っているか確認してください。
- サブスクリプションを更新するには、そのグループの更新操作を使います。更新後は現在選択中の項目を再確認してください。元の項目が削除、改名、置換されている場合は特に注意が必要です。
入力の種類ごとの管理方法
利用中の単一ノード共有リンク
- インポート後、Typeと接続パラメータをすべて確認します。
- 提供元がパラメータを変更した場合は、元のリンクを再取得します。
- 置き換える前に古い項目を確認し、同名の項目と取り違えないようにします。
利用中のサブスクリプションURL
- TypeにSubscribeを選び、完全なURLを保存します。
- サブスクリプションを更新して、リモート側の項目変更を取得します。
- 提供元で認証情報を変更した後、サブスクリプションURLも変わっているか確認します。
同じサブスクリプションを何度も新規登録すると、同じ提供元のグループが複数できることがあります。管理するときは元のグループを更新し、更新のたびに新しいサブスクリプションとして登録しないでください。
サブスクリプションを更新できるかどうかは、URLの有効性、アクセス用の認証情報の期限、現在のネットワークからのアクセス可否、返された内容の解析可否にも左右されます。HTTPリクエストが成功しても、ログインページが返される場合があります。「URLを開ける」ことだけで判断せず、インポート結果を確認してください。
インポート後に接続できない場合:パラメータとGlobal Routingを切り分ける
Homeに項目が表示されているのにWebページを開けない場合は、まず選択中の項目と接続状態を確認し、次にGlobal Routingを確認してください。ノードリンクは接続パラメータを指定し、Global Routingは通信の処理方法を決めます。ルーティングの設定が適切でない状態でUUIDを何度も変更しても、元の問題の切り分けにはなりません。
Config
推奨現在選択している設定に従って通信を処理します。ルール設定済みで内容を確認できている場合は、宛先ごとに指定したポリシーを適用できます。
適した用途:ルール設定後の日常利用、特定の宛先に適用されるポリシーの確認
Proxy
アプリが処理する通信を現在のプロキシポリシーに渡します。一時的にルールによる振り分けの影響を減らしてテストできますが、サーバー側の認証情報やTLSパラメータは修正できません。
適した用途:現在の項目を一時的にテストし、ノード接続とルール選択の問題を切り分ける
Direct
直接接続し、現在のプロキシノードを経由しません。この状態で宛先にアクセスできても、インポートしたノードが接続できる証拠にはなりません。
適した用途:直接接続との比較を行い、現在のネットワークから宛先へ直接アクセスできるか確認する
トラブル対処では、一度に変更する条件を1つに絞ります。一時的にProxyを使うと同じ宛先にアクセスでき、Configではできない場合は、設定内のルール順序とポリシーを確認してください。どちらでも失敗する場合は、認証情報、TLS、通信方式、サービスの状態、ネットワークからの到達性を順に確認します。テスト後は必要な元の設定に戻してください。
リンクをインポートできないとき:症状から原因を確認
リンクをコピーしたのに、ノードとして認識されないのはなぜですか?
まず、内容がプロトコルの接頭辞から始まっているか、メッセージの見出し、引用符、改行が混ざっていないか確認します。元の完全なリンクをコピーし直してください。HTTPSのURLの場合は、サブスクリプションか通常のWebページかを確認し、利用中のサブスクリプションであればHome → + → Type → Subscribeから登録します。
vmess://の後にサーバーアドレスが見えません。リンクが壊れていますか?
必ずしもそうとは限りません。一般的なVMess共有形式ではJSON全体がBase64エンコードされるため、アドレスは直接表示されません。まずShadowrocketでインポートし、編集画面でアドレス、ポート、UUID、alterId、通信方式の項目を確認してください。エンコードされた文字列をアドレス欄に手入力しないでください。
サブスクリプションを更新しても、手動で追加した項目が変わらないのはなぜですか?
手動で追加した項目はサブスクリプションの項目ではないため、別のサブスクリプションを更新しても自動では置き換わりません。Homeに戻って所属グループを確認し、サブスクリプション内の該当項目を使ってください。手動の項目を残す場合は、提供元から新しいパラメータを取得して自分で確認します。
同じアドレスとポートなのに、別のリンクは使えるのはなぜですか?
Type、UUIDまたはパスワード、暗号化オプション、TLS、Server Name、Host、パスを引き続き比較してください。アドレスとポートが同じでも、接続先の入口が同じというだけで、認証情報や通信設定まで同じとは限りません。項目ごとに比較し、プロトコルの接頭辞をそのまま入れ替えないでください。
サブスクリプションURL全体を他の人に送って確認してもらえますか?
URL全体を公開しないでください。サブスクリプションURL内のtokenからサービス情報を取得できる場合があり、共有リンクにも認証データが含まれます。相談する場合は、機密情報を伏せた構造、Type、ポート、通信オプション、エラーの状況だけを伝えてください。認証情報が漏れた場合は、提供元の管理画面で再設定します。
リンクの判別、インポート、接続テストが済んだら、オンデマンド接続などの使い方を設定します。Settings → On Demandは必要に応じた接続に使う機能です。共有リンクの設定ミスを修正したり、期限切れの認証情報を更新したりする機能ではありません。