切り分け軸②:更新時のネットワーク経路が正常かどうか
サブスクリプションの更新は本質的にクライアントがサーバーへ送るネットワークリクエストであり、このプロセスは現在のネットワーク環境の影響を直接受けます。特にプロキシモードが有効な状態では、リクエストの経路が想像以上に複雑になっている場合があります。
システムプロキシと更新リクエストの関係
ほとんどのクライアントはサブスクリプション更新時、現在接続中のプロキシノードを経由せず、サブスクリプションサーバーへ直接接続を試みます。これは「すでに無効かもしれないノードを使って新しい設定を取得する」という循環依存を避けるための仕組みです。しかし、システムプロキシや 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 を手動指定し、同じリンクの返り値が異なるかをテストすることもできます。
ダウンロード完了後、2つのファイルの内容とサイズを比較してください。明らかな差異があれば、サブスクリプションサービスが確かに User-Agent によって異なる内容を返していることになり、以降はクライアント側で互換性の良い識別子を選んで対応できます。
User-Agent に対する処理方針はサブスクリプション事業者ごとに統一されておらず、まったく区別しない事業者もあれば、これを基準にトラフィックの課金方式を制限している事業者もあります。ノード一覧が長期間変わらない問題に遭遇したら、User-Agent の切り分けはネットワークの切り分けの後、リンクの再取得の前に試す価値があります。
各クライアントでの自動更新間隔の適切な設定
自動更新間隔を短く設定しすぎると、サブスクリプション事業者側の頻度制限に引っかかりやすく、間接的に前述の「見せかけのリンク失効」を引き起こします。逆に長く設定しすぎると、ノード情報の更新が遅れ、特に事業者側が一時的にノードを切り替えたりルールを調整したりした際に即時反映されません。以下は一般的な推奨事項です。
- 日常利用では12〜24時間に1回程度が推奨です。ほとんどの事業者のノード変動頻度はこの周期を超えることはなく、あまりに頻繁な自動更新は意味が薄くなります。
- 数分〜1時間以内の設定は避けるようにしましょう。サブスクリプションサービスが明確に高頻度更新に対応していると明示していない限り、異常なリクエストと判定され一時的に制限されやすくなります。
- 手動更新は必要なときだけ行えば十分です。ノード接続の異常に気づいたときや、事業者から調整の通知を受け取ったときに1回手動で更新すればよく、自動機構に依存する必要はありません。
- 更新失敗時に連続でリトライしないようにしましょう。数分空けてから再試行する方が良く、連続で高頻度にリトライすると逆に頻度制限に引っかかる可能性が高まります。
一部のクライアントは「Wi-Fi 接続時のみ自動更新」「充電中のみ更新」といった追加条件にも対応しています。モバイル端末利用者でデータ通信量やバッテリーを気にする場合は、これらのオプションを併用することで不要なバックグラウンドリクエストを減らせます。
そのまま実行できる切り分け手順
前述の3つの軸を、簡単なものから複雑なものへと整理した切り分け手順にまとめました。問題に遭遇したら順番に確認していくことで、通常は数分以内に原因を特定できます。
- サブスクリプションリンクに余分な空白や切断がないか確認し、ブラウザに貼り付けて開いてテストする。
- システムプロキシを無効化するか直接接続に切り替えて、もう一度更新を試みる。
- 別のネットワーク環境(たとえばスマホのテザリング)に切り替えて再テストする。
- クライアント内の自動更新間隔設定を確認し、頻度制限に引っかかっていないかチェックする。
- User-Agent の設定を切り替えてみて、更新後のノード数に変化があるか比較する。
- 以上をすべて確認しても解決しない場合は、サブスクリプション提供元にリンクとプラン状況を確認してもらう。
リンク、ネットワーク、User-Agent のいずれにも問題がないと確認できたにもかかわらず、ノード一覧が一向に変わらない場合、その大半はサブスクリプション事業者側で実際にコンテンツが更新されていないことが原因です。これはクライアント側の問題ではないため、サブスクリプション提供元に直接フィードバックすることをお勧めします。