Android版Clashの使い方:VpnServiceの許可とバッテリー最適化除外設定

Android版ClashのVpnServiceの仕組みと許可ダイアログへの対処法を解説。主要メーカー別にバックグラウンド維持とバッテリー最適化除外の設定手順を紹介し、プロキシが頻繁に切断される問題を解決します。

まず VpnService、プロキシポート、TUNモードを区別する

Android上のClash系クライアントは通常、システムが提供する VpnService を使ってアプリの通信を取り込みます。ここでいう「VPN」は、Androidのローカルな通信入口を指します。クライアントが仮想ネットワークインターフェースを作成し、通信をClash Meta(mihomo)などのコアへ渡したうえで、設定したルールに従って直接接続、拒否、プロキシノードへの転送を判断します。ステータスバーに鍵やVPNの表示が出ても、システムのVPNインターフェースが接続状態にあることを示すだけで、ノードが利用可能とは限りません。また、すべてのドメインがプロキシ経由になるわけでもありません。

これはHTTPまたはSOCKSプロキシを手動で設定する場合とは異なります。手動プロキシは、通常、プロキシ設定に対応したアプリにしか影響しません。よく使われる待受ポートは 78907891、または設定内の mixed-port です。一方、VpnServiceは一般アプリが発生させるTCP、UDP、DNS通信を受け取れます。Androidクライアント画面の「VPNモード」「サービスモード」「起動」ボタンは、多くの場合このVpnService経路を制御するものです。

項目 適用範囲 主な用途 よくある誤解
VpnService システムが現在のVPNアプリに渡す通信 Androidの日常的な全体通信の取り込みとアプリ別分流 アイコンが表示されてもノード接続を保証しない
HTTP/SOCKSポート そのポートへ接続するアプリ ブラウザーのデバッグ、LAN機器の手動プロキシ設定 すべてのAndroidアプリがシステムプロキシを読み取るわけではない
mihomo TUN コアが作成または管理する仮想ネットワーク通信 透過的な取り込み、UDP、複雑なルーティング クライアントがVPNを管理している場合、別の入口を重ねて有効にしない
アプリ別プロキシ 対象アプリまたは除外アプリを指定 銀行、ゲーム、動画配信を個別に処理 「含める」と「除外する」を間違えると、アプリがプロキシを迂回する

TUN設定とクライアントのスイッチを重複させない

一部のAndroidクライアントは、画面から一元的にVpnServiceを作成し、通信を内蔵コアへ自動的に渡します。一方、設定内の tun セクションを直接読み込めるクライアントもあります。判断はクライアントの説明と実行ログを優先してください。起動後にインターフェース作成失敗、アドレス競合、ルート重複がログに連続して出る場合は、まずクライアントの標準サービスモードに戻し、複数のTUNスイッチを同時に重ねないでください。

mixed-port: 7890
mode: rule
log-level: info
ipv6: true

tun:
  enable: true
  stack: mixed
  auto-route: true
  strict-route: true
  dns-hijack:
    - any:53

上の設定例はmihomoでよく使われる項目であり、すべてのAndroidクライアントで手動追加が必要なわけではありません。特に strict-route、IPv6、DNSハイジャックの方針は、Androidのバージョン、コアのバージョン、クライアントの実装方式に左右されます。最初の切り分けでは、クライアントが生成した標準設定を使い、基本接続を確認してから項目ごとに変更してください。

VpnServiceの許可ダイアログを正しく処理する

初めてサービスを起動すると、Androidがシステム生成の接続リクエストを表示します。通常は「このアプリがVPN接続を設定しようとしています」といった内容です。確認後、アプリは VpnService.Builder を呼び出して仮想インターフェースを作成できるようになります。この許可はアプリ単位の権限であり、サブスクリプションの権限でもノードアカウントへのログインでもありません。許可を拒否してもクライアントは設定の読み込みやノードテストを行えますが、他のアプリの通信を取り込むことはできません。

初回接続の推奨手順

  1. まず有効なサブスクリプションまたはローカル設定をインポートし、設定の解析が完了するまで待ちます。
  2. クライアントでプロキシグループと利用可能なノードを選択します。速度テストの結果がないまま「自動選択」に留めないでください。
  3. 「起動」「接続」「サービスモード」のいずれかをタップし、システムダイアログで「OK」を選択します。
  4. ステータスバーにVPN表示が出たらクライアントのログを開き、コアがローカルポートを待ち受け、ネットワークインターフェースの初期化を完了していることを確認します。
  5. 直接接続されるサイトとプロキシ経由になるサイトにそれぞれアクセスし、ホーム画面の遅延値だけでなく、ルールのヒット記録を確認します。

許可ダイアログがまったく表示されない場合は、まず画面上にフローティングウィンドウ、ブルーライトカットのオーバーレイ、自動タップツール、パスワードマネージャーのオーバーレイがないか確認します。一部のAndroidバージョンでは、別のウィンドウに覆われた安全確認ボタンを押せません。該当するオーバーレイを閉じ、クライアントに戻ってもう一度起動をタップしてください。ボタンがグレー表示の場合は、いったん画面をロックして解除するか、最近使ったアプリからクライアントを閉じて再起動する方法もあります。

許可済みなのに接続できない場合

バッテリー最適化除外がプロキシの安定性に直結する理由

画面を消すと、Androidは段階的にアプリスタンバイやDoze状態へ移行します。バックグラウンド実行、ネットワークアクセス、スケジュールタスク、プロセスの復帰が制限されることがあります。VpnServiceは通常、常駐通知を表示するフォアグラウンドサービスとして動作しますが、メーカー独自のシステムではバックグラウンド終了、自動起動、消費電力制御がさらに適用されます。その結果、鍵アイコンが消える、クライアントのプロセスが終了する、ネットワーク切り替え後にトンネルを再構築できない、通知は残っているのにコアが応答しない、といった症状が起こります。

バッテリー最適化除外は、アプリを常に高負荷で動かすための設定ではありません。画面オフ中やWi-Fiとモバイルネットワークの切り替え時に、必要なフォアグラウンドサービスを維持できるようにするものです。設定後も実際の消費電力を確認してください。通常の待機時の消費電力は、ルール数、DNSクエリ、接続のアクティブ度、UDPセッション、電波状況に左右されるため、単一のパーセンテージだけでクライアントの異常を判断できません。

標準AndroidとPixel

Android 14、Android 15では、「設定」→「アプリ」→「すべてのアプリを表示」→クライアントを選択→「アプリのバッテリー使用量」へ進み、「バックグラウンドでの使用を許可」をオンにし、選択肢で「制限なし」を指定するのが一般的です。バージョンによっては「設定」→「アプリ」→クライアントを選択→「バッテリー」→「制限なし」と表示されます。その後、「設定」→「ネットワークとインターネット」→「VPN」を開き、古い常時接続設定が現在のクライアントに置き換わっていないことを確認します。

Samsung One UI

One UI 6とOne UI 7では、まず「設定」→「アプリ」→クライアントを選択→「バッテリー」→「制限なし」と進みます。次に「設定」→「デバイスケア」→「バッテリー」→「バックグラウンドでの使用を制限」→「自動的にスリープさせないアプリ」を確認し、クライアントをリストに追加します。「ディープスリープ中のアプリ」に入っている場合は、先にそのリストから削除してください。

Xiaomi HyperOSとMIUI

HyperOSでは、「設定」→「アプリ」→「アプリ管理」→クライアントを選択→「バッテリーセーバー」→「制限なし」が一般的な経路です。続いて「設定」→「アプリ」→「権限」→「自動起動」を開き、クライアントの自動起動を許可します。旧MIUIでは、アプリ詳細画面に「自動起動」スイッチが直接表示される場合もあります。最近使ったアプリ画面でのロックは手動終了の可能性を下げるだけで、バッテリー設定やバックグラウンド自動起動の代わりにはなりません。

OPPO、OnePlus、realme

ColorOSとrealme UIでは、メニュー名がバージョンによって変わります。一般的には「設定」→「アプリ」→「アプリ管理」→クライアントを選択→「バッテリー使用量」へ進み、「バックグラウンドアクティビティを許可」をオンにします。さらに「設定」→「バッテリー」→「その他の設定」→「バッテリー使用量を最適化」または「アプリのバッテリー使用量」を開き、クライアントを「最適化しない」に設定します。OnePlusの一部バージョンでは、「設定」→「アプリ」→「特別なアプリアクセス」→「バッテリーの最適化」という経路を使います。

vivoとiQOO

OriginOSでは、「設定」→「アプリと権限」→「アプリ管理」→クライアントを選択→「バッテリー」または「バッテリー使用量の管理」へ進み、「バックグラウンドでの高いバッテリー使用を許可」をオンにするのが一般的です。また「設定」→「バッテリー」→「バックグラウンドでのバッテリー使用量の管理」でクライアントを探し、バックグラウンド実行を許可します。システム管理アプリに「自動起動」リストがある場合は、システムがプロセスを回収した後にサービスを復元できるよう、クライアントを許可してください。

HuaweiとHonor

HarmonyOSでは、「設定」→「アプリとサービス」→「アプリ起動管理」が一般的な経路です。クライアントを見つけたら自動管理をオフにし、「自動起動」「関連起動」「バックグラウンドでの動作」を手動で許可します。Honor MagicOSでも、通常はアプリ起動管理またはバッテリー最適化の画面から設定します。設定後にシステム管理アプリの「ワンタップ最適化」を実行して、これらの権限を再び無効にしないでください。

システム 重要な設定 追加で確認する項目
Pixel / 標準Android アプリのバッテリー使用量→制限なし 常時接続VPN
Samsung One UI アプリ→バッテリー→制限なし 自動的にスリープさせないアプリのリスト
Xiaomi HyperOS バッテリーセーバー→制限なし バックグラウンドでの自動起動
ColorOS / realme UI バックグラウンドアクティビティを許可 バッテリー最適化を「最適化しない」に設定
OriginOS バックグラウンドでの高いバッテリー使用を許可 バックグラウンドでのバッテリー使用量の管理
HarmonyOS / MagicOS アプリ起動を手動管理 自動起動、関連起動、バックグラウンドでの動作

メーカーはシステムアップデート後にメニュー名を変更することがあります。表の手順で入口が見つからない場合は、システム設定上部で「バッテリー最適化」「バックグラウンドアクティビティ」「自動起動」「アプリ起動管理」を検索してください。最終的な目標は3つです。バックグラウンド実行を許可すること、積極的なバッテリー最適化の対象から外すこと、システム再起動やプロセス回収後のサービス復元を許可することです。

固定のテスト手順でバックグラウンド維持を確認する

設定後は2〜3分だけ観察して終わりにしないでください。Androidの待機制限は画面オフからしばらく経って初めて現れることが多く、同じWi-Fiを使い続けるよりネットワーク切り替えのほうが問題を発見しやすくなります。以下の30分テストを行い、各手順でクライアントの通知、VPNアイコン、ログの時刻、実際の通信結果を記録してください。

  1. Wi-Fiに接続してクライアントを起動し、ルールモード、現在のノード、サブスクリプション設定がすべて読み込まれていることを確認します。
  2. 直接接続する対象とプロキシ経由の対象にアクセスし、ログでそれぞれ DIRECT と対応するプロキシグループへのヒットを確認します。
  3. 15分間画面を消し、その間はクライアントを開かないでください。ロック解除後、すぐにウェブページの表示とメッセージの同期をテストします。
  4. Wi-Fiをオフにして4Gまたは5Gへ切り替え、30秒待ってサービスが自動的に接続を再構築するか確認します。
  5. もう一度15分間画面を消してからWi-Fiへ戻し、DNSクエリと新しいTCP接続がどちらも完了することを確認します。
  6. 最近使ったアプリ画面からクライアントをスワイプして閉じ、クライアントの仕様どおりVPNが動作し続けるか確認します。終了操作を停止指示として扱うクライアントもあるため、設定説明を優先してください。

遅延の数値は実際の利用可能性を示さない

ノード一覧の遅延テストは通常、指定されたURLへリクエストを送り、その時点での接続確立時間だけを反映します。ノードが80msと表示されてもウェブページが開けない場合は、DNS、UDP、ルール選択、対象サイトへの接続に問題がある可能性があります。逆にタイムアウトと表示されてもブラウザーが使える場合は、テストURLがノードやネットワークによって遮断されている可能性があります。切断を調べるときは接続ログの時系列を確認し、ネットワーク切り替えの前後にコアの終了、インターフェースの切断、DNSタイムアウト、ノードのないプロキシグループが発生していないかを重点的に見ます。

プロキシが頻繁に切断される場合の段階的チェックリスト

第1段階:Androidがサービスを終了していないか確認する

第2段階:コアの停止とノード障害を切り分ける

ローカルログの更新が止まり、クライアントのホーム画面で通信量を読み込めない場合は、ローカルコアが終了している可能性があります。ログに接続記録が出続けているのに、タイムアウト、接続拒否、TLSハンドシェイク失敗が繰り返し記録される場合は、ノード、回線、サブスクリプションパラメーターの問題である可能性が高いです。この場合はVpnServiceを何度も再起動するより、同じプロキシグループ内の別ノードへ切り替えるほうが診断に役立ちます。

サブスクリプション更新後に突然接続できなくなった場合は、クライアントが設定を再読み込みしていることを確認します。設定ファイル内のプロキシグループが存在しないノード名を参照していると、ルールがグループにヒットした後に利用可能な出口がなくなることがあります。ログではサブスクリプション画面に表示されたノード数だけでなく、実際にヒットしたプロキシグループと最終ノードを確認してください。

第3段階:DNSとIPv6を確認する

「一部のアプリは正常だが、一部のドメインだけ開けない」場合は、まずDNSを確認します。Fake-IPモードでは、クライアントがDNSリクエストを正しく取り込み、ドメインと仮想アドレスの対応を維持する必要があります。システムのプライベートDNS、ブラウザーのセキュアDNS、アプリ内蔵のDoHが想定した経路を迂回することがあります。一時的にAndroidの「設定」→「ネットワークとインターネット」→「プライベートDNS」を「自動」に変更し、クライアントを再起動して再テストしてください。

IPv6も個別に検証してください。モバイルネットワークではIPv6が割り当てられる一方、設定やノードがIPv4しか安定してサポートしていない場合があります。最初からIPv6を恒久的に無効にするのではなく、同じネットワークと同じノードで個別にテストし、ログに記録された宛先アドレスの種類と失敗内容を確認してから、設定内の ipv6、DNS応答方針、TUNルートを調整するか判断します。

第4段階:アプリ別プロキシを確認する

Androidクライアントには、「選択したアプリのみプロキシ」と「選択したアプリを除外」という正反対のモードが用意されていることがよくあります。モードを切り替えた後はサービスを再起動してください。アプリ一覧は通常、VpnServiceインターフェースの作成時に許可または禁止の範囲として書き込まれるためです。特定のアプリだけ通信できない場合は、まず正しいリストに入っているかを確認し、次にそのアプリが仕事用プロファイル、アプリの複製、別のAndroidユーザーで動作していないか確認します。

第5段階:ネットワーク切り替え後の見かけ上の接続を処理する

Wi-Fiからモバイルネットワークへ切り替えると、古い接続が使っていた送信元アドレスは無効になります。クライアントはシステムのネットワーク変更を受け取り、必要な接続を再構築するはずですが、一部の長時間接続はすぐに復旧しません。まず30秒待って新しいウェブページを開いてください。それでも通信がなければ、クライアントで一度停止してから起動します。ネットワークを切り替えるたびに手動再起動が必要な場合に限り、バックグラウンド制限、システムのVPN設定、クライアントログをさらに確認してください。これをノードの遅延問題と決めつけないことが重要です。

安定動作に必要な最小設定

AndroidでClash系クライアントを安定させるために、システム権限をすべて有効にする必要はありません。最低限必要な設定は、VpnServiceのシステム許可を完了すること、アクティブVPNを1つだけにすること、クライアントのバックグラウンド実行を許可して積極的なバッテリー最適化から除外すること、必要に応じて自動起動を有効にすること、常駐通知とフォアグラウンドサービスが正常に動作していることを確認すること、画面オフとWi-Fi・モバイルネットワーク切り替えを固定手順で検証することです。

設定はまずシンプルに保ってください。有効なサブスクリプション、明確なプロキシグループ、読みやすい info ログレベル、クライアント標準のサービスモードで動作を確認し、その後にFake-IP、アプリ別プロキシ、カスタムルール、TUNパラメーターを追加します。頻繁に切断される場合は、「システムプロセス→ローカルコア→ノードと回線→DNSとルーティング→アプリ別の適用範囲」の順に調べると、すべての障害をバッテリー設定のせいにせずに済みます。

Clash をダウンロード プラットフォーム別にクライアントを選択