1. VPNの起動と外部への接続を切り分ける

「接続済み」と表示されても、クライアントのローカルサービスやVPNトンネルが起動しただけで、ノード、DNS、ルールが正常に動作しているとは限りません。まずClashを停止し、スマートフォン単体でインターネットに接続できるか確認します。その後サービスを起動し、「通信の取り込み → ルールの照合 → ノードへの接続 → 名前解決と接続」の順に確認してください。一度に変更する項目は1つだけにし、復旧の原因が分からなくならないようにしましょう。

  1. クライアントのサービスを停止し、普段直接アクセスできるサイトをブラウザーで開きます。それでも失敗する場合は、Wi-Fi、モバイルデータ、料金の未払い、公共Wi-Fiのログイン認証などを先に確認してください。
  2. Wi-Fiとモバイルデータでそれぞれ試します。片方だけ失敗する場合は、そのネットワークの認証、DNS、ルーティング制限、ノードのポートへの接続を優先して確認してください。
  3. Clashを起動し、同じブラウザーで同じURLにアクセスします。すべてのサイトで失敗するのか、プロキシ経由のサイトだけか、特定のアプリだけかを記録してください。
  4. テスト時刻、使用中の設定ファイル、モード、選択したノードを控え、その時刻のログを確認します。

2. AndroidのVPN権限と競合を確認する

Clash for Androidで設定を選択し、メイン画面に戻ってサービスを起動します。初回起動時にはAndroidのVPN接続リクエストが表示されるので、許可してください。通知バーのVPNアイコンは手がかりになりますが、システムのVPN設定も開き、どのアプリが接続中か確認しましょう。

システム設定で確認する項目

  • 標準的なAndroidでは「設定」→「ネットワークとインターネット」→「VPN」にあります。メーカーによってメニューが異なる場合は、設定画面で「VPN」を検索してください。現在有効な接続が、確認中のクライアントのものか確かめます。
  • 同じAndroidユーザーまたはプロファイルでは、通常、VPNインターフェースを使用できるアプリは1つだけです。他のVPN、ローカルVPN方式のフィルタリングアプリ、パケットキャプチャツールを停止してから、Clashを再起動してください。
  • 該当するVPNの設定を開き、「常時接続VPN」と「VPN接続なしの通信をブロック」を確認します。トラブルの切り分け中は、クライアント停止後にシステムが通信を遮断しないよう、後者を一時的に無効にできます。確認後、必要に応じて元に戻してください。
  • 仕事用プロファイルやアプリの複製機能を使っている場合は、問題のブラウザーとClashが同じプロファイル内にあるか確認してください。個人用プロファイルのVPNが仕事用プロファイルの通信も取り込むとは限りません。

システムの許可ダイアログが表示されない場合は、サービスを停止してから再起動し、システムのVPN一覧に別の有効な接続が残っていないか確認してください。接続ボタンを何度押しても、他のアプリがVPNを使用中の問題は解決しません。

3. 設定ファイル、プロキシモード、ポリシーグループを確認する

「設定」を開き、更新済みで正常に読み込める設定ファイルが実際に有効になっているか確認します。サブスクリプションの更新に成功しても、すべてのノードが使えるとは限りません。また、インポート後に新しい設定へ自動で切り替わるとは限りません。メイン画面で設定名を確認し、「プロキシ」を開いて現在のモードとポリシーグループを確認してください。

モード用途と確認ポイント
ルール / Ruleルールの順に接続先が選ばれます。対象ドメインがどのポリシーグループに一致したか、そのグループ内でどのノードが選択されているか確認してください。
グローバル / Global一時的にすべての通信をグローバルポリシーに振り分けます。グローバルポリシーでDIRECTや利用できないノードではなく、使用可能なプロキシが選択されているか確認してください。
直結 / Directプロキシを使わずに接続します。ローカルネットワークの確認には使えますが、プロキシノードが利用可能かどうかの判断には使えません。

テスト中に自動選択グループが接続先を切り替えないよう、「プロキシ」でノードを手動選択してください。グローバルモードでは接続できてルールモードで失敗する場合は、クライアントをすぐ再インストールせず、ルールとポリシーグループを確認します。どちらのモードでも失敗する場合は、ノード、DNS、VPNによる通信の取り込みを調べてください。

ポリシーグループの最終的な接続先を確認する

設定ファイルにあるグループ名は単なる名称です。たとえば、ある選択グループが別の自動選択グループを参照している場合、最終的なノードは後者で決まります。関連するポリシーを展開し、最終的な接続先まで順に確認してください。DIRECT、REJECT、利用できなくなったノードを誤って選択していないか注意しましょう。ノードを切り替えたら新しい接続で試してください。既存のWeb接続はすぐに新しい接続先へ切り替わらない場合があります。

4. 遅延テストと実際のWebアクセスを分けて確認する

遅延テストの結果が示すのは、テスト先に対するノードの応答だけです。180 msと表示されても、対象サイトのHTTPS接続やログイン、動画のリクエストが成功するとは限りません。タイムアウトも、テスト先自体に到達できない可能性があります。数値だけで接続全体を判断しないでください。

  1. ノードAを手動で選び、クライアントの遅延テストを実行してから、ブラウザーの新しいタブで対象URLを開きます。
  2. ノードBに切り替え、同じ操作を繰り返します。同じ回線でノード名だけを変えるのではなく、できるだけ異なる経路を選んでください。
  3. すべてのノードで失敗する場合は、サービスを停止してWi-Fiとモバイルデータを切り替え、再起動してもう一度試します。
  4. スマートフォンの「日付と時刻」を確認し、自動設定を有効にしてください。端末の時刻が大きくずれていると、TLS証明書の検証に失敗することがあります。

ログのconnection refusedは、通常、接続先または中間機器に接続を拒否されたことを示します。i/o timeoutは応答待ちがタイムアウトしたという意味で、パスワードの誤りとは限りません。サブスクリプション更新後に未知のフィールドやプロトコル関連のエラーが出た場合は、クライアントのコアがその設定に対応しているか確認してください。オリジナルのClashとClash Meta(現在の名称はmihomo)では、対応する設定機能が完全には一致しません。

5. DNSの干渉、プライベートDNS、ブラウザーの名前解決を確認する

ドメインを名前解決できない場合、VPNは接続中のままでノードの遅延も正常に見えるのに、Webサイトが開かないことがあります。まずログにlookup、DNS、no such host、名前解決のタイムアウトがないか確認し、次に設定ファイルのdnsセクションを調べてください。すべてのDNSサーバーを一度に置き換えないでください。

名前解決の経路を順に確認する

  1. Androidの「設定」で「プライベートDNS」を検索します。プロバイダーのホスト名を厳密に指定している場合は、元の値を控えたうえで、一時的に「自動」に変更して比較してください。
  2. ブラウザー独自の「セキュアDNSを使用する」設定を確認してください。ブラウザーがHTTPS経由で独自に名前解決する場合、通常の53番ポートへのDNS干渉を経由しないことがあります。
  3. クライアントのVPN/DNS設定と設定ファイルを確認してください。AndroidクライアントによってDNSの取り込みをアプリの画面で管理する場合も、コアのTUN設定を読み込む場合もあります。YAMLの一部だけを見て、設定が反映済みだと判断しないでください。
  4. 設定を変更したらサービスを停止して再起動し、古いタブを閉じてから試してください。必要に応じてブラウザーも再起動し、既存の接続やアプリのキャッシュによる影響を減らします。

従来のDNSはUDPまたはTCPの53番ポートを使うことが多く、DNS over HTTPSは通常443番ポートを使います。53番ポートだけを横取りしても、暗号化DNSをすべて取り込めるわけではありません。以下は、該当フィールドに対応するmihomoのTUN設定におけるDNS横取り項目の例です。オリジナルのAndroidクライアントにそのまま貼り付けて使える完全な設定ではありません。

tun:
  enable: true
  dns-hijack:
    - any:53
    - tcp://any:53

コアのバージョン、ルーティングの取り込み、dns.enableなど、実際の設定も確認してください。Androidクライアントは独自のVPNサービスで通信を取り込む場合があり、画面上のVPNスイッチとコアのtun.enableを同じものとして扱うことはできません。

fake-ipは名前解決の失敗ではない

fake-ipモードでは、ドメインに対して既定のアドレスプール198.18.0.0/16内のアドレスが割り当てられることがあります。これは仕様上の動作であり、見慣れないアドレスだからといって障害とは限りません。確認すべきなのは、その後の接続も同じコアに取り込まれているかどうかです。fake-ipとredir-hostを切り替えた場合は、サービスと関連アプリを再起動し、古い割り当てや名前解決のキャッシュが使われないようにしてください。

一部のアプリだけで問題が起きる場合は、設定をバックアップしてからモードを比較できます。ただし、redir-hostへの切り替えをあらゆるDNS障害に対する万能な解決策と考えないでください。また、ドメインの代わりにサイトのIPアドレスだけを使ってテストするのも避けましょう。HTTPS証明書や仮想ホストでは正しいドメイン名が必要になることがあります。

6. アプリ別の通信制御とルールの適用状況を確認する

ブラウザーまたは特定のアプリだけが通信できない場合は、まずそのアプリの通信がVPNに取り込まれているか確認してください。Clash for Androidでは「設定」→「アクセス制御」から対象アプリを管理できます。他のクライアントでは「アプリ別プロキシ」などの名称の場合があります。「選択したアプリだけプロキシを使用する」のか「選択したアプリを除外する」のかを確認してください。同じチェック状態でも、モードによって意味が逆になります。

  • 選択したアプリだけプロキシを使用:ブラウザーが選択対象に含まれていないと、システムの直接接続になります。
  • 選択したアプリを除外:チェックしたブラウザーはプロキシを経由しません。誤って選択していないか確認してください。
  • VPN以外の接続をシステムでブロック:アプリの除外ルールと組み合わさると、除外したアプリが通信できなくなる場合があります。システム設定と合わせて確認してください。

次に「ログ」またはクライアントの接続一覧を開き、失敗したページを再読み込みします。接続と適用ルールが記録されていれば、少なくとも該当する通信はコアに届いています。記録がまったくない場合は、まずログレベルを確認し、その後アプリの対象範囲とVPNによる通信の取り込みを調べてください。ノードのパスワードを先に変更する必要はありません。

通常、ルールは上から順に照合され、最初に一致したルールで接続先が決まります。以下の例では、特定のドメインを直接接続し、それ以外の通信をPROXYというポリシーに振り分けます。実際の設定に、このポリシーグループが存在することを確認してください。

rules:
  - DOMAIN-SUFFIX,example.com,DIRECT
  - MATCH,PROXY

失敗した接続がREJECTに一致している場合は、上位のブロックルールを確認してください。意図せずDIRECTになっている場合は、ドメインルール、ルールセット、最後のフォールバック設定を調べます。Webページでは、画像、ログイン、APIが別のドメインを読み込むこともあります。「トップページは開くがログインできない」場合は、失敗したリクエストに対応する接続を確認してください。トップページのドメインにルールを追加するだけでは解決しないことがあります。

7. 画面ロック後に切断される場合は省電力とバックグラウンド動作を確認する

起動直後は正常でも、画面を数分ロックすると失敗し、ロック解除後にクライアントを開くと復旧する場合は、バックグラウンド制限が疑われます。Androidの「設定」→「アプリ」→該当クライアント→「バッテリー」を開き、システムの選択肢に応じてバックグラウンド動作を許可するか、「制限なし」に設定してください。一部のメーカーでは、バッテリー管理で自動起動の許可も必要です。

  1. クライアントのバックグラウンドデータ通信が許可されているか確認してください。データセーバーが有効な場合は、バックグラウンド通信がブロックされていないか確認します。
  2. 「設定」→「通知」で通知の権限を確認してください。常時表示される通知はサービス状態を把握する手がかりになりますが、通知が表示されていてもシステムにプロセスを終了されない保証にはなりません。
  3. まず画面を点灯したままアクセスし、その後5分間ロックしてから再試行します。サービス通知、VPNアイコン、ログが途切れていないか記録してください。
  4. Wi-Fiからモバイルデータへの切り替えと、モバイルデータからWi-Fiへの切り替えをそれぞれ試します。ネットワーク切り替え後だけ失敗する場合は、まずサービスを再接続し、接続が確立し直すか確認してください。

バックグラウンド権限を変更して問題が解消した場合は、不要な例外設定を1つずつ元に戻し、動作に実際に影響する設定だけを維持してください。プロキシクライアントのために端末全体の省電力機能をすべて無効にする必要はありません。

8. 結果から次の確認項目を絞り、再インストールを繰り返さない

テスト結果優先して確認する項目
Clashを停止してもインターネットに接続できないシステムのVPN通信ブロック設定、ネットワーク認証、電波状況、基本的なネットワーク接続。
グローバルでは接続できるが、ルールモードでは失敗する適用されたルール、ポリシーグループの最終選択、ルールセットの読み込み状況。
ノードを変更すると復旧する元のノードの状態、回線の制限、ノードのパラメーター、サーバー側の状態。
特定のアプリだけ失敗するアクセス制御、アプリ独自のセキュアDNS、失敗したリクエストに対応するドメイン。
画面ロック後またはネットワーク切り替え後にだけ失敗するバックグラウンド動作の権限、システムの省電力設定、ネットワーク切り替え後の再接続。

原因を特定できない場合は、失敗の前後約30秒の関連ログを保存し、Androidのバージョン、クライアントのバージョン、コアの名称、ネットワークの種類、プロキシモード、テスト結果を記録してください。「ルールモードでは失敗、グローバルモードでは成功、モバイルデータで再現」のように伝えると、「接続済みなのにネットにつながらない」だけの場合より原因を特定しやすくなります。

設定が古いコアに対応していないと分かった場合は、設定をバックアップしてから、該当プロトコルに対応するクライアントを選んでください。インストール、設定のインポート、初回のVPN許可についてはクイックスタートガイドを参照してください。設定項目やモードについては詳しいドキュメントで確認できます。クライアントを変更する前に、これまでのテスト結果を残しておくと、新しい環境で同じ確認を繰り返さずに済みます。