Clash Meta
トラブル対処ガイド
症状から接続経路を切り分けます。まずローカルポートを確認し、次にルール、DNS、接続先を調べます。変更は一度に一つに絞りましょう。
初回インストールやサブスクリプションの追加は入門ガイドを参照してください。このページでは、設定済みの環境で発生した問題を章ごとに確認できます。復旧後はチュートリアルに戻り、接続を再確認できます。クライアントによってメニュー名は異なります。本文中の「設定」「接続」「ログ」「設定画面」はそれぞれ対応する機能を指し、実際の動作設定とコアのログを優先して判断してください。
インターネットに接続できない:ローカルの入口から確認
元のネットワークとプロキシ経路を切り分ける
まずクライアントの接続を停止し、システムプロキシを無効にして、TUNが停止していることを確認してから、通常なら直接アクセスできるサイトを開きます。それでも接続できない場合は、Wi-Fiのログイン認証、LANケーブル、ルーター、OSのネットワーク状態を優先して確認し、ルールの変更は後回しにしてください。ホテルや学校のネットワークではWeb認証が必要な場合があります。認証が済んでいなければ、プロキシサーバーが正常でも接続できません。元のネットワークが復旧したらクライアントを再起動し、動作確認済みの設定を一つだけ読み込みます。
クライアント終了後にすべての通信が止まる場合は、システムにローカルホストを指すプロキシ設定が残っていないか確認してください。待ち受けプロセスが終了しているのに、アプリがそのアドレスへリクエストを送ると、接続拒否が続くことがあります。Windowsでは「設定 → ネットワークとインターネット → プロキシ」で手動プロキシを確認します。macOSでは使用中のネットワークサービスの「詳細 → プロキシ」を確認してください。変更前に元の値を記録しましょう。会社支給端末では自動構成URLが管理ポリシーから設定されている場合があるため、安易に削除しないでください。
コアの起動とポートの待ち受けを確認
クライアントのログを開き、直近の起動記録から順に確認します。設定の解析エラー、ポートの競合、権限不足などがあると、画面上は起動しているように見えても、コアがプロキシを提供できていない場合があります。address already in useが表示されたら、クライアントを二重起動していないか、コアのプロセスが残っていないか確認してください。ポート番号を変えるだけでは解決しないことがあります。システムプロキシやシェルの環境変数が古いポートを使ったままだと、今度は接続口の不一致が起きます。
mixed-portはHTTPとSOCKSで共用するローカルの接続口であり、ノードサーバーのポートではありません。以下は現在の設定との照合用で、サブスクリプション全体の代わりにはなりません。稼働中のポートが7890であることを確認したうえで、プロキシを明示したコマンドでテストします。実際のポートが異なる場合は、コマンド内のアドレスも合わせて変更してください。テストには元のネットワークからアクセスできるサイトを選び、対象サイト固有の制限と混同せず、まずローカルの接続口を確認します。
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
curl -I --connect-timeout 10 --max-time 20 --proxy http://127.0.0.1:7890 https://example.com
接続履歴から途切れた箇所を特定する
コマンドの実行直後にローカルホストへ接続できない場合は、待ち受けがないか、ローカルのセキュリティポリシーにブロックされています。接続履歴に記録されてから失敗する場合は、ルールや出口を調べます。Windows PowerShellでは、引数の意味が別名で変わらないようcurl.exeを明示するのがおすすめです。有効なHTTPレスポンスが返れば、何らかのHTTPサービスには到達しています。ステータスコードが成功を示さなくても、それだけでプロキシが起動していないとは判断できません。
接続画面で対象ドメインを絞り込み、適用されたルール、ポリシーグループ、最終的な出口を確認します。ルールは上から順に適用されるため、先にある広い条件のルールが後続の詳細なルールを上書きすることがあります。ポリシーグループを選んでも、その内部で利用できないプロキシが選択されていれば復旧しません。一時的にグローバルモードにし、動作確認済みの出口を手動選択して比較できます。テスト後はルールモードに戻し、誤った振り分けをグローバルモードで隠したままにしないでください。
明示的なプロキシ接続は正常でブラウザーだけ失敗する場合はシステムプロキシの章へ、ログにドメインの名前解決エラーがある場合はDNSの章へ、特定の出口だけ失敗する場合はノードのタイムアウトの章へ進んでください。テストごとに対象、モード、出口、結果を記録しましょう。サイトやノードを次々に切り替えると、比較条件が揃わなくなります。
ノードがタイムアウトする:名前解決・接続・ハンドシェイクを切り分ける
速度テストの失敗は、すべての通信の失敗を意味しない
クライアントの遅延テストは、通常、指定したプロキシ経由でテスト先にリクエストを送って結果を確認します。サーバーのポートに単純に接続できるかを測るものではありません。テスト先に到達できない、想定外のステータスが返る、サーバー側で頻繁なテストが制限されているといった理由でもタイムアウトになります。同じ出口から実際に必要なサイトへアクセスし、接続ログを確認してください。実際のアクセスが正常なら、サブスクリプションをすぐ削除するのではなく、テスト先や検査間隔を見直します。
失敗の範囲を、単一の出口、同じプロバイダーの全出口、すべてのプロバイダーの出口に分けて確認します。一つだけ失敗するなら、そのサーバーと設定値を優先して確認します。同じグループがまとめて失敗するなら、アカウントの状態、サブスクリプションの更新、サーバー側のメンテナンスを確認してください。すべての出口で失敗するなら、ローカルネットワーク、DNS、時刻、ファイアウォールに戻って調べます。スマートフォンのテザリングは別の接続回線との比較に使えますが、回線を切り替えたら接続を張り直してください。以前の接続結果は新しい回線の状態を示しません。
エラーが発生した段階に注目してログを読む
lookupやno such hostは、通常、サーバーのドメイン名解決に関係しています。connection refusedは接続先から拒否されたことを示し、ポートが待ち受けていない、またはサーバー設定が一致していない場合によく見られます。接続タイムアウトから分かるのは、制限時間内にその段階が完了しなかったことだけで、アカウントが無効とは断定できません。ログがTLSやプロトコルのハンドシェイクまで進んでいる場合は、DNSを何度も変えるのではなく、認証、SNI、通信方式、システム時刻を確認します。
| ログの手がかり | 優先して確認する項目 | 安易に決めつけないこと |
|---|---|---|
| サーバーのドメイン名を解決できない | ノードの名前解決設定と直接接続のネットワーク | ノードの認証情報が正しくない |
| 接続が拒否された | サーバーのポートと待ち受け状態 | ローカルルールの順序が誤っている |
| TLS証明書のエラー | 時刻、証明書チェーン、サーバー名 | 検証を無効にすれば直る |
| ハンドシェイク後に接続が切断される | プロトコルの設定、認証、サーバー側の制限 | タイムアウトを延ばせば必ず解決する |
プロキシを手動で設定する場合は、type、サーバーアドレス、ポート、認証情報、トランスポート設定を一つずつ確認します。TLSのサーバー名は接続先アドレスと異なる場合があります。WebSocketのパスとHostも、任意に入れ替えてはいけません。プロバイダーが提示するmihomo設定を基準にし、大文字・小文字や項目の階層を保ってください。サブスクリプション変換後に不明な項目が出る、またはプロトコルが非対応と表示される場合は、クライアント名だけで判断せず、実際に使われているコアを確認します。
プロトコルの対応状況とネットワーク制限を切り分ける
UDPを使う出口では、通常のTCPサイトにアクセスできても、その出口の通信経路が正常とは限りません。反対に、TCPプロキシが正常でゲームだけ失敗する場合は、アプリがUDPを使っている、プロキシがその通信に対応していない、ポリシーグループが想定した出口を使っていない可能性があります。まず通常のHTTPSリクエストで基準を確認し、その後UDPが必要なアプリを個別にテストしてください。異なる用途を同じ遅延の数値だけで判断しないようにしましょう。
システムの日付、タイムゾーン、自動時刻設定を確認してください。時刻がずれていると、証明書がまだ有効でない、または期限切れと判定されることがあります。特定のWi-Fiだけで証明書エラーが起きるなら、認証ポータルやネットワーク検査装置の影響も考えられます。skip-cert-verifyを汎用的な解決策として使わないでください。接続の信頼性を損なう一方、サーバー名、証明書チェーン、認証情報の問題は解決しません。
プロバイダーに問い合わせる際は、エラーの発生時刻とタイムゾーン、接続ネットワークの種類、プロトコル名、個人情報を伏せたエラー行を伝えてください。サブスクリプション全体、QRコード、パスワードを含む設定は送らないでください。回線を変えると復旧するなら、接続経路に関係する問題です。同じ出口が複数の端末・回線で失敗するなら、サーバー側の調査を依頼する根拠になります。タイムアウトを延ばせば応答の遅さを確認できますが、待ち受けていないポートや誤った認証情報は有効になりません。
サブスクリプションを更新できない:リクエストと設定生成を確認
ダウンロードの失敗とインポートの失敗を分けて考える
サブスクリプションの更新には、URLへのリクエスト、レスポンスの受信、内容の解析、実行用設定の生成という段階があります。エラー表示がネットワークエラー、HTTPステータスの異常、YAML解析エラーのどれに該当するか確認してください。URLに接続できない問題と、取得した内容を解析できない問題は別です。前者はネットワーク、ドメイン、アクセス権を、後者は形式とクライアントとの互換性を調べます。原因を特定しないまま同じサブスクリプションを何度も追加すると、名前が似て更新状態の異なる設定が複数でき、選び間違えやすくなります。
URLをコピーするときは、クエリパラメーターを含めてすべて保持されているか確認します。チャットアプリによって空白、改行、省略記号が挿入されていないかも確認してください。サブスクリプションURLにはアクセス用の認証情報が含まれることが多く、公開スクリーンショットや問い合わせ、オンライン変換サービスに貼り付けてはいけません。ブラウザーで開けても、内容が正しいとは限りません。ログイン画面、CAPTCHA、通信量超過の案内がHTMLで返ることがあります。ローカルでレスポンスの種類と冒頭を確認し、HTMLではなくクライアントが対応する設定データか確かめます。
レスポンスからサーバー側とローカル側の問題を切り分ける
HTTP 401や403の場合は、通常、アクセス権、アカウントの状態、サーバーのアクセス制限を確認します。404はURLの失効やパスのコピー漏れが考えられます。429はリクエスト過多を示すため、手動更新を止めて時間を置いてください。サーバーエラーの場合は現在使える設定を残し、しばらくしてから再試行するか、プロバイダーに問い合わせます。これらのエラーはローカルポートを変えても解決しません。一度更新に失敗しただけで、キャッシュ済みの設定を削除する必要もありません。
サブスクリプションURLへのアクセスにプロキシが必要なのに、現在の設定に使える出口がない場合、更新がプロキシに依存する循環状態になります。クライアントに直接接続で更新する、またはプロキシ経由で更新するオプションがあれば試し、どの経路を使ったか記録してください。必要なら、そのURLにアクセスできるネットワークへ切り替えます。古い設定を残したまま、使える出口を選んで更新する方法もあります。取得できていないサブスクリプションを、唯一のネットワーク接続手段に設定しないでください。
YAMLと最終的なマージ結果を確認する
インデントエラーが出たら、まずログに記録された行番号と前後の内容を確認します。YAMLでは空白で階層を表します。タブ、全角コロン、対応する閉じ括弧のない引用符も解析エラーの原因になります。解析できても、値の型が正しいとは限りません。リストを文字列として書いたり、真偽値を誤った階層に置いたりすると、コアの読み込み時に初めてエラーになることがあります。直近の手動変更を取り消し、部分ごとに戻してください。設定ファイル全体を一度に書き直すのは避けましょう。
mode: rule
proxy-groups:
- name: 出口の選択
type: select
proxies:
- DIRECT
rules:
- MATCH,出口の選択
上の例はリストとインデントの構造を確認するためのもので、出口はDIRECTのみです。実際のサブスクリプションでは、プロキシグループ名とルール内の参照名を、空白や大文字・小文字も含めて完全に一致させる必要があります。プロキシやポリシーグループが見つからないとログに表示された場合は、元のサブスクリプションだけでなく、生成後の実行設定を確認します。クライアントはダウンロード後にオーバーライド、マージ、スクリプト処理を行うことがあり、問題が後処理で発生している可能性もあります。
proxy-providersはプロキシの取得元を定義し、rule-providersはルールセットを定義します。両者の内容形式は異なります。ルールプロバイダーではbehaviorとファイルの内容も確認してください。ドメイン集合、IP集合、classicalルールは、項目を一つ変えるだけでは相互に使えません。リモートリソースごとに異なるパスを設定し、複数のプロバイダーが同じキャッシュファイルに書き込んで更新内容を上書きしないようにします。
「オーバーライドを無効化 → 元のサブスクリプションを更新 → 読み込めることを確認 → オーバーライドを一つずつ戻す」の順に切り分けます。更新できたら、現在有効な設定、プロキシグループのメンバー、ルール数が適切かを確認し、接続を一つ作り直して動作を確認してください。複数端末で同期する場合は、サブスクリプションと端末ごとの設定を区別しましょう。ポートやTUNの権限はそのまま流用できません。詳しくは複数端末の設定同期を比較をご覧ください。
速度が遅い:帯域幅・遅延・負荷を切り分ける
再現可能な比較条件を整える
「速度が遅い」といっても、ページの表示開始が遅い、動画がバッファリングする、ダウンロード速度が出ない、操作がもたつくなど症状はさまざまです。ひとつの基準でまとめて判断できません。端末、ネットワーク、接続先、出口を固定して比較しましょう。初回表示だけ遅く、その後の転送は正常なら、DNS、接続確立、ハンドシェイクを優先して確認します。ダウンロードが継続的に遅い場合は、利用可能な帯域幅、サーバー負荷、接続先の制限を調べます。すべてのノードを何度も速度テストするより、症状を記録するほうが役立ちます。
まず直接アクセスできるリソースでローカルネットワークの基準を確認し、次に同じリソースへプロキシ経由でアクセスします。プロキシ必須の接続先なら、利用できる二つの出口で比較してください。テスト中はOSの更新、クラウドストレージの同期など、大量の通信を行う処理を一時停止します。複数端末で帯域幅を共有していると誤判定につながります。Wi-Fiの電波、ルーターの負荷、モバイルネットワークの混雑はいずれもプロキシより手前の問題であり、クライアントを変えても解消しません。
遅延テストは通信速度のランキングではない
遅延が小さい出口でも、通信量が多いとは限らず、すべてのサイトに適しているわけでもありません。自動選択は通常、テスト用リクエストを基準に判断し、ダウンロード帯域幅を継続測定するものではありません。特定のサイトだけ遅い場合は、そのサイトのCDN、アカウント制限、出口から接続先までの経路を確認します。すべての接続先が遅い場合は、アクセス回線とサーバー全体の状態を調べてください。大容量ファイルを一度ダウンロードした結果だけで、すべてのアプリの使用感を判断しないようにしましょう。
接続履歴で、実際の通信がどのポリシーグループを通ったか確認します。ルールで自動グループを選んでいても、その内部で別の選択グループを参照している場合があります。画面に表示される外側のグループ名が、最終的な出口とは限りません。ポリシーを変更しても、確立済みの長時間接続は以前の経路を使い続けることがあります。対象アプリの接続を閉じるか、該当する接続だけ切断して再試行してください。重要なダウンロードやリモート接続中にすべての接続を切断し、余計な中断を招かないようにしましょう。
DNS、プロトコル、TUNの負荷を確認する
新しいドメインを開くたびに一時停止する場合は、DNSリクエストが何度もタイムアウトしてから別の経路に切り替わっていないか確認します。上流DNSを複数設定しても、自動的に速くなるわけではありません。到達できない上流、誤ったブートストラップ名前解決、不安定な出口経由のクエリなどが、新しい接続を遅らせることがあります。まず現在のネットワークで使える名前解決経路を一つ残して基準を確認し、必要に応じて振り分けを追加してください。キャッシュが有効なのは再度行う問い合わせだけで、初回の名前解決経路を正すことはできません。
ブラウザーがHTTP/3を優先して試し、出口や現在のネットワークでUDPが不安定だと、TCPへフォールバックするまでに一時停止して見えることがあります。比較のため、そのアプリのQUICを一時的に無効にしてもかまいません。ただし、すべてのUDPを恒久的に遮断するのは最適化になりません。音声通話、ゲーム、一部のプロトコルはUDPを必要とします。診断では接続方式と宛先ポートも確認し、遅いリクエストが実際にUDPを通っているかを調べてください。
TUNはより広い範囲の通信を取り込みます。有効にすると、システムプロキシでは対象外だったバックグラウンド通信も扱われる一方、セキュリティソフト、別のVPN、仮想ネットワークインターフェースとルートが競合する場合があります。同じ接続先で「HTTPプロキシを明示」と「TUNで取り込み」を比較してください。前者が正常で後者が遅いなら、サブスクリプションを変えるのではなく、ルートとネットワークスタックを優先して確認します。stackを変更する前に、使用中のコアとプラットフォームが対応していることを確認し、元の値を記録してください。
小さなリクエストは正常なのに、大きなレスポンスが止まる場合は、経路MTUや中間機器の挙動が関係している可能性があります。ただし、まず接続先の速度制限やパケットロスを除外してください。MTUの調整は実際に使うトンネルインターフェースに対して行い、変更前後を比較します。根拠のない数値をすべてのネットワークアダプターに設定しないでください。速度改善のためにファイアウォールを頻繁に無効化するのも避けましょう。具体的なブロック記録を確認し、クライアントに関係するプログラムやインターフェースのルールだけを調整します。
調査の最後に、再現条件を記録してください。同じ接続先・時間帯で二つの出口、二種類の接続回線を試した結果と、TUNの状態を残します。特定のサーバー経路で継続的に問題が起きるなら、これらの情報をプロバイダーに伝えると効果的です。根拠がないままキャッシュを消す、再インストールする、同時接続数を増やすといった操作を、標準の速度改善手順にしないでください。
DNSの問題:名前解決の入口と通信経路を確認
まず、どのコンポーネントが名前解決しているか確認
DNSの問題はコアだけで起きるわけではありません。システムのリゾルバー、ブラウザーのセキュアDNS、アプリ独自のリゾルバー、mihomoのDNSが同時に使われていることがあります。まず失敗したリクエストがクライアントに届いているかを確認し、ログの名前解決エラーを調べます。ブラウザーでは開けるのにターミナルでは失敗する場合、異なる経路で名前解決している可能性があります。ターミナルでは解決できてもブラウザーで失敗するなら、アプリ独自の暗号化DNSに到達できないことも考えられます。一つの確認ツールの結果だけで、すべてのアプリの状態を判断しないでください。
ドメイン名を指定したHTTPプロキシ接続では、通常、名前解決をプロキシ側に任せられます。SOCKSでは、ローカルとリモートのどちらで名前解決するかを区別してください。以下のコマンドではsocks5hを使い、ドメイン名をプロキシ側で解決することで、アプリによるローカルの名前解決と比較します。これが正常でアプリだけ失敗する場合は、システムDNSをすぐ変更せず、アプリの名前解決方法を確認してください。コマンドのポートは実際のmixed-portと一致させます。
curl -I --connect-timeout 10 --max-time 20 --proxy socks5h://127.0.0.1:7890 https://example.com
fake-ipの通常の動作を理解する
enhanced-mode: fake-ipでは、条件に合うドメイン名に仮想アドレスを返し、コアがドメイン名と接続の対応関係を保持します。198.18.0.0/16の範囲のアドレスが表示されても、ただちにDNSの改ざんとは判断できません。重要なのは、そのアドレス宛ての通信が同じコアによって引き続き処理されているかどうかです。仮想アドレスを取得したアプリがプロキシを迂回する場合や、コア再起動後も古いマッピングを使う場合は、接続に問題が起きることがあります。
関連するアプリを終了してからコアを再起動し、今回の問題に関係するシステムまたはアプリのDNSキャッシュを削除して再試行します。Windowsではipconfig /flushdnsを実行できます。その他のOSでは、実際に使われている名前解決サービスに応じて操作してください。キャッシュの保存先が分からないまま、クライアントのデータフォルダー全体を削除しないでください。LAN機器、プリンター、特定の認証ドメインで互換性の問題が起きる場合は、すべてのドメインを除外せず、対象を絞ったfake-ipフィルターを検討します。
dns:
enable: true
listen: 127.0.0.1:1053
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- https://1.1.1.1/dns-query
これはDNS設定の一部にすぎません。上流アドレスには現在のネットワークから到達できる必要があります。1053番ポートで待ち受けても、システムが自動的にそのサービスを使うわけではなく、すべてのDNSリクエストが自動的に転送されるわけでもありません。クライアントのDNS取り込み機能を使うか、接続先を明示してください。nslookup example.com 127.0.0.1で確認できるのはローカルの53番ポートであり、上の例の1053番ポートではありません。digがインストールされている場合は、下のコマンドでポートを指定できます。
dig @127.0.0.1 -p 1053 example.com A
ブートストラップDNSとプロキシ出口の相互依存を避ける
上流にドメイン名形式のDoHアドレスを指定すると、上流への接続前に名前解決が必要です。プロキシサーバーにもドメイン名を使っている場合は、ノード名の解決も必要になります。default-nameserverによるブートストラップ名前解決と、proxy-server-nameserverによるプロキシノードの名前解決を区別してください。まだ確立していないノード経由でノード名を解決する設定は避け、すべての名前解決を検証していない一つの出口に強制しないようにしましょう。
社内ドメインや家庭内LANの名前は、内部DNSでしか解決できない場合があります。パブリックDNSを設定した後にそれらの名前が解決できなくなっても、パブリックDNSの障害とは限りません。内部のレコードを持たないDNSサーバーへ問い合わせが送られている可能性があります。社内DNSの経路を残し、適切なドメインルールで振り分けてください。社内ネットワークの範囲が誤ってプロキシへ送られていないかも確認します。変更前にネットワークから提供されたDNSを記録し、管理設定がある会社支給端末では特に上書きしないよう注意してください。
「DNSリーク」の判断には、想定していた名前解決経路を確認する必要があります。テストページに特定の再帰リゾルバーが表示されても、そのテストドメインが最終的にそのサーバーから問い合わせられたことしか分からず、他の通信がプロキシを迂回している証拠にはなりません。どのドメインをどの経路で解決するかを明確にし、ブラウザーのセキュアDNS、TUNによるDNS取り込み、接続履歴を合わせて確認してください。暗号化DNSは問い合わせの通信を保護しますが、指定したプロキシ出口を使うことまで自動的に保証するものではありません。
システムプロキシが機能しない:アプリの接続方法を確認
システムプロキシはすべての通信を取り込む機能ではない
システムプロキシはアプリに提供されるプロキシ設定であり、実際に使うかどうかはアプリやネットワークライブラリによって異なります。ブラウザーは正常でも、コマンドラインツール、ゲーム、ストアアプリで失敗する場合がありますが、必ずしもルールの問題ではありません。まずプロキシを明示したコマンドでコアの接続口を確認し、次に対象アプリがシステム設定を参照するか調べます。HTTPやSOCKSのアドレスを個別に入力するアプリ、環境変数を使うアプリもあれば、TUNで通信を取り込むほうが適したアプリもあります。一つのスイッチですべてのプロセスが対象になるとは限りません。
Windowsでは、ユーザー向けプロキシ、自動構成スクリプト、WinHTTPの設定はそれぞれ別の接続口です。netsh winhttp show proxyでWinHTTPの状態を確認できますが、使用中のブラウザーの設定を示すものではありません。一つのアプリを直すために、すべてのシステムサービスへプロキシを設定しないでください。サービスアカウント、更新コンポーネント、ユーザーセッションでは必要なネットワークが異なる場合があります。まず失敗するプログラムが使うネットワークライブラリを確認し、適切な設定方法を選びましょう。
ローカルアドレス、ポート、環境変数を確認
ローカルのアプリでは通常、127.0.0.1と実際の待ち受けポートを使います。システムプロキシに古いポートが設定されている場合や、SOCKS専用の欄にHTTPアドレスを入力している場合は接続できません。allow-lan: falseでも、ローカルループバックへのアクセスには影響しません。一方、別の端末から自分自身の127.0.0.1をPCのアドレスとして指定することはできません。LAN内で共有する場合に限り、待ち受けアドレス、ファイアウォール、信頼できる接続範囲を確認してください。
シェルの環境変数は、新しく起動した子プロセスに引き継がれます。クライアントのポートを変更しても、すでに起動しているターミナルには古い値が残ることがあります。システムプロキシを無効にしても、手動設定した環境変数は自動では削除されません。以下はUnix系シェルの現在のセッションで比較する例で、永続設定は変更しません。既存の変数と設定元を確認・記録してからテスト値を設定してください。元に戻す際は、シェルの起動ファイル、開発ツールの設定、プロジェクトのスクリプトから再設定されていないかも確認します。
env | grep -i proxy
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
curl -I --max-time 20 https://example.com
unset http_proxy https_proxy
ここでhttps_proxyの値にhttp://を使っているのは、クライアントがローカルのHTTPプロキシに接続し、その上にHTTPSトンネルを確立するためです。対象へのアクセスを平文にするわけではありません。環境変数の大文字・小文字や優先順位の扱いはツールによって異なります。ALL_PROXYやNO_PROXYも動作に影響することがあります。確認時はこれらの変数も調べ、特に迂回対象のドメインやネットワーク範囲が広すぎないか注意してください。
UWP、コンテナー、TUNのケースを確認
Windowsの一部ストアアプリでは、ループバックアクセスが制限されているため、システムプロキシが正しくてもローカルプロキシに接続できないことがあります。まず通常のデスクトップアプリが同じポートで正常に接続できるか確認し、その後、対象アプリのループバック通信を許可するか、TUNを使うか検討してください。すべてのアプリを一括で許可することを標準手順にしないでください。具体的なコマンドと影響範囲はUWPのループバック制限のトラブル対処をご覧ください。遠隔プロキシの認証設定を変更する必要はありません。
コンテナー、仮想マシン、WSLにはそれぞれ独立したネットワーク環境があり、その内部のループバックアドレスがホストを指すとは限りません。使用中のネットワークモードに応じてホストへ到達できるアドレスを調べ、ファイアウォールと待ち受け範囲を確認してください。最初からローカルプロキシをすべてのインターフェースに公開しないでください。同じネットワーク上の別端末から利用されるおそれがあります。公開が必要な場合は、信頼できる接続元に限定し、クライアントの機能に応じてアクセス制御を設定します。
TUNは仮想インターフェースとルーティング制御によって通信を取り込むため、追加の権限やサービスが必要になることがあります。有効化したら、ログでデバイスの作成、ルートの設定、DNSの取り込み状態を確認します。二つのVPNが同時にデフォルトルートを書き換える場合や、仮想マシンとトンネルのネットワーク範囲が重複する場合、特定の接続先に到達できなくなることがあります。まず他の通信制御プログラムを停止して比較してください。復旧後にルートを明示して共存できるか検討し、ネットワークアダプターの再インストールを繰り返さないようにしましょう。
最後に、対象アプリから新しいリクエストを送り、接続画面でプロセスまたは接続先、適用ルール、出口を確認します。Webページで出口が変わったことだけでは、そのページの経路が正常と分かるだけです。修復後はブラウザー、コマンドライン、以前失敗していたアプリをそれぞれテストします。クライアントを終了した後、システムプロキシ設定が元に戻ることも確認し、停止済みポートへの設定が残らないようにしてください。
クライアントがクラッシュする:画面・コア・設定を切り分ける
まず終了したコンポーネントを特定する
GUI、バックグラウンドサービス、mihomoコアはそれぞれ別のコンポーネントです。ウィンドウが消えても通信できるなら、GUIだけの問題かもしれません。ウィンドウは残っているのに接続がすべて切れた場合は、コアが終了していないか確認します。起動時、設定のインポート時、TUNの有効化時、またはしばらく使用した後のどのタイミングで発生するかを記録し、該当時刻のログを確認してください。「突然終了した」という情報だけでは、解析エラー、権限エラー、プロセスクラッシュ、OSによる強制終了を区別できません。
最初の異常が起きた直後にデータをすべて消去しないでください。クライアントを終了し、設定フォルダー、オーバーライドファイル、必要なログをバックアップしてから、バックグラウンドにプロセスが残っていないか確認します。画面を何度も開くと、二つ目のコアが起動してポート競合が発生し、元の問題が分かりにくくなることがあります。クライアントに「ログフォルダーを開く」や「診断情報」がある場合は、その機能を優先してください。フォルダーのパスはOSやクライアントによって異なるため、別のソフトのパスをそのまま使わないでください。
最小構成でコアを動作確認する
コアの起動とサブスクリプションの内容を分けて確認します。以下の設定はローカルのみで待ち受け、DIRECTルールを使います。プログラムが起動できるかを確認するためのもので、実際のプロキシ設定の代わりにはなりません。元の設定を上書きせず、独立したテストファイルとして保存してください。最小構成が安定し、サブスクリプション全体で失敗する場合は、プロキシプロバイダー、ルールプロバイダー、DNS、TUNを順に戻し、原因となる項目を特定します。
mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
rules:
- MATCH,DIRECT
mihomoを単体で使っている場合は、まず設定のテストを実行できます。以下はカレントディレクトリにコアとテスト用設定がある想定です。GUIクライアントの利用者が、テストのためだけにコアを別途ダウンロードする必要はありません。テストコマンドが成功しても、確認できるのは設定の解析と検査までです。リモートリソースを取得できることや、プロキシに接続できることは保証されません。外部ルールファイルのパス、相対ディレクトリ、実行時の権限は、実際の起動環境で確認してください。
# Linux または macOS
./mihomo -t -f ./config.yaml
# Windows PowerShell
.\mihomo.exe -t -f .\config.yaml
アーキテクチャ、権限、アップグレード後の残留を確認
インストールパッケージがOSとプロセッサのアーキテクチャに合っているか確認してください。ファイルをダウンロードできても、現在のシステムで実行できるとは限りません。コマンドライン用のコアはGUIクライアントのインストーラーではありません。一般ユーザーはまずダウンロードページからClash Plusを選び、プラットフォームの要件に応じて他のクライアントと比較できます。複数クライアントのコアファイルや設定フォルダーを互いにコピーしないでください。GUIが想定する制御インターフェースや起動引数が異なる場合があります。
TUNを有効にしたときやサービスをインストールした後だけ終了する場合は、管理者権限の許可、バックグラウンドサービスの状態、セキュリティソフトのブロック履歴を優先して確認します。macOSではシステムの案内に従い、必要なネットワークコンポーネントを許可してください。Windowsではサービスのインストールが成功しているか確認します。Linuxでは実際の起動ユーザーとデバイス権限を確認してください。設定フォルダー全体に再帰的にすべての権限を与えたり、一つのサービスの問題を隠すためにGUI操作を常に最高権限で実行したりしないでください。
画面起動後に白くなる場合、描画環境やアプリのキャッシュが関係している可能性があります。コアのログが正常なら、プロキシのプロトコルを変更しないでください。まず完全に終了して再起動し、クライアントに対応済みの描画互換オプションがあれば個別に試します。画面のキャッシュをリセットする前にデータをバックアップし、設定まで削除されないか確認してください。システムログのクラッシュ記録から、グラフィックコンポーネントや実行環境の問題かどうか判断できる場合があります。
しばらく動作した後に終了する場合は、決めつけた「正常なメモリ使用量」を基準にせず、システムのメモリ負荷、空きディスク容量、ログの増加を確認します。デバッグログは再現中だけ有効にし、終了後はinfoに戻してください。接続ログを長期間大量に記録すると、容量を消費するだけでなく、アクセス履歴が残ります。特定のリモートルールセットを有効にした場合だけ異常が起きるなら、個人情報を除いた最小再現設定を保存し、発生手順を記録してください。
元のクライアントの保守が終了した場合、同じアーカイブを何度もインストールするより、別のクライアントへ移行するほうが長期利用に適しています。Clash for WindowsやClashX Metaのアーカイブ版は、他のクライアントへ設定をそのまま移せることを意味しません。サブスクリプション、カスタムルール、オーバーライドを個別に移行し、接続確認をしてから旧ソフトを削除してください。手順はmihomoコア対応クライアントへの移行をご覧ください。
モバイル端末の問題:VPN、バックグラウンド動作、ネットワーク切り替え
Android:まずVPNサービスの状態を確認
Androidクライアントは通常、システムのVPNサービスを通じて通信を取り込みます。同じユーザーまたはプロファイルで、別のVPN、一部のローカルフィルター、企業向けセキュリティアプリがこの機能を使用中の場合があります。他の通信制御アプリを停止してから、Clash Plus、Clash Meta for Android、FlClashで再接続し、システムのVPNアイコンと許可状態を確認してください。アプリのホーム画面にあるボタンの色だけで、バックグラウンドサービスが動作中だと判断しないでください。
一部のアプリだけ失敗する場合は、まずアプリの振り分けリストを確認します。除外リストに入っているアプリは、想定どおりプロキシを通りません。選択したアプリだけをプロキシに通す設定では、選択されていないアプリも取り込まれません。Androidの仕事用プロファイルと個人用プロファイルでは、アプリやVPN環境が異なることがあります。個人用プロファイルで正常に接続できても、仕事用プロファイルが同じ経路を使っているとは限りません。問題が起きているアプリのプロファイルを特定し、企業ポリシーの対応が必要か判断してください。
画面ロック後に通信が切れる:省電力とルートの残留を切り分ける
画面表示中は正常で、ロック後に切断される場合は、まずVPNサービスが動作し続けているか確認します。次に、システムがバックグラウンド動作、バックグラウンド通信、自動起動を制限していないか調べてください。Androidはメーカーによって設定の場所が異なります。「設定 → アプリ → 対象のクライアント → バッテリー」からバックグラウンド動作の権限を探し、モバイルデータの制限も確認します。一つずつ変更してロック後に再テストしてください。省電力機能を一度にすべて無効にすると、必要な例外が分からなくなります。
常時接続VPNや、VPNを通らない通信をブロックする設定が有効な場合、サービスが停止すると端末全体がオフラインになることがあります。これは通信遮断ポリシーとサービスの状態が組み合わさった結果であり、ノードが突然使えなくなったとは限りません。一時的に通信を戻す場合も、まずその設定の保護目的を理解したうえで、システムのVPN設定を調整してください。クライアント復旧後に接続を再確認します。詳しい切り分け手順はAndroidのバックグラウンド動作とバッテリー最適化のトラブル対処をご覧ください。
バッテリー消費が多い場合も、アプリのランキングだけで判断しないでください。VPNプロセスは他のアプリのトンネル通信も処理するため、システムの統計ではその通信の一部がVPNに計上されることがあります。使用条件が近い時間帯を選び、画面点灯時間、通信量、ネットワークの種類を比較してから、頻繁なヘルスチェック、サブスクリプションの更新、再接続がないか確認します。アイドル中もログが大量に出る場合は、DNS機能をすべて無効にする前に、同じリクエストが繰り返される原因を探してください。
iOS:トンネルとオンデマンド接続を確認
iOSではダウンロードページからClash PlusのApp Storeページへ移動できます。公式サイトはclashplus.ioです。接続に問題がある場合は、システムのVPN設定とアプリで選択中の設定が一致しているか確認し、他のネットワーク拡張機能が通信を取り込んでいないか調べてください。アプリがバックグラウンドに移っただけでは、トンネルが終了したとは限りません。システムのVPN状態と新しいリクエストの結果を合わせて判断します。
オンデマンド接続が有効だと、ネットワークの変更後にシステムがトンネルを自動的に再確立することがあります。手動で切断してすぐ再接続しても、操作が反映されていないとは限りません。現在のオンデマンドルールと対象ネットワークを確認してください。Wi-Fiでは正常でモバイル通信では失敗する場合は、アプリのモバイルデータ通信の許可を確認し、現在の回線からサブスクリプションと出口にアクセスできるか調べます。モバイル回線の切り替えでは接続元アドレスが変わるため、一部の長時間接続は張り直しが必要です。
ネットワーク切り替え、認証ポータル、LANアクセス
Wi-Fiからモバイル通信に切り替えた後は、ネットワークが安定するのを待ってから対象へ再リクエストしてください。それでも失敗する場合は、設定を削除せず、まずVPNに再接続します。公衆Wi-Fiの認証ページはローカルネットワークや特定のドメインを必要とする場合があります。必要なら一時的にプロキシを停止して認証し、完了後に再び有効にしてください。VPN外の通信が常にブロックされる設定の場合は、前述のVPNポリシーも確認します。トンネルを確立する前に認証リクエストが遮断されないよう注意してください。
スマートフォンからの画面共有、印刷、家庭内サーバーへのアクセスが失敗する場合は、LANアドレスが誤ってリモートへ送られていないか、VPN設定で必要なローカルアクセスが許可されているか確認してください。一台のプリンターのためにすべての通信を直接接続に変更しないでください。対象となるLANアドレスとドメインを記録し、範囲を絞ったルールを設定します。アプリがデバイス検出プロトコルを使っている場合、TCPの宛先を一つルールに追加するだけでは不十分なことがあります。ローカルのブロードキャストやマルチキャストも確認してください。
モバイル端末で問題を再現するときは、OS、接続ネットワーク、画面ロックの前後、VPNが維持されているか、失敗するアプリの範囲を記録します。設定全体を公開して相談しないでください。復旧後は、画面表示中のアクセス、短時間の画面ロック、Wi-Fiとモバイル通信の切り替え、LANアクセスを順にテストします。基本的な内容はトラブルシューティングを、設定を再インポートする場合は入門ガイドの設定手順を参照してください。