この記事のポイント

登録済みのサブスクリプションを更新できない場合は、現在のサーバー一覧を残したまま、URL、アカウントの状態、ネットワークのリクエスト、応答内容を確認し、最後に一度だけ更新して結果を記録します。プロバイダーから取得したサブスクリプションを利用している方向けに、「リクエストが完了しない」「応答がサブスクリプション形式ではない」「一覧に利用可能な項目がない」の違いを見分け、設定の削除や作り直しを繰り返して問題を広げないための手順を説明します。

1. 更新失敗・一覧が空・接続失敗を見分ける

Shadowrocketのサブスクリプション更新では、保存したURLにアクセスしてサーバー情報を取得し、認識できる内容をHomeに表示します。更新が成功しても、すべてのサーバーに接続できるとは限りません。サーバーへの接続に失敗しても、サブスクリプションURLが無効だとは限りません。複数の設定を同時に変更せず、まず問題が発生している段階を特定しましょう。

サブスクリプションURLを読み込む サーバーにリクエストを送信 応答を受信 項目を解析 サーバーを表示

Homeで該当するサブスクリプショングループを展開し、単に折りたたまれているだけではないか確認します。検索やフィルターを使っている場合は、条件をいったん解除してください。更新前の項目数と、更新後に以前の項目が残っているか、一覧が空になったか、接続テストだけに失敗したかを記録します。症状によって対処方法は異なります。

表示されている症状優先して確認変更しない項目
更新エラーが出るが、以前の項目は残っているURL、ネットワーク接続、サーバーの応答登録済みのサーバー設定
グループを展開しても項目がないアカウントの利用権、応答内容、出力形式Config内のルーティングルール
項目はあるが接続できないサーバーの状態、認証情報、TLS設定正常に動作することを確認済みのサブスクリプションURL

2. URL全体を確認する:ドメインの正誤だけでは不十分

サブスクリプションURLは、利用中のプロバイダーから取得してください。アカウント管理ページ、ログインページ、請求ページのURLではなく、プロバイダーが用意したサブスクリプション用のコピー機能を使います。以下は構造を説明するための架空の例で、実際に使えるURLではありません。実際のURLはパス、パラメーター名、長さが異なる場合があるため、例をもとに自分で組み立てないでください。

https://example.com/sub?token=xxxx
  1. 先頭と末尾を確認:プロトコル、ドメイン、パス、クエリパラメーターがすべてコピーされていることを確認します。チャットアプリ上の折り返し表示で内容が変わるとは限りませんが、手動で選択すると末尾が抜けることがあります。
  2. 余分な文字を取り除く:「サブスクリプションURL:」などの説明文、引用符、文末の句読点、改行をURL欄に含めないでください。URL内に元から含まれる記号は削除しないでください。
  3. パラメーターをそのまま保持:?の後ろには通常クエリパラメーターが続き、&でパラメーターを区切ります。これらを全角記号に置き換えるとURLが変わります。大文字・小文字を独断で変更したり、パーセントエンコードを重ねてデコードしたりしないでください。
  4. URLを再コピーする:Homeで該当するSubscribe項目の編集画面を開き、URLを確認します。再登録する場合は、Homeの追加画面からAdd Serverを開き、Subscribeを選んでURLを入力します。引き続き使えるサーバーを失わないよう、古い項目は残しておきましょう。

一部のWebページのソースでは、区切り文字&が&と表記されています。ソースから直接コピーすると、この表記までURLに含まれる場合があります。プロバイダーのページにあるコピー機能を使い、正しくコピー済みのURLを一括置換しないでください。

3. プロバイダー側を確認する:アカウントが有効でも応答に項目が含まれるとは限らない

アプリの購入とプロバイダーのアカウントは別の契約です。クライアントの買い切り購入は、接続サービスのプランではありません。App StoreでShadowrocketの購入を復元しても、プロバイダーのアカウント利用権が復元されたり、無効なサブスクリプションURLが置き換わったりすることはありません。URL全体を確認したら、既存アカウントの有効期限、利用可能なデータ容量、サブスクリプションURLがリセットされていないか、プロバイダーが明示しているリクエスト制限がないかを確認してください。

401
HTTP認証に関する応答:認証情報を確認
403
HTTPアクセス拒否:アカウントとアクセス条件を確認
429
HTTPリクエスト過多:連続更新を中止

これらはHTTPステータスコードであり、Shadowrocketの画面に必ず同じ文言で表示されるわけではありません。アプリのエラー情報またはプロバイダーが確認した応答に該当ステータスがある場合に限り、各項目に沿って対処してください。一覧が空というだけで、アカウントが期限切れだと判断することはできません。

HTTP 401 Unauthorized

原因:サーバー認証に失敗しています。tokenの期限切れやURLのリセットが原因の可能性があります。

対処:プロバイダーから現在有効なURLを取得し、保存済みのURL全体を置き換えてから更新してください。

HTTP 403 Forbidden

原因:サーバーが今回のアクセスを拒否しています。アカウント権限やアクセス条件が関係している可能性があり、パスワードの誤りだけが原因とは限りません。

対処:該当するサブスクリプションリクエストが拒否された理由をプロバイダーに確認し、その案内に従ってアカウントやアクセス制限に対処してください。

HTTP 429 Too Many Requests

原因:リクエストがサーバー側の頻度制限に達しています。更新を続けても拒否される可能性があります。

対処:手動更新を中止してください。応答にRetry-Afterが含まれている場合は指示された時間だけ待ち、含まれていない場合は再開条件をプロバイダーに確認します。

結論:確認済みのサーバー側拒否から対処する

応答が401、403、429のいずれかだと確認できた場合は、認証、権限、リクエスト頻度の問題を先に解決してください。Configを書き換えたり、同じURLを何度も追加したりしても解決しません。

4. 成功応答でもサーバー一覧が空の場合:ステータスコードだけでなく内容を確認

HTTP 200はサーバーが成功応答を返したことを示すだけで、内容がShadowrocketで解析できるサブスクリプション形式だとは限りません。ログインページ、認証ページ、期限切れの案内もHTTP 200で返される場合があります。ドメインにアクセスでき、ページが正常に開いていても、応答にインポート可能なサーバー項目が含まれていないことがあります。

HomeのSubscribeはサブスクリプションサーバーの管理に使います。Configの構成ファイルにはルールやその他の設定が含まれる場合があります。構成ファイルのURL、ルールリストのURL、サーバーサブスクリプションのURLを相互に代用しないでください。プロバイダーから複数の入口が案内されている場合は、それぞれの用途を確認して適切な種類を選びます。

確認できた応答意味次の手順
200とHTMLページリクエストは成功したが、内容はサーバーサブスクリプションではないサブスクリプションの入口とリダイレクト先を確認
200と空の本文解析できる本文がない生成結果をプロバイダーに確認
200と空ではないサブスクリプション内容形式と項目フィールドを引き続き確認個人情報を伏せたエラー情報を提示し、出力内容をプロバイダーに確認

5. ネットワークと更新のタイミング:一度に変更する条件は一つだけ

更新では、まずドメイン名の解決、接続、HTTPSのTLS検証を完了し、その後にサブスクリプションの解析が行われます。リクエストのタイムアウトと解析失敗は、別の段階で起きる問題です。ネットワークを切り替えた直後は以前の接続が復旧していない場合があり、アカウントを更新した直後はサーバー側の状態反映に時間がかかることもあります。実際のリクエスト結果とプロバイダーの案内に従い、「数分待てば必ず直る」と一律に判断しないでください。

  1. 現在の状態を記録:Wi-Fiとモバイル通信のどちらを使っているか、VPNが接続中か、Home → Global Routingで何が選択されているかを記録します。これらを同時に変更しないでください。
  2. 一度だけ更新する:Homeで対象のSubscribe項目を更新し、そのリクエストが終了するまで待ちます。連続してタップしたり、複数のデバイスから同じURLへ同時にリクエストしたりしないでください。
  3. ネットワークを切り替えて再確認:タイムアウトが発生する場合は、デバイスのネットワークが安定してから、別の利用可能なネットワークで一度だけ再確認します。一方のネットワークでは失敗し、別のネットワークでは成功するなら、tokenをすぐにリセットするのではなく、まずネットワーク経路を確認してください。
  4. 既存の接続の影響を切り分ける:現在の接続がリクエストに影響している可能性がある場合は、接続が中断されることを理解したうえで、VPNを一時的に切断して試します。VPNが自動で再接続する場合は、Settings → On Demandを確認してください。テスト後は元の設定に戻します。
  5. システム時刻を確認:デバイスの日付や時刻が大きくずれていると、証明書の有効期限判定に影響することがあります。まず時刻を修正し、サブスクリプションのリクエストエラーを解決するために証明書検証を無効にしないでください。

Global RoutingのConfig、Proxy、Direct、Sceneはトラフィックの処理方法であり、サブスクリプション形式を選ぶ機能ではありません。更新リクエストが実際にどの経路を使うかは、アプリの設定や現在の接続状態も踏まえて判断します。モード名だけを見て、リクエストが必ず特定の経路を通るとは限りません。DOMAIN-SUFFIX、GEOIP、IP-CIDR、FINALを変更しても、サーバーから返される空の本文は修復できません。

6. 確認情報の共有と復旧後の動作確認

ここまで確認しても原因を特定できない場合は、検証可能な情報を利用中のプロバイダーに伝えてください。「いつ、どのネットワークで、何を操作し、どのような結果になったか」を具体的に説明します。「サーバーが消えた」とだけ伝えるのでは不十分です。アカウントのパスワードやサブスクリプションURL全体を公開する必要はなく、元のURLを第三者に転送して代わりにテストしてもらうことも避けてください。

復旧したら、一度更新してグループを展開し、サーバー項目が表示されることを確認してから、既存の項目を一つ選んで接続をテストします。一覧が戻っても接続できない場合は、サーバー接続のトラブル対処に進み、サブスクリプションの変更を繰り返さないでください。TrojanなどTLSを使う項目では、よくあるポート番号から値を推測せず、プロバイダーが指定したAddress、Port、関連するTLSフィールドを確認します。

結論:「更新できること」と「接続できること」を別々に確認

まずサブスクリプションを一度更新し、項目が安定して生成されることを確認します。次に、選択したサーバーに接続できることを確認してください。完了後は、確認のために一時変更したOn Demandとルーティング設定を元に戻し、テスト時の状態をそのまま残さないようにします。