単一サーバーの共有リンクには、通常、接続パラメータが直接含まれます。一方、サブスクリプションURLは、インターネット経由で取得するコンテンツを指すのが一般的です。利用中のサービス事業者から設定情報を受け取っている方向けに、まず接頭辞で入力の種類を見分け、アドレス、認証情報、通信方式、TLSを確認してから、Shadowrocketで適切な読み込み方法を選ぶ手順を説明します。例は形式の説明用であり、接続には使用できません。
1. 単一サーバーのリンク・サブスクリプションURL・設定ファイルの違い
ss://、vmess://、vless://、trojan://は共有形式のscheme、つまりコロンより前にある種類を示す文字列です。続く文字列の解釈方法をクライアントに伝えるもので、WebページのURLとは異なり、通信方式の詳細すべてを定めるものでもありません。Shadowrocketに読み込むと、これらの文字列は編集可能な接続項目に変換されます。
サブスクリプションURLは通常、https://で始まります。たとえば、https://example.com/sub?token=xxxxのような形式です。通常、URL自体にサーバーの接続パラメータが含まれているわけではなく、コンテンツを取得するためのアドレスです。サーバーから返される内容には複数の共有リンクが含まれる場合や、全体がBase64でエンコードされている場合があります。URLの末尾だけでは、返される形式を特定できません。
| 入力の種類 | 主な内容 | 更新方法 |
|---|---|---|
| 単一サーバーの共有リンク | アドレス、認証情報、接続パラメータ一式 | 新しいリンクを再読み込みするか、該当項目を手動で変更 |
| サブスクリプションURL | サービス側で管理されているリストを取得するURL | 元のURLに再度アクセスしてサブスクリプションの一覧を更新 |
| 設定ファイル | General、Rule、DNS、ポリシー関連の設定を含む場合がある | ローカルファイルを再読み込みするか、リモート設定を更新 |
HTTPSのURLは、サブスクリプションではなくWebページやリモート設定を指している場合もあります。まず、利用中のサービス事業者が案内する用途を確認してください。ノードのサブスクリプションを更新しても、ルーティングルールが自動で設定されるわけではありません。また、リモート設定の読み込みは、接続先を1つ追加する操作とは異なります。
見分け方:内容の用途を確認してから読み込み先を選ぶ
HTTPSのURLを受け取ったら、ノード一覧が返るのか、設定全体が返るのかをまず確認します。4種類の共有schemeの場合は、単一サーバーのリンクとして解析します。ブラウザで開けるという理由だけで、サブスクリプションとして使えると判断しないでください。
2. ss://:Shadowsocksの認証情報とサーバーアドレス
一般的なSIP002形式のリンクでは、認証情報とサーバーの場所が分かれています。認証部分は通常、method:passwordをBase64またはURL-safe Base64で表したもので、その後に@host:portが続きます。次の例では、エンコード部分をデコードするとaes-128-gcm:testになります。ここでのパスワードは説明用です。
ss://[email protected]:8388#Demo
aes-128-gcm:暗号化方式。サーバー側の設定と一致させます。サーバー名ではありません。test:説明用のパスワードです。実際のパスワードに特殊文字が含まれる場合は、共有形式のルールに従って正しくエンコードする必要があります。example.comと8388:サーバーアドレスとポートです。8388は例であり、固定値ではありません。#Demo:メモ部分です。通常、一覧表示に使われ、認証には使用されません。
method:password@host:port全体をエンコードした旧形式の共有リンクが使われることもあります。@がそのまま見えるかどうかは異なりますが、それだけで一方が無効とは判断できません。リンクによってはpluginクエリパラメータも含まれます。これらのパラメータは、該当する拡張機能が実際にサポートされ、正しく設定されている場合にのみ意味があります。
3. vmess://:JSONをデコードしてフィールドを確認
一般的なVMess共有形式は、vmess://の後にBase64エンコードされたJSONが続きます。アドレス、ポート、UUID、通信方式、TLSの情報はこのオブジェクトに含まれるため、通常のURLのように@を区切りとして探すことはできません。以下はデコード後の構造例であり、そのまま読み込める完全な共有リンクではありません。
{
"v": "2",
"ps": "Demo",
"add": "example.com",
"port": "443",
"id": "00000000-0000-4000-8000-000000000000",
"aid": "0",
"scy": "auto",
"net": "ws",
"type": "none",
"host": "example.com",
"path": "/demo",
"tls": "tls",
"sni": "example.com"
}
add、port、idはそれぞれ接続先アドレス、ポート、UUIDを表します。psはメモです。netがwsの場合、pathとhostは通常、WebSocketのパスとHTTP Hostに対応します。サーバー側の設定と一致させる必要があります。tlsとsniはTLS設定を表します。ポートが443だからといって、TLSが有効とは限りません。vは共有JSONの形式を示すフィールドで、Shadowrocketのアプリバージョンではありません。aidをパフォーマンス調整用の項目として扱わないでください。
生成元によっては、任意項目が省略されていたり、ポートが文字列として保存されていたりします。デコード結果が完全なJSONにならない場合は、リンク全体をコピーできているか、特に末尾がメッセージアプリで切れていないか確認してください。JSON全体をサーバーアドレスとして入力しないでください。
4. vless://とtrojan://:URLの形式は似ていても認証情報は異なる
この2種類の共有リンクは、「認証情報、アドレス、クエリパラメータ、メモ」というURL形式を使うことがよくあります。見た目は似ていますが、@より前の内容は互換性がありません。VLESSでは通常UUIDを、Trojanでは通常パスワードを指定します。以下のアドレス、認証情報、パスは説明用です。
vless://[email protected]:443?encryption=none&security=tls&type=ws&host=example.com&path=%2Fdemo&sni=example.com#Demo
trojan://[email protected]:443?security=tls&type=tcp&sni=example.com#Demo
| フィールド | VLESSの例での意味 | Trojanの例での意味 |
|---|---|---|
@より前の内容 | UUID。ユーザー認証に使用 | Password。ユーザー認証に使用 |
security=tls | TLSセキュリティレイヤーを指定 | この例で使用するTLS設定を表す |
type | 例ではws | 例ではtcp |
sni | TLSハンドシェイクで使用するサーバー名 | TLSハンドシェイクで使用するサーバー名 |
host / path | この例ではWebSocket用 | このTCPの例ではこれらのパラメータは不要 |
VLESSのencryption=noneは、プロトコル層における設定を示します。URL内のTLSが自動的に無効になるという意味ではありません。TLSを使うかどうかは、セキュリティレイヤーのパラメータと実際の読み込み結果で確認してください。TrojanではTLSを使うのが一般的です。トラブルシューティングでは、ポートに接続できるかだけでなく、Password、SNI、証明書のドメイン名もあわせて確認します。
クエリパラメータはパーセントエンコードされます。たとえば%2Fdemoは/demoにデコードされます。パスワードに@、#、?が含まれる場合、リンク生成時に該当箇所のルールに従ってエンコードしないと、パーサーが認証部分を途中で終わりと判断することがあります。IPv6アドレスをURLのホスト部分に指定する際は、通常、[2001:db8::1]:443のように角括弧で囲みます。
- Addressは実際の接続先であり、SNIと同じとは限りません。
- HTTP Hostはアプリケーション層のリクエスト情報であり、TLSのSNIとは異なります。
- パラメータ名や拡張形式は共有規格によって異なる場合があります。接頭辞を認識できても、拡張フィールドがすべて保持されるとは限りません。
5. Shadowrocketでの読み込みと更新方法
以下の手順は、利用者自身がサービス事業者の接続パラメータまたはサブスクリプションをすでに持っていることを前提としています。Shadowrocketは買い切りのクローズドソース商用アプリで、App Storeから入手できます。アプリの購入と接続サービスの契約は別です。本サイトではノードやサブスクリプションの提供・販売・推奨は行っていません。
単一サーバーの共有リンク
- リンク全体をコピーし、説明文、引用符、コードフェンスを一緒にコピーしないでください。QRコードは文字列を別の形で記録したものです。中身が何かを先に確認しましょう。
- Homeを開き、利用できるクリップボードからの読み込み案内またはQRコード読み取りを使います。案内が表示されない場合は、右上の
+からAdd Serverを開き、正しいTypeを選んで、手元のパラメータを入力してください。 - 保存前にAddress、Port、認証情報、TLS、SNI、通信方式を確認してください。単一サーバーのリンクに含まれるメモをPasswordやAddressに入力しないでください。
- Homeに戻り、追加した接続情報が表示されていることを確認してから選択し、テストします。保存できたことは、クライアントが項目を受け付けたことを示すだけで、サーバー認証の成功を意味するわけではありません。
サブスクリプションURLとリモート設定
- ノードのサブスクリプションを追加するには、通常、Home →
+→ Add Serverの順に開き、TypeをSubscribeに設定します。完全なURLをURL欄に入力して保存してください。表示される項目は、アプリの現在の画面に従ってください。 - 読み込み後、該当するサブスクリプショングループに想定した接続情報が表示されるか確認してください。リストを更新するには、同じURLのサブスクリプションを重複して作らず、元のグループを更新します。
- ルールを含むリモート設定のURLを受け取った場合は、設定の用途に応じてConfigから追加し、読み込んでください。設定全体のURLを単一サーバーのAddressとして入力しないでください。
サブスクリプションを更新すると、サーバーからリストが再取得されます。サブスクリプション内の接続情報を手動で変更していても、更新後に置き換わる場合があります。変更を残したい場合は、必要な項目を記録してから、独立した接続情報として保存するか判断してください。ローカルでの変更がサーバーに同期されるとは限りません。サブスクリプションURL内のtokenも認証情報として扱ってください。
6. 読み込みエラーは解析・接続・ルールの順に切り分ける
まず「接続情報として解析されたか」、次に「接続を確立できるか」、最後に「リクエストが実際にどのルールで処理されるか」を確認します。この順で調べれば、Base64の文字列の問題をネットワーク障害と誤認したり、ルールでプロキシが選ばれていないのにパスワードを何度も変更したりするのを避けられます。
vmess://をコピーしたのに接続情報が追加されないのはなぜですか?
接頭辞と末尾が欠けていないか確認し、コピー時に付いた改行や句読点を削除してください。内容を確認する場合は、信頼できるローカル環境でBase64をデコードし、完全なJSONになっているか、特にadd、port、idを確認します。実際に使うリンクを公開デコードサイトに送信しないでください。
vless://を読み込めたのにPathが正しく表示されない場合は?
追加した接続情報の編集画面を開き、通信方式がwsになっているか確認してから、PathとHostを確認します。URL内の%2Fは解析後にスラッシュになります。項目が誤って表示される、または欠落している場合は、利用中のサービス事業者から受け取ったパラメータに合わせて修正し、TLSとSNIも確認してください。
サブスクリプション更新後に、手動で変更した名前やパラメータが変わるのはなぜですか?
サブスクリプションを更新すると、サーバー側のリストが再読み込みされるため、ローカルでの変更が維持されない場合があります。まず元のサブスクリプショングループを更新していることを確認し、サーバー側の現在のパラメータと照合してください。ローカルで変更した内容を残す必要がある場合は、更新で置き換わる項目を変更し続けるのではなく、別の接続情報として保存します。
接続先を選択しているのに、Webサイトの通信がそこを経由しないのはなぜですか?
HomeでGlobal Routingを確認してください。Directでは選択中のプロキシを経由しません。Configは現在の設定ルールに従い、Proxyはプロキシ経由のルーティングに使用します。Sceneではシーンごとの設定に従って動作します。まず現在のルーティングモードを確認し、次に接続スイッチと該当するルールを確認してください。
Global RoutingでConfigを使う場合、ルールの順序も結果に影響します。たとえば、DOMAIN-SUFFIX,example.com,DIRECTに一致するドメインはDIRECTで処理されます。後続のFINAL,PROXYは、それ以前のルールに一致しなかったリクエストだけを処理します。新しい共有リンクを読み込んでも、既存のDOMAIN-SUFFIX、GEOIP、IP-CIDRルールが自動的に上書きされるわけではありません。
- 接続情報が追加されない:文字列全体がコピーされているか、scheme、エンコード、読み込み形式を確認してください。
- 接続情報はあるが接続できない:Address、Port、PasswordまたはUUID、通信方式、TLS、SNIを確認し、利用中のサービスが稼働しているかも確認してください。
- 接続できるがルーティングが想定と異なる:Global RoutingとConfigで実際に有効なルールを確認してください。先に認証情報を変更しないでください。
- 問題を報告する場合:エラーの内容とフィールド名を記録し、パスワード、UUID、サブスクリプションtokenを隠してください。原因の特定に必要な情報だけを共有します。