Shadowrocketの単体ノード共有リンクには接続パラメータが含まれ、サブスクリプションURLは取得対象の設定情報を指します。自分の接続設定をすでに持っている方向けに、接頭辞、エンコード、フィールド、追加方法を順に確認します。読み終えると、「リンクから追加」「Type → Subscribe」「Add Serverで手動入力」のどれを使うか判断でき、追加に成功しても接続できるとは限らない理由も分かります。以下のアドレス、パスワード、UUID、ポートの組み合わせはすべて説明用の架空の値で、実際の接続には使用できません。
まず接頭辞を確認し、アドレスの用途を見極める
リンク先頭のschemeによって解析方法が決まります。ss://はShadowsocksのパラメータ、vmess://はVMessのパラメータ、vless://はVLESSのパラメータ、trojan://はTrojanのパラメータを示します。通常、それぞれのリンクが示すのは1つのサーバー項目です。複数のリンクを改行して並べても、自動更新できるサブスクリプションURLにはなりません。
https://で始まるアドレスは、HTTPSでコンテンツを取得することを示すだけで、接頭辞だけでサブスクリプションと判断することはできません。Webページ、アカウント管理ページ、サブスクリプションのエンドポイントはいずれもHTTPSを使用できます。設定の提供元がサブスクリプションとして明示し、応答内容をクライアントが認識できる場合に限り、Subscribeに入力してください。
| 形式 | 主に含まれる情報 | 最初に確認する項目 |
|---|---|---|
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では見た目が異なることがあり、末尾の=が省略される場合もあります。こうした見た目の違いだけで、パラメータが無効だと判断しないでください。
- method:サーバー側の設定と一致させる必要があります。表示名を変更しても認証には影響しませんが、暗号化方式をむやみに変更すると接続できなくなることがあります。
- password:アプリの購入情報ではなく、このサーバー設定の認証パラメータです。リンクを通じて公開しないでください。
- plugin:リンクによっては、クエリパラメータに追加の転送設定が含まれます。追加後に正しく認識されているか確認し、アドレスとポートだけを見て判断しないでください。
- 名前:
#以降は通常、メモとして使われます。空白や日本語はパーセントエンコードされることがありますが、サーバーの認証には使われません。
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だけ入力すればよいわけではありません。
aid: "0"は、VMess AEAD設定でよく使われる表記です。既存の設定を基準とし、「互換性のため」に任意で0以外の値を入力しないでください。scyはVMessのデータ暗号化設定に関係する項目で、外側のTLSとは別の階層です。v: "2"はこの共有JSON形式のバージョンを示すもので、Shadowrocketのバージョン番号ではありません。- この形式のJSONにある
typeは、VLESS URIのクエリパラメータと同じ意味だと決めつけられません。共有形式とnetを合わせて確認してください。
デコード結果が想定した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=tls | TLSを使用する設定です。関連パラメータも確認してください | ポートが443でも、TLSが正しく設定されているとは限りません |
type=ws | WebSocket転送を使用します。hostとpathを確認してください | wsをtcpに変更して、元のパスワードだけ残すことはできません |
sni | TLSハンドシェイクで使うサーバー名 | 接続先アドレスや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コードやクリップボードはテキストを読み取る手段であり、最終的にどの種類の項目が作成されるかはテキストの内容で決まります。
-
元のテキストを確認
先頭がss://、vmess://、vless://、trojan://のいずれかか、用途が明示されたHTTPSサブスクリプションURLか確認します。メッセージアプリが付けた引用符や説明文は取り除きますが、リンク内のパラメータは削除しないでください。
-
サブスクリプションを追加
サブスクリプションURLは、Home → 右上の「+」→ Add Server → Type → Subscribeの順に進み、URL欄に自分の完全なアドレスを入力します。保存後、そのサブスクリプションを更新してください。通常のサーバー設定のAddress欄に、HTTPS URL全体を入力しないでください。
-
単体リンクを追加
単体ノードのリンクは全体をコピーしてShadowrocketに戻り、認識時の案内に従って追加します。ペーストの許可を求められた場合は、必要に応じて許可してください。QRコードはHome上部のスキャン機能で読み取り、認識結果を確認してから保存します。確認前の項目をそのまま上書きしないでください。
-
パラメータを確認
追加した項目の編集画面を開き、Type、Address、Portと、対応するUUIDまたはPasswordを確認します。続けてTLSと転送パラメータも照合してください。自動認識できない場合は、Home →「+」→ Add Serverから該当するTypeを選び、手元のパラメータを入力します。
-
接続を確認
Homeに戻り、接続先のサーバーを選んで接続します。初回にVPN構成の追加を求められた場合は、システムの案内に従って許可してください。Connectivity Testも参考にしながら、Global Routingの現在の選択がテスト目的に合っているか確認します。
リンク全体をコピーしても追加の案内が表示されない場合は、まずクリップボードの読み取りが許可されているか、テキストが改行、空白、リッチテキストの句読点で途切れていないか確認してください。同じ内容を何度もSubscribeに追加しないでください。解析できる単体ノードのURIであっても、自動更新できるサブスクリプションエンドポイントになるわけではありません。
追加エラー・更新結果が空・接続エラーを個別に確認
この3種類の問題はそれぞれ異なる段階で発生します。追加エラーはテキストを正しく解析できていない状態、更新結果が空の場合はサブスクリプションの取得または解析で想定した項目を得られていない状態、接続エラーはサーバー項目を追加した後に発生する問題です。段階ごとに確認すれば、誤った箇所の設定を何度も変更せずに済みます。
- リンクを認識できない:schemeが完全か、全角コロンや前後の引用符、メッセージの説明文が混ざっていないか確認します。Base64の内容に自分で改行を加えたり、URI内のプラス記号を空白に置き換えたりしないでください。
- サブスクリプションを更新しても項目が表示されない:URLのパスとすべてのパラメータを確認し、アカウントページのURLを貼り付けていないか確かめてください。HTTP 401または403が表示される場合は、サブスクリプションの認証情報やアクセス権を確認します。Password欄の入力ミスとは限りません。
- 項目はあるがタイムアウトする:Address、Port、現在のネットワークからの到達性、サービスの状態を確認してください。例にある443や8388は、自由に置き換えて使える万能の修正値ではありません。
- TLSエラー:デバイスの日時、SNI、証明書、サーバー設定を確認してください。証明書検証を無効にすることを通常の対処方法にしないでください。
- テスト結果とアクセス結果が異なる:Connectivity Testの結果が示すのは、そのテスト条件での状態に限られ、すべての宛先へのアクセスを保証するものではありません。実際の宛先リクエストに適用されるルーティングとポリシーも確認してください。
- 切断後に再接続する:Settings → On Demandに既存の設定があるか確認します。オンデマンド接続は接続開始の条件に影響しますが、共有形式、パスワード、サブスクリプションtokenの誤りは修正しません。
Global RoutingのProxy、Direct、Config、Sceneは、トラフィックの経路を決めるものであり、誤ったリンクを正しいパラメータに直す機能ではありません。特にDirectでは、宛先にアクセスできても、追加したサーバーが使える証明にはなりません。ConfigではリクエストがDIRECTルールに一致する場合があります。サーバーを確認するには、ブラウザーでページを開けるかだけでなく、選択中の項目と現在のルーティング方式も確認してください。
要点:元のテキストを残し、変更は一度に1項目だけ
「テキストの認識 → 内容の取得 → フィールドの照合 → 接続の確認」の順に確認します。具体的なエラーと変更内容を記録し、まず手元にある設定の元のパラメータに戻してから、問題を1つずつ切り分けてください。プロトコル、ポート、TLS設定を同時に変更すると、どの変更が結果に影響したのか判断できません。