はじめに 読了時間 約8分

Clash サブスク更新失敗の切り分け方:リンク失効・ネットワーク要因・自動更新間隔の設定

サブスクリプション取得時のエラーやノード一覧が長期間変わらない場合に、リンクの有効性・更新時のネットワーク経路・User-Agent 互換性という3つの観点で切り分ける方法と、各クライアントでの自動更新間隔の適切な設定方法を解説します。

サブスク更新失敗の3つのパターン、まずどれかを見極める

「サブスクリプション更新失敗」はクライアントごとにエラー表示がさまざまですが、実質的には3つのパターンに絞られます。切り分けを始める前に自分がどのパターンに当たっているかを確認すると、かなりの手間を省けます。

  1. 更新時にすぐエラーが出る:「ダウンロード失敗」「解析失敗」「接続タイムアウト」といった表示が、「サブスクリプションを更新」をクリックした瞬間、またはバックグラウンドの自動更新のタイミングで出るケース。
  2. 更新は成功表示だが、ノード一覧に変化がない:クライアント側では更新完了と表示され、タイムスタンプも更新されているのに、プロキシグループ内のノード数や名称が数日前と全く同じ。
  3. 更新自体はできるが、更新後すべてのノードが使えない:サブスクリプション自体の取得は正常に行われるのに、設定ファイル内のノード情報がすべて無効になっており、接続テストがすべてタイムアウトする。

この3つは原因が完全に異なります。1つ目はリンクまたはネットワークの問題である場合が多く、2つ目はサブスクリプション提供元側で実際に内容が更新されていない、またはクライアントが古い結果をキャッシュしている場合が多く、3つ目はノード自体が期限切れや停止になっているケースが大半で、「更新」という動作自体に問題があるわけではありません。本記事では前者2つを中心に扱い、3つ目についてはサブスクリプション提供元に直接プラン状況を確認することをお勧めします。

切り分け軸①:サブスクリプションリンク自体が有効かどうか

サブスクリプションリンクの失効は最もよくある、かつ見落とされやすい原因です。多くの人はクライアント側のバグを疑いがちですが、実際にはリンクの期限切れ、リセット、あるいはコピー時に余分な文字が入り込んでいるケースの方が多く見られます。

リンクが完全かつクリーンか確認する

チャットアプリやウェブページ、メールからサブスクリプションリンクをコピーする際、前後に空白や改行が混入したり、リンクが自動的にハイパーリンク形式に変換されて末尾に余分な記号が付いたりすることがあります。まずリンクをプレーンテキストエディタに貼り付けて、先頭が http:// または https:// になっているか、末尾が完全なパスやパラメータになっているか、途中で省略記号などにより切断されていないかを目視で確認しましょう。

ブラウザやコマンドラインでリンク単体をテストする

サブスクリプションリンクを直接ブラウザのアドレスバーに貼り付けて開いてみて、ダウンロードが始まったり、Base64 エンコードされたテキストや YAML 設定内容が表示されたりすれば、リンク自体は有効です。逆にブラウザが「このサイトにアクセスできません」と表示するか 404 が返る場合は、原因はリンクの失効であり、クライアント側の問題ではないとほぼ断定できます。コマンドラインに慣れているユーザーは、以下の方法でも手早く確認できます。

curl -I "あなたのサブスクリプションリンク"

返ってきたステータス行に注目してください。200 は正常、401/403 はサブスクリプションの期限切れや認証パラメータが必要な場合によく見られ、404/410 はリンクがすでに存在しないことを示します。

更新回数や頻度に制限がないか確認する

サブスクリプションリンクの更新頻度を、たとえば1時間に1回までに制限している業者も少なくなく、それを超えると一時的にエラーや空のコンテンツが返されます。短時間に手動で何度も「サブスクリプションを更新」をクリックし、さらに自動更新間隔を短く設定していると、この種の制限に引っかかりやすくなり、あたかも「リンクが失効した」ように見えます。この場合は通常しばらく待てば自然に復旧するため、リンクを再取得する必要はありません。

ヒント

デバイスを買い替えたりクライアントを再インストールした後にサブスクリプションが取得できない場合、まずリンクを別のプラットフォームの共有形式のままコピーしていないか(たとえば QR コードの内容をテキストリンクとして使ってしまうなど)を確認してください。この種のミスは「リンク失効」エラーの中でもかなりの割合を占めます。

切り分け軸②:更新時のネットワーク経路が正常かどうか

サブスクリプションの更新は本質的にクライアントがサーバーへ送るネットワークリクエストであり、このプロセスは現在のネットワーク環境の影響を直接受けます。特にプロキシモードが有効な状態では、リクエストの経路が想像以上に複雑になっている場合があります。

システムプロキシと更新リクエストの関係

ほとんどのクライアントはサブスクリプション更新時、現在接続中のプロキシノードを経由せず、サブスクリプションサーバーへ直接接続を試みます。これは「すでに無効かもしれないノードを使って新しい設定を取得する」という循環依存を避けるための仕組みです。しかし、システムプロキシや TUN モードの設定が過度に積極的で、クライアント自身のネットワークリクエストまで不安定なノードへ強制転送している場合、更新リクエストがタイムアウトすることがあります。一度システムプロキシを無効化するか直接接続に切り替えて更新をテストしてみましょう。それで成功するなら、問題は現在のプロキシ経路にあり、サブスクリプションリンク自体には問題がないと判断できます。

DNS 解析の異常

サブスクリプションサーバーのドメイン名がローカル DNS の汚染によって誤ったアドレスに解決されている場合、リンク自体が完全に正しくても接続に失敗します。別のデバイスを使うか、信頼できる DNS サーバーに切り替えてから同じリンクを再テストしてみましょう。ネットワーク環境を変えた後に正常に取得できるなら、問題は DNS 解析の層にあるとほぼ特定できます。

ファイアウォールやセキュリティソフトによるブロック

一部のセキュリティソフトは未知のプログラムが発するネットワークリクエストをブロックしたり、通過を遅延させたりします。特にインストール直後のクライアントが初めて通信を試みるタイミングで発生しやすいです。サブスクリプション更新が「接続中」のまま長時間動かず、明確なエラーも出ない場合は、システムのファイアウォール規則やセキュリティソフトの通信許可設定を確認し、クライアントのプロセスがネットワークへのアクセスを許可されているか確かめてください。

企業ネットワークや公共 Wi-Fi の制限

企業内ネットワークや公共 Wi-Fi の一部では特定のポートやプロトコルを制限しており、通常のブラウジングには問題がなくても、サブスクリプションサーバーが使うポートだけがブロックされることがあります。スマホのテザリングに切り替えてテストするのが最も手早い切り分け方法で、ネットワークを変えた瞬間にサブスクリプションが更新できるようになれば、現在のネットワーク環境側の制限が原因であり、サブスクリプションやクライアント自体の問題ではないとほぼ確定できます。

切り分け軸③:User-Agent 互換性による見えない失敗

これは比較的見落とされがちですが、実際の影響は小さくない要因です。サブスクリプションサーバーは更新リクエストを受け取る際、リクエストヘッダー内の User-Agent フィールドを読み取り、どのクライアントからのリクエストかを判定し、それに応じて返す設定フォーマットや有効化するルールテンプレート、さらには更新を許可するかどうかまで決めていることがあります。

User-Agent が「更新は成功したように見えるが内容が変わらない」を引き起こす理由

一部のサブスクリプションサービスは、異なる User-Agent に対して異なるバージョンの設定内容を返します。クライアントが送る User-Agent がサーバー側の想定するルールに一致しない場合、サーバーはキャッシュされた古い内容や、簡略版の設定を返すことがあり、その際にエラーは発生しません。クライアント側は「200 成功」のレスポンスを受け取るため更新完了と表示しますが、ノード一覧は実際には更新されていません。これがまさに2つ目の失敗パターンのよくある原因です。

User-Agent が原因かどうかを確認する方法

Clash Meta(mihomo)カーネルに対応したクライアントの多くは、サブスクリプション設定で User-Agent をカスタマイズできるほか、「カーネルのデフォルト識別子を使用」と「クライアント自身の識別子を使用」の2つのモードを切り替えられます。これが原因かもしれないと疑う場合は、User-Agent の設定を一度切り替えてからサブスクリプションを再取得し、ノード数に変化があるかを比較してみましょう。コマンドラインで User-Agent を手動指定し、同じリンクの返り値が異なるかをテストすることもできます。

curl -A "clash-verge/2.0" "あなたのサブスクリプションリンク" -o test1.yaml
curl -A "Mozilla/5.0" "あなたのサブスクリプションリンク" -o test2.yaml

ダウンロード完了後、2つのファイルの内容とサイズを比較してください。明らかな差異があれば、サブスクリプションサービスが確かに User-Agent によって異なる内容を返していることになり、以降はクライアント側で互換性の良い識別子を選んで対応できます。

補足

User-Agent に対する処理方針はサブスクリプション事業者ごとに統一されておらず、まったく区別しない事業者もあれば、これを基準にトラフィックの課金方式を制限している事業者もあります。ノード一覧が長期間変わらない問題に遭遇したら、User-Agent の切り分けはネットワークの切り分けの後、リンクの再取得の前に試す価値があります。

各クライアントでの自動更新間隔の適切な設定

自動更新間隔を短く設定しすぎると、サブスクリプション事業者側の頻度制限に引っかかりやすく、間接的に前述の「見せかけのリンク失効」を引き起こします。逆に長く設定しすぎると、ノード情報の更新が遅れ、特に事業者側が一時的にノードを切り替えたりルールを調整したりした際に即時反映されません。以下は一般的な推奨事項です。

一部のクライアントは「Wi-Fi 接続時のみ自動更新」「充電中のみ更新」といった追加条件にも対応しています。モバイル端末利用者でデータ通信量やバッテリーを気にする場合は、これらのオプションを併用することで不要なバックグラウンドリクエストを減らせます。

そのまま実行できる切り分け手順

前述の3つの軸を、簡単なものから複雑なものへと整理した切り分け手順にまとめました。問題に遭遇したら順番に確認していくことで、通常は数分以内に原因を特定できます。

  1. サブスクリプションリンクに余分な空白や切断がないか確認し、ブラウザに貼り付けて開いてテストする。
  2. システムプロキシを無効化するか直接接続に切り替えて、もう一度更新を試みる。
  3. 別のネットワーク環境(たとえばスマホのテザリング)に切り替えて再テストする。
  4. クライアント内の自動更新間隔設定を確認し、頻度制限に引っかかっていないかチェックする。
  5. User-Agent の設定を切り替えてみて、更新後のノード数に変化があるか比較する。
  6. 以上をすべて確認しても解決しない場合は、サブスクリプション提供元にリンクとプラン状況を確認してもらう。
注意

リンク、ネットワーク、User-Agent のいずれにも問題がないと確認できたにもかかわらず、ノード一覧が一向に変わらない場合、その大半はサブスクリプション事業者側で実際にコンテンツが更新されていないことが原因です。これはクライアント側の問題ではないため、サブスクリプション提供元に直接フィードバックすることをお勧めします。

まずクライアントのバージョンが最新か確認する

サブスクリプション解析や User-Agent 互換性に関する一部の問題は、新しいバージョンのクライアントで既に修正されています。切り分けを始める前に、現在使用しているバージョン番号を確認しておくことをお勧めします。

Clash をダウンロード