Shadowrocketのサブスクリプション更新失敗・ノードが空のときの確認方法

サブスクリプションを解析できない、またはノード一覧が空の場合に、URLの形式、プロバイダ側の状態、更新するタイミング、ネットワーク環境を順に確認し、対処方法を説明します。

この記事の要点

この記事は、利用中のプロバイダからサブスクリプションを取得済みなのに、Shadowrocketで更新できない、またはノードが表示されない場合を対象としています。まず、リクエストの失敗、レスポンスを解析できない状態、一覧の表示上の問題を切り分け、URL、アカウントの状態、更新経路を順に確認します。まだ使える項目は残し、一度に変更する条件は一つだけにして、更新結果と接続テストを別々に行い、復旧を確認してください。

1. 更新失敗・解析失敗・一覧が空の状態を切り分ける

Shadowrocketのサブスクリプション更新は、接続テストとは別の処理です。アプリがまずサブスクリプションURLにアクセスしてレスポンスを受け取り、その中から対応するサーバー情報を解析してHomeに表示します。どこかの段階で処理が止まると「新しいノードがない」ように見えますが、確認すべき箇所はそれぞれ異なります。

URLを読み取る サブスクリプションをリクエスト レスポンスを受信 情報を解析 一覧に表示

まずHomeに戻り、該当するサブスクリプションのグループを展開して、検索条件をクリアします。グループが閉じている、またはフィルターで隠れているだけではないか確認してください。Configは主に構成ファイルを管理する画面です。Config内のリモート設定を更新しても、Homeのサーバーサブスクリプションが更新されたことにはなりません。Settingsでは更新動作などの設定を確認できます。

確認できる状況まず確認する項目すぐに行わないこと
更新を待った後、タイムアウトが表示される現在のネットワーク、ドメイン名の解決、サブスクリプションのリクエスト経路サーバーのポートやパスワードを何度も変更する
すぐに失敗し、HTTPステータスコードが表示されるURLのアクセス権、プロバイダのアカウント、APIの制限更新を連続して実行する
リクエストは完了したが、利用できる情報がないレスポンスの内容、サブスクリプションの形式、表示中のグループまだ接続できる古い情報を先に削除する
ノードはあるが接続できないサーバーのパラメータと実際の接続状況接続の問題を解析の問題と決めつける

2. サブスクリプションURLを確認し、Webページとの取り違えを防ぐ

サブスクリプションURLは利用中のプロバイダから取得してください。アカウントのログインページ、プランの説明ページ、個別サーバーの共有リンク、サブスクリプションURLはそれぞれ別のものです。ブラウザーでURLを開けても、ログインフォームや認証ページが返されることがあります。そのため、URLを開けるだけではサブスクリプションとして解析できるとは限りません。

  1. プロバイダのアカウントページからShadowrocket用のサブスクリプションURLをコピーし直してください。チャットのスクリーンショットや、改行されたテキストを見ながら手作業でつなぎ合わせるのは避けます。
  2. 先頭の https://、パス全体、クエリパラメータを確認します。URLの前後にある空白、引用符、改行を取り除き、URL内部の文字は変更しないでください。
  3. ?、&、=と元のパーセントエンコードを保持します。クエリパラメータ全体を削除したり、独自に二重エンコードしたりしないでください。
  4. Homeにある該当のサブスクリプション情報を編集し、URLを確認してから、そのサブスクリプションの更新を実行します。同じ名前のグループを複数インポートして結果を見誤らないようにしてください。

以下は「パスとクエリパラメータ」の構造を示すための例であり、接続には使えないダミー値です。実際のURLでは異なるパラメータ名が使われる場合があります。例にある token が、すべてのプロバイダで必須の項目だとは限りません。

https://example.com/sub?token=xxxx

3. レスポンスをもとにプロバイダ側の状態を確認する

URLが正しくても、プロバイダから有効な情報が返されるとは限りません。アカウントの期限切れ、利用枠の超過、認証情報の失効、APIのメンテナンス、短時間での過剰なリクエストなどがレスポンスに影響することがあります。まずプロバイダのアカウントにログインして状態を確認してから、アプリの設定を変更する必要があるか判断してください。

以下の英語表記は標準的なHTTPレスポンスのステータステキストです。Shadowrocketにそのまま表示されるとは限らず、ステータスコードや短いエラーメッセージだけが表示される場合もあります。実際に該当するステータスが確認できた場合のみ、その項目に沿って対処してください。「一覧が空」というだけで特定のエラーが発生したと判断することはできません。

HTTP 401 Unauthorized

原因:認証に失敗しています。サブスクリプションの認証情報が無効になっているか、必要な権限が不足している可能性があります。

対処:プロバイダのアカウントから有効なサブスクリプションURLを取得し、古いURLを完全に置き換えてから更新します。

HTTP 403 Forbidden

原因:サーバーがリクエストを拒否しています。アカウントの権限、アクセス方針、認証によるブロックなどが考えられます。

対処:アカウントの状態を確認し、現在のリクエストがサブスクリプションAPIで許可されているかプロバイダに問い合わせてください。制限を解除しようとして何度も更新するのは避けます。

HTTP 429 Too Many Requests

原因:リクエスト頻度がAPIの許容範囲を超えています。

対処:更新を連続して実行せず、プロバイダが指定する間隔を空けて再試行してください。レスポンスにRetry-Afterが含まれている場合は、その待機時間に従います。

レスポンスが 200 OK でも、本文がHTMLのエラーページ、空の内容、またはアプリで認識できない形式の場合があります。URLにアクセスできることだけでなく、Shadowrocketに対応するサブスクリプション内容が返されているか、プロバイダに確認してください。サーバーの認証情報が含まれていることがあるため、レスポンス全体を公開しないでください。

ポイント:レスポンスの内容を確認してから接続設定を変更する

プロバイダからログインページや空の情報が返されていると確認できた場合は、まずアカウントとサブスクリプションURLを修正します。Global Routingを切り替えても、このようなレスポンスが有効なサーバー一覧に変わることはありません。

4. 一度に一つずつネットワークと更新経路を確認する

サブスクリプションのリクエストが完了するかどうかと、登録済みノードに接続できるかどうかは、別々に確認する必要があります。現在のネットワークからサブスクリプションのドメインにアクセスできず、古いノードはまだ使える場合は、Settings → Subscribe → Update via Proxyを確認し、利用可能なプロキシ経由で更新を試せます。この設定を有効にしても、無効な認証情報は修復されず、接続手段が新たに用意されるわけでもありません。

443
HTTPSでポートを明示しない場合に使われるデフォルトポート
2項目
直接リクエストと、利用可能なプロキシ経由のリクエストをそれぞれ確認する
1項目
毎回変更する設定またはネットワーク条件は一つだけ
  1. 現在のWi-Fiまたはモバイル通信、接続のオン・オフ状態、Update via Proxyの有効・無効を記録し、元に戻せるようにします。
  2. サブスクリプションURLへのアクセスが許可された信頼できるネットワークで、まずプロキシを使わずに更新を試します。Wi-Fiとモバイル通信を切り替える場合は、アプリに必要なネットワークアクセス権限があることを確認してください。
  3. 利用可能な古いノードが残っている場合に限り、プロキシ経由の更新を試します。まず古いノードで正常にネットワークへアクセスできることを確認し、Update via Proxyを有効にしてからHomeに戻り、該当のサブスクリプションを更新してください。
  4. 今回の完了時刻、表示されたメッセージ、ノード数の変化を記録します。改善しなければ、その設定を元に戻してから次の項目を確認してください。DNS、ノード、サブスクリプションURLを同時に変更しないでください。

Global RoutingのProxy、Direct、Config、Sceneは、ルーティング方法を選ぶための項目であり、サブスクリプション形式の設定ではありません。確認時にはGlobal Routingの項目名だけで判断せず、Update via Proxyも別途確認してください。プロキシ経由で更新する必要があるのに利用できるノードがない場合は、まずプロバイダに、直接アクセスできるサブスクリプションURLがあるか確認します。

接続を切ると自動的に再接続する場合は、Settings → On Demandで条件に応じた接続が設定されているか確認してください。元の設定を記録してから比較テストを行い、終了後に必要な設定へ戻します。この自動接続を見落とすと、同じように見える2回の更新でも、実際には異なるネットワーク経路を使っていることがあります。

5. 更新が完了しても一覧が空の場合は、内容とインポート先を確認する

ノード一覧が空でも、ネットワーク障害とは限りません。サーバー一覧のサブスクリプションと、ルールを含むリモート設定ファイルは用途が異なります。取得したものが構成ファイルのURLであれば、Configで構成ファイルとして管理してください。HTTPSを使っているというだけで、Homeに必要なサーバーサブスクリプションだと判断しないでください。

Shadowsocks、VMess、VLESS、Trojan、Hysteria2、WireGuardは接続プロトコルの名称であり、相互に置き換えられるサブスクリプション形式ではありません。一覧を表示させるために、サーバーのTypeを別のプロトコルへむやみに変更しないでください。サーバー側の設定とクライアントのパラメータを一致させる必要があります。

ポイント:一覧の復旧と接続の復旧は別々に確認する

まずHomeに有効な情報が表示されていることを確認し、その後ノードを選んで接続をテストします。情報がすでにあるのにアクセスできない場合は、サブスクリプションの確認結果を残し、該当ノードのパラメータとルーティングを調べてください。正常なサブスクリプションURLを繰り返し置き換える必要はありません。

6. 更新するタイミングとよくある質問

プロバイダからURLの変更が通知されたとき、アカウントの状態が復旧したとき、またはサーバー一覧の変更が確認されたときに更新してください。失敗しても、画面を何度も引っ張って更新しないでください。まず結果を一度記録して、該当する項目を確認します。リクエスト頻度の制限が元の問題に重なるのを防げます。サブスクリプションの更新では、App Storeでの購入やプロバイダのプラン更新は行われません。

古いノードは使えるのに、サブスクリプションを更新できないのはなぜですか?

古いノードは保存済みの接続パラメータを使い、サブスクリプションの更新では専用のAPIにアクセスします。古い情報は残したまま、まずAPIのURLとアカウント権限を確認してください。プロキシを使わないリクエストだけがタイムアウトする場合は、利用できることを確認済みの古いノードでUpdate via Proxyを試します。

ブラウザーではURLを開けるのに、アプリで解析に失敗するのはなぜですか?

ブラウザーにはログイン状態が引き継がれていたり、認証ページだけが表示されていたりする場合があります。ページを操作しなくても対応するサブスクリプション情報が返されるURLか、プロバイダに確認してください。ブラウザーで開けたことを、形式が正しい証拠とみなさないでください。

モバイル通信に切り替えると更新できる場合、どこを確認すればよいですか?

まず更新できた結果を残し、元のWi-Fiに戻ってWeb認証が必要か、アクセス制限やドメイン名の解決に問題がないか確認します。一度に試す条件は一つだけにしてください。HTTPSのエラーを回避するために証明書の検証を無効にしないでください。

プロバイダに問い合わせるとき、何を伝えればよいですか?

発生時刻とタイムゾーン、Wi-Fiまたはモバイル通信の別、プロキシ経由で更新したかどうか、実際に表示されたエラーメッセージ、古いノードがまだ使えるかどうかを伝えてください。スクリーンショットを共有する場合は、サブスクリプションURL全体、token、パスワード、サーバーの認証情報を隠します。

最後に次の3点を確認します。該当グループに情報があること、手動更新が完了すること、選択したノードから目的のサービスに正常にアクセスできることです。最初の2点が正常で、3点目だけ失敗する場合は、使い方を参照して接続とGlobal Routingを確認してください。特定のWebサイトを開けないだけで、サブスクリプション全体が無効だと判断しないでください。

App Storeで正規アプリを確認