ご自身のサービス提供元からサブスクリプションURLを入手済みの方を対象に、まずHomeで手動更新して結果を確認し、その後、起動時の自動更新を設定します。失敗した場合は、ネットワーク、URL、応答内容、解析の順に確認してください。更新に成功しても、リスト内のすべてのノードへの接続が保証されるわけではありません。また、Configのルールが自動更新されるわけでもありません。
サブスクリプション更新で実際に変わるもの
Shadowrocketのサブスクリプション更新では、クライアントがサブスクリプションURLにアクセスし、認識できたノード情報を該当するサブスクリプショングループに反映します。アプリのアップデートや回線プランの更新ではありません。この記事では、ご自身でサービス提供元とサブスクリプションを用意していることを前提とします。サブスクリプションURLとノードはサービス提供元から入手してください。本サイトではノードやサブスクリプションの提供・販売・推奨は行っていません。
更新によって、ノード名、サーバーアドレス、ポート、認証情報などが変わったり、サービス提供元がサブスクリプションから削除した項目がなくなったりすることがあります。そのため、サブスクリプション内の手動変更を長期保存の手段として使うのは避けましょう。次回の更新でサーバー側の内容に上書きされる場合があります。特別なパラメータを残す必要がある場合は、元の値を控えたうえで、その項目が引き続きサブスクリプションの管理対象か確認してください。
サブスクリプションURLのポートと、ノードへの接続ポートは別のものです。たとえば、HTTPSでのサブスクリプション取得には既定の443番ポートが使われ、取得したノードには別のポートが設定されている場合があります。サブスクリプションをダウンロードできても、ノードのポートに到達できるとは限りません。ノードに接続できても、サブスクリプションサーバーにアクセスできるとは限りません。
Homeでサブスクリプションを手動更新する
以下では、iPhone / iPadの英語表示を例に説明します。Homeにサブスクリプショングループが登録されていることを確認してください。個別に追加したノードだけでは、サブスクリプショングループとは異なります。単独ノードのみでサブスクリプションURLがない場合、サービス提供元から新しいリストを取得することはできません。
-
サブスクリプションを確認する
Homeを開き、更新するサブスクリプショングループを探して、名前と登録済みのURLを確認します。複数のグループがある場合は、それぞれを見分け、別のサブスクリプションの更新結果と取り違えないようにしてください。
-
サブスクリプションを追加する
まだ追加していない場合は、Home右上の「+」→ Type → Subscribeを開き、サービス提供元から入手した完全なサブスクリプションURLをURL欄に貼り付けます。見分けやすい名前を入力して保存してください。
-
下に引いて更新する
Homeに戻り、リストの先頭から下に引いてサブスクリプションを更新します。リクエストが完了するまで待ってから次の操作をしてください。連続して下に引くと、リクエストが重なったり、サーバー側のアクセス頻度制限にかかったりするおそれがあります。
-
リストを確認する
対象のグループに、想定した新しい名前やパラメータが反映されているか確認します。失敗のメッセージが表示された場合は、画面に出た文言をそのまま記録してください。リストに変化がない場合は、まずサービス提供元にサーバー側の内容が変更されたか確認します。
-
接続を確認する
更新後の対象ノードを選択し、接続し直して、通常利用する目的のサイトにアクセスします。必要に応じて一度切断してから再接続し、既存の接続状況を更新後の結果と混同しないようにしてください。
サブスクリプションの例 https://example.com/sub?token=xxxx はURLの形式を説明するためのもので、実際に利用できるサブスクリプションではありません。実際のURLをコピーするときは、?以降のパラメータもすべて含めてください。引用符や空白、改行は加えないでください。URLに含まれるtokenは通常、アクセス認証情報です。公開スクリーンショットやチャット、オンラインの検査ツールに載せないでください。
起動時の自動更新を有効にする
アプリを開いたときに最新のリストを取得したい場合は、起動時の自動更新が便利です。英語表示の場合、一般的な設定手順は Settings → Subscribe → Update on Open です。プラットフォームによってレイアウトが異なる場合があるため、現在のクライアントに表示されるサブスクリプション設定を確認してください。このスイッチはConfigのルール編集画面にはありません。
- まず手動更新を一度成功させ、URLと現在のネットワークが利用できることを確認してから、Update on Openを有効にします。
- アプリを終了してから再度開き、サブスクリプションのリクエストが完了するか確認します。HomeとSettingsを切り替えただけでは、更新が実行されたとは判断できません。
- アプリを開いてもリストが変わらない場合は、もう一度手動更新して結果を確認し、「リクエストが実行されていない」のか「サーバー側のリストに変更がない」のかを切り分けます。
- 短時間にアプリを何度も開くと、リクエストの統合、ネットワーク待ち、サーバー側のアクセス頻度制限が発生する場合があります。アプリを前面に戻すたびに必ずダウンロードが完了するわけではありません。
Update on Openは、一定間隔で実行するバックグラウンドタスクではなく、アプリ終了中もサブスクリプションを取得し続ける機能でもありません。Settings → On Demandとは役割が異なります。On Demandは接続条件に応じてVPN接続を開始する機能で、サブスクリプションを定期ダウンロードするものではありません。リストの期限切れを解決するためにOn Demandを繰り返し変更しても、設定箇所が違う可能性があります。
まず手動更新を確認する
手動更新に成功していない場合は、まずリクエストが失敗する原因を解消してください。自動更新で変わるのは実行のタイミングだけです。無効なURL、認証エラー、到達できないサブスクリプションサーバーは解決できません。
更新に失敗したときは、エラーの種類から確認
更新失敗の原因がアカウントの期限切れとは限りません。ドメインの名前解決、TLS検証、ネットワークの切り替わり、応答内容の非互換なども原因になります。以下は、ネットワークリクエストで表示される可能性のある英語のエラーメッセージです。表示内容はシステムやプラットフォームによって異なるため、「更新できない」だけでなく、画面に出た文言をそのまま記録してください。
エラー:The request timed out.
原因:待ち時間内にリクエストが完了しませんでした。現在のネットワークや接続経路、サブスクリプションサーバーの応答遅延などが考えられます。
対処法:同じ端末でWi-Fiとモバイルデータ通信をそれぞれ試し、リクエストが完了するまで待ってから更新してください。一方のネットワークだけで失敗する場合は、まずそのネットワークのアクセス条件を確認します。
エラー:A server with the specified hostname could not be found.
原因:サブスクリプションURLのホスト名を名前解決できません。ドメインの入力ミスや失効、DNSの問い合わせ失敗などが考えられます。
対処法:URL全体を確認し、別のネットワークでも試してください。同じドメインを引き続き名前解決できない場合は、サービス提供元にサブスクリプションのドメインが変更されていないか確認します。
エラー:The Internet connection appears to be offline.
原因:システムがインターネットに接続できていないと判断したか、リクエスト中にネットワークが切り替わった可能性があります。
対処法:まずWi-Fiのログイン認証を完了し、通常のWebページを開けることを確認してから、Homeに戻って更新します。Shadowrocketのモバイルデータ通信がシステムで許可されているかも確認してください。
HTTPステータスコードが返された場合は、その意味に応じて対処します。401は認証に関係することが多く、403はサーバーがリクエストを拒否したことを示します。認証情報やアクセス制限が原因の場合があります。404はリクエスト先のパスが見つからないことを示し、429はリクエスト過多を示します。5xxは通常、サーバー側での調査が必要です。これらのステータスコードを一律にノードの接続不良と判断しないでください。
- 認証またはパスの問題:サービス提供元からURLを入手し直し、tokenがリセットされていないか、URLの有効期限が切れていないか、コピー時にクエリパラメータが欠けていないか確認してください。
- リクエスト過多:連続更新をやめ、応答にRetry-Afterが含まれている場合は、その指示に従って待ってから再試行してください。
- TLSまたは証明書のエラー:端末の日付と時刻、ネットワークの認証状態を確認してください。証明書検証を無効にしてエラーを回避しないでください。
- サーバーエラー:発生時刻、ネットワークの種類、ステータスコードを記録し、サービス提供元に連絡してください。既存のグループを何度も削除しないでください。
エラーは出ないのにノードが変わらない
エラーが表示されないからといって、有効なノード情報を取得できたとは限りません。URLによっては、ログインページや期限切れの案内、ネットワーク認証ページが返されても、HTTPステータスは200になることがあります。クライアントが必要とするのは解析可能なサブスクリプションデータであり、ページタイトルに「サブスクリプション」と書かれた一般のWebページではありません。ブラウザーでURLを開けても、リクエストが到達したかを確認する参考にしかならず、アプリで解析できる証明にはなりません。
- 取得元を確認:アカウント管理ページや決済ページではなく、クライアント用としてサービス提供元から案内されたサブスクリプションURLか確認してください。
- 内容の変更を確認:サービス提供元がリストを変更していなければ、更新後も名前や件数が変わらないのは自然なことです。件数だけを見て更新失敗と判断しないでください。
- グループを確認:直前に更新したサブスクリプショングループを表示しているか確認してください。同じ名前の手動登録ノードや、別の古いサブスクリプションではないことも確認します。
- 形式を確認:返される形式がShadowrocketに対応しているか、サービス提供元に確認してください。解析に失敗した場合はエラーメッセージを記録し、内容が不明なままConfigに上書きしないでください。
Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuardでは、必要なパラメータが異なります。サブスクリプションに含まれるプロトコルは一部のみの場合があり、プロトコル名が同じでも必要な情報が揃っているとは限りません。解析に成功しても接続できない場合は、サーバーアドレス、ポート、認証情報、TLS利用時のサーバー名などを確認してください。サブスクリプションリストにノードが表示されたかだけでは判断できません。
リストの更新と接続は分けて確認
まず対象のグループに想定どおりの内容が取得されていることを確認し、その後、選択したノードで実際に接続できるかテストします。リストが正しく更新されているのに接続できない場合は、接続の問題を調べてください。同じサブスクリプションを繰り返し追加する必要はありません。
更新後にルールとアクセス経路を確認する
サブスクリプションの更新とルール設定は、別々に確認してください。Homeのノードが変わっても、Config内のDOMAIN-SUFFIX、GEOIP、IP-CIDR、FINALルールが同時に更新されるわけではありません。サービス提供元が設定ファイルを明示的に提供し、所定の方法でインポートした場合に限り、設定内容を別途確認してください。
Global RoutingのProxy、Direct、Config、Sceneも、サブスクリプションの更新方式ではありません。ProxyとDirectは異なるトラフィック処理モード、Configは選択中の設定に応じた処理、Sceneはシーンに応じた設定です。トラブルの確認時は現在の選択内容を記録してください。ノードの更新に成功したからといって、すべてのリクエストがそのノードを経由するとは限りません。
- 更新前後のネットワーク、接続状態、Global Routingの選択内容を記録し、一度に変更する条件は1つにします。
- 現在のネットワークからサブスクリプションサーバーにアクセスできず、既存の接続経由ならアクセスできる場合は、その接続を使って再確認できます。すべてのサブスクリプションで、更新前に接続が必要だと決めつけないでください。
- 接続を有効にしてから更新に失敗する場合は、選択中のノードと設定を記録し、アクセス経路の問題がないか確認します。サブスクリプション更新のために、すべてのトラフィックの処理方法を長期的に変更しないでください。
- 更新後にノード名が変わった場合は、設定内のポリシー参照と現在の選択が想定どおりか確認してから、実際の接続先サイトで動作を確認してください。
さらに詳しく調べるにはトラブルシューティングガイドをご覧ください。Global Routingとルールの関係についてはプロキシモードの説明をご覧ください。問い合わせの際は、エラーの原文、発生時刻、ネットワークの種類、接続を有効にしていたか、手動更新と自動更新の結果をお知らせください。サブスクリプションURL全体、token、ノードの認証情報は伏せてください。既存の利用可能な設定を残しておくほうが、すべて削除するより原因を特定しやすくなります。