セキュリティとプライバシー · Clash 技術ブログ

Clash のサブスクリプションリンクをインポートする方法:形式の識別、更新失敗、漏えいへの対処

サブスクリプションのインポートは、リンク先を保存すれば終わりではありません。返された内容が設定、エラーページ、期限切れの応答のどれかを確認し、更新、有効化、実際の接続検証まで行ってください。

  • サブスクリプションのインポート
  • 設定の更新
  • リンクの安全管理
目次

インポート前に、リンクが Clash または Mihomo の設定を返すことを確認する

Clash が直接インポートできるのは任意の Web アドレスではなく、サービス提供元が用意した Clash または Mihomo 互換のサブスクリプションです。クライアントがリンクへアクセスすると、サーバーから proxies、proxy-groups、rules を含む YAML が返る場合もあれば、エンコード済みのテキスト、ログインページ、エラーページが返る場合もあります。解析の可否は返された内容によって決まります。

リンクをクライアントへ貼り付けた後に「追加成功」と表示されても、アドレスが保存されたことしか分かりません。設定のダウンロードが終わったことも、その中のノードを利用できることも保証されません。

サブスクリプションアドレスの token は、通常読み取り用の認証情報と同等です。以後のトラブルシューティングで必要なのは、エラーステータス、レスポンスの種類、時刻だけであり、完全な URL を公開する必要はありません。チャットのスクリーンショット、画面録画、ログを共有する前に、疑問符以降のパラメーターを隠してください。

401、Web ページの HTML、YAML は、それぞれ異なる三種類の問題を示す

更新結果の読み方

表示された結果意味と対処方法
401 / 403token が無効、アカウント状態に異常がある、またはサーバーがアクセスを拒否している
404アドレスのパスが変わったか、リンクのコピーが不完全である
200 だが、内容が <html で始まる設定ではなく、ログインページ、検証ページ、エラーの Web ページが返っている
200 で、proxies / proxy-groups / rules が含まれるClash/Mihomo の YAML と考えられ、続けて解析できる
download failed / timeoutクライアントが制限時間内にレスポンスを取得できていない。ネットワークとサーバーを確認する

サブスクリプションサービスによっては、User-Agent に応じて異なる形式を返します。ブラウザーで直接開いて一連の内容が表示されても、Clash からのリクエストで同じ内容が返るとは限りません。逆に、ブラウザーで Web ページが表示されても、リンクが無効とは限りません。設定を何度も削除するより、クライアントのバージョン、更新時刻、ステータスコードを提供元へ伝えるほうが有効です。

保存、更新、有効化を一連の操作として完了する

リモートから完全にインポートする一連の手順

  1. サービス提供元が Clash または Mihomo 用と明記したリンクをコピーする

    先頭の https から最後のパラメーターまで完全にコピーし、余分な空白を含めない。

  2. Profiles または設定画面でリモートサブスクリプションを追加する

    入手元を自分で識別できる名称を付け、名称に token を含めない。

  3. すぐに更新をクリックする

    ステータスコード、解析メッセージ、新しい更新時刻を確認する。

  4. この設定を現在の設定として選択する

    Proxies 画面でポリシーグループとノードが表示されたことを確認する。

クライアントに直接リンク、設定リンク、URL Scheme など複数の入口がある場合は、まず通常のリモートリンクを使います。ある方法で client error(Connect) が出る場合は、クライアントのドキュメントに記載された別のインポート方法へ切り替えられます。ただし、「無効な証明書を許可」を恒久的に有効にしないでください。

parse error は、内容を取得できたが形式の検証に通らなかったことを示す

parse、yaml: unmarshal、field not found などのエラーが出る場合、通常はネットワークリクエストが完了し、クライアントが内容の読み取りで止まっています。よくある原因は、サーバーが別のクライアント向け形式を返した、YAML のインデントが壊れた、設定に現在のカーネルが対応しないフィールドがある、のいずれかです。

この場合、ノードを切り替えても通常は解決しません。最初の具体的なエラー行と行番号を記録し、クライアントの Mihomo バージョンを確認して、互換形式を生成するようサブスクリプション提供元へ依頼してください。リモート設定の数十か所を手動修正しても、次回更新ですべて上書きされるため避けてください。

unexpected character '<'

レスポンスが HTML ページである可能性が高い。ログイン、検証、サーバーエラーを確認する。

mapping values are not allowed

YAML のインデントまたは記号が壊れている。提供元へ再生成を依頼する。

unsupported proxy type / field not found

カーネルのバージョンと設定フィールドが一致していない。対応中のバージョンへ更新するか、互換性のあるサブスクリプションへ切り替える。

更新時刻が変わってもプロキシ画面が空なら、設定に利用可能なグループがあるかを確認する

リモート更新が成功と表示されても Proxies 画面にノードがない場合、返された内容がルールだけである、すべてのノードがフィルターで除外された、または古い設定が選択されたままである可能性があります。Profiles に戻って選択マークを確認し、設定に proxies または proxy-providers が含まれていること、さらに proxy-groups からそれらが参照されていることを確認してください。

ノードが存在していても、すべて未使用のグループに入っていると、メインポリシーは DIRECT のままになります。実際にノードを含むポリシーグループを選んでノードを固定し、Connections でリクエストを一件確認してください。設定が正しく接続されているかは、遅延テストのボタンだけを見るより、この方法のほうが明確に分かります。

リストが空の場合の確認項目

  • 現在の設定は直前に更新したものか
  • 設定に proxies または proxy-providers が定義されているか
  • proxy-groups がノードまたは provider を正しく参照しているか
  • 上書きスクリプトですべてのノードが除外されていないか

インターネットへ接続できても、今日のサブスクリプション更新が成功したとは限らない

Clash は通常、最後に正常取得したローカルコピーを引き続き使用します。そのため、サブスクリプションの期限切れやサーバー側エラーが発生しても、既存ノードが一時的に使える場合があります。更新状態は、ページが開くかどうかではなく、「最終更新日時」と今回のエラーで判断してください。

古い設定が動作しているなら、すぐに削除しないでください。まずエラー情報を保存し、アカウントとリンクの状態を確認します。新しいアドレスの更新に成功してから古い項目を削除してください。唯一動作するコピーを削除すると、調査できる問題が即座の通信断に変わってしまいます。

古いノードは動作するが、新しい更新は 401
サーバーが現在の認証情報を拒否しています。サービスの管理画面にサインインし、サブスクリプションアドレスを確認してください。
自宅回線では更新がタイムアウトし、モバイルホットスポットでは成功する
原因は YAML 形式ではなく、現在のネットワーク経路にある可能性が高いと考えられます。
複数のクライアントが同時に失敗する
端末ごとに再インストールする前に、サービスのお知らせとサブスクリプションの状態を確認してください。

実際のリクエスト一つでインポート手順を完了する

新しい Profile を選択し、Proxies でノードを一つ固定します。Rule モードを維持してシステムプロキシを有効にしてください。使い慣れたWebページを開くと、Connections に対象ドメイン、該当ルール、送信経路が表示されるはずです。遅延テストで分かるのは確認先が応答したことだけであり、実際のリクエストの代わりにはなりません。

リクエストが Clash に入り timeout と表示されたら、別のノードに切り替えます。記録がまったくなければシステムプロキシを、DIRECT と表示されたらルールを確認してください。ページが正常に開き、記録と選択内容が一致して初めて、サブスクリプションの取得、解析、有効化、転送がすべて完了したと判断できます。

完全なサブスクリプションが公開スクリーンショット、グループチャット、サポートチケット、または信頼できない変換サイトに掲載された場合は、サービスの管理画面でサブスクリプションアドレスをリセットしてください。新しい token が有効になったら、自分のクライアントでリンクを置き換えて更新します。古いアドレスは無効な状態を返す必要があります。Profile の表示名を変更しただけでは、古い認証情報は無効になりません。

  1. 新しいサブスクリプションアドレスを生成する

    サービス提供元のリセット機能または token 更新機能を使用します。

  2. 管理下の端末を更新する

    各端末で古い URL を置き換え、新しい更新日時とノード一覧を確認します。

  3. 古いアドレスが無効になったことを確認する

    古いリンクをチャットで送り続けず、サービスの管理画面に表示される状態だけを確認してください。

  4. 異常な使用量を確認する

    見覚えのない端末やトラフィックの変化が見つかった場合は、サービス提供元のアカウントセキュリティ手順に従ってください。