Android版ClashとVpnService:アプリ・コア・システム権限の違い

AndroidスマートフォンでClash系クライアントを使うには、通常、設定ファイルの読み込み、プロキシコアの起動、クライアントによるシステムVPNインターフェースの確立という3段階が必要です。3つ目の段階で使うのがAndroidのVpnServiceです。これはリモートVPNアカウントをアプリに登録することではなく、すべての通信がプロキシノードを経由するという意味でもありません。

クライアントは仮想ネットワークインターフェースを通じて、VPNの対象となるIP通信を受け取り、コアに渡して処理します。Ruleモードでは、ルールに応じてリクエストをDIRECT、プロキシのポリシーグループ、または拒否ポリシーに振り分けられます。そのため、ステータスバーにVPNアイコンが表示されても、確認できるのはシステムVPNインターフェースが確立されたことだけです。特定のサイトが実際にどの経路を通っているかは、アイコンだけでは判断できません。

  • クライアントは、画面表示、サブスクリプション管理、システム権限の取得、バックグラウンドサービスを担当します。
  • Clashまたはmihomoのコアは、プロトコル接続、ルール判定、DNSなどを処理します。対応する設定項目は、実際に使用しているコアのバージョンによって異なります。
  • VpnServiceはAndroid側の通信経路とサービスのライフサイクルを担当します。サブスクリプションの有効期限やノードの稼働状況は判定しません。

AndroidクライアントのVPNモードは、デスクトップ版でいうTUNモードと同様に仮想インターフェースを使いますが、設定方法は共通ではありません。スマートフォンの通信をVPN経由にするために、デスクトップ版のサービスインストール手順をそのまま使ったり、tun:の設定一式を機械的に追加したりしないでください。

初回接続:VPNの許可画面と接続の競合に対処する

「設定→ポリシー→起動→許可」の順に進める

  1. クライアントの「設定」または「Profiles」画面でサブスクリプションを読み込み、ダウンロードが完了したことを確認して、使用する設定を選びます。
  2. 「プロキシ」または「Proxies」画面を開き、利用可能なポリシーを選択します。初回のトラブルシューティングではルールモードを使い、アプリごとの除外設定は追加しないでください。
  3. クライアントの起動スイッチをタップします。Androidに「ネットワーク接続のリクエスト」などのシステムダイアログが表示されたら、アプリ名を確認して「許可」を選択します。
  4. クライアントに戻り、実行状態、接続ログ、通知を確認します。ブラウザーから新しいリクエストを送信し、ログに該当する接続が記録されることを確認してください。

システムダイアログには、アプリがネットワーク通信を監視できるという説明が表示されます。これはVpnServiceの権限に関する説明です。この権限を許可しても、アプリがすべてのHTTPS通信を自動的に平文で読み取れるわけではありません。ただし、VPNインターフェースに入る通信を処理でき、接続先アドレスや一部のDNS情報を確認できる可能性があります。信頼できるクライアントにのみ許可してください。

許可できないときは、まず画面オーバーレイを無効にする

「許可」ボタンをタップできない場合は、フローティングウィンドウ、ブルーライトカット、画面フィルターなど、画面に重ねて表示するツールを一時的に無効にしてから、接続をやり直してください。一部のシステムでは、画面が覆われた状態での重要な権限操作がブロックされます。会社管理の端末や仕事用プロファイルではVPNが制限されることもあります。管理者からメッセージが表示された場合は、アプリを何度も再インストールせず、管理担当者に確認してください。

通常、同じユーザーまたはプロファイルで同時に接続できるVpnServiceは1つだけです。別のVPN、ローカルVPNを使うファイアウォールやフィルタリングアプリ、パケットキャプチャアプリが、現在の接続を置き換える場合があります。切り分けるには、まずこれらのアプリを停止してからClashクライアントを起動してください。仕事用と個人用のプロファイルでは、システム管理ポリシーによって動作が異なる場合もあります。

Android 13以降は通知の権限も確認

Android 13では通知の実行時権限が導入されました。通知を拒否してもフォアグラウンドサービスが直ちに停止するとは限りませんが、実行中の通知が通知領域に正しく表示されないことがあります。「設定」→「アプリ」→対象のクライアント→「通知」を開き、サービスの動作確認に必要な通知を許可してください。通知の権限とVPNの許可は別々の設定です。

バッテリー最適化除外・バックグラウンド実行・自動起動:それぞれの役割

「バッテリー最適化を無視」「バックグラウンドでの実行を許可」「自動起動」は、それぞれ別の設定です。どれか1つを有効にしただけで、あらゆる状況で接続が維持されるわけではありません。まず各設定の役割を把握し、端末の動作に応じて調整してください。

設定 主な役割 保証されない動作
バッテリー使用量:「制限なし」 アプリに対するバックグラウンドでのバッテリー制限を軽減します。具体的な制御方法はシステムによって異なります。 プロセスが終了しない保証ではなく、使用できないノードを復旧させるものでもありません。
バックグラウンドでの動作を許可 画面を閉じた後も、必要な処理を続けられるようにします。 端末の再起動後に自動接続する設定ではありません。
自動起動/バックグラウンドでの自動起動 一部のシステムイベントをきっかけとするアプリの起動を許可します。 クライアント側にも、起動時の実行や接続復元の機能が必要です。
最近使ったアプリでロック 一部メーカーのシステムで、「すべて消去」によってアプリが終了するのを防ぎやすくします。 Android標準のバックグラウンド実行保証ではなく、強制停止にも対応できません。

設定を変更したら、クライアントを開き直して手動で一度接続してください。システムの「強制停止」を実行した後は、通常、ユーザーがアプリをもう一度起動するまでバックグラウンドでの動作は復旧しません。バッテリー設定を「制限なし」に変えるだけでは、停止したサービスは自動で再接続されません。

主要Android端末でバッテリー最適化を除外する方法

以下は代表的なシステムでの設定例です。すべての機種で同じ項目名が使われているわけではありません。OSのアップデート、地域別のバージョン、メーカー独自のカスタマイズにより、メニューの場所が変わることがあります。見つからない場合は、アプリアイコンを長押しして「アプリ情報」を開き、「バッテリー」「バッテリー使用量」「自動起動」などの項目を探してください。

PixelおよびAndroid 14・15に近い標準Android

  • 「設定」→「アプリ」→「すべてのアプリを表示」→対象のクライアント→「アプリのバッテリー使用量」の順に開きます。
  • 「バックグラウンドでの使用を許可」を有効にします。「制限なし」が表示される場合は、その項目を選んでください。バージョンによっては、バックグラウンド使用の項目を開いてから動作設定を選びます。
  • 同じアプリの「通知」画面を開き、サービス通知が無効になっていないことを確認します。

標準Androidには通常、メーカー端末にあるような「自動起動管理」の一覧はありません。再起動後に接続を復元できるかどうかは、クライアントの起動設定、システムの制限、端末のロック解除状態などによって決まります。

Xiaomi MIUI 14・HyperOS

  • バッテリー設定の一般的な場所は、「設定」→「アプリ設定」→「アプリ管理」→対象のクライアント→「バッテリーセーバー」です。「制限なし」を選択してください。
  • 自動起動の設定は、「設定」→「アプリ設定」→「権限」→「自動起動」の中にあることが一般的です。HyperOSの一部バージョンでは「バックグラウンドでの自動起動」と表示されます。
  • 最近使ったアプリの画面にアプリをロックする機能がある場合は、必要に応じてクライアントのカードをロックすると、手動で一括消去した際に終了するのを防ぎやすくなります。

一部のバージョンでは、アプリのバッテリー設定が「設定」→「バッテリーとパフォーマンス」にあります。対象アプリの詳細画面に表示される設定を確認してください。「他のアプリの上に重ねて表示」は、VPNの動作に必須の権限ではありません。

Samsung One UI 6・7

  • 「設定」→「アプリ」→対象のクライアント→「バッテリー」の順に開き、「制限なし」を選択します。
  • 「設定」→「バッテリー」→「バックグラウンドでの使用制限」を開き、「スリープ中のアプリ」と「ディープスリープ中のアプリ」を確認します。クライアントが登録されている場合は、一覧から削除してください。
  • 「自動スリープさせないアプリ」がある場合は、クライアントを追加してみてください。「制限なし」に設定したアプリの表示方法は、バージョンによって異なることがあります。

省電力モードによって、バックグラウンド通信やシステムの動作が変わる場合があります。省電力モードを有効にしたときだけ問題が起きる場合は、まずモードを無効にして比較し、普段の使い方に合わせた調整が必要か判断してください。

OPPO・OnePlus:ColorOS・OxygenOS

一般的な設定場所は、「設定」→「アプリ」→「アプリ管理」→対象のクライアント→「バッテリー使用状況」または「バッテリー」です。「バックグラウンドでの動作を許可」「自動起動を許可」が表示される場合は、必要に応じて有効にしてください。一部のバージョンでは、「バッテリー」→「その他の設定」→「バッテリー使用量を最適化」からクライアントを選び、最適化の設定を変更できます。

vivo・iQOO・Honor端末

vivo・iQOOのOriginOSでは、「設定」→「バッテリー」→「バックグラウンドでの電力消費管理」から、クライアントのバックグラウンドでの電力消費を許可するのが一般的です。自動起動はiマネージャーの「アプリ管理」→「権限管理」から確認できます。Honor MagicOSでは、「設定」→「アプリ」→「アプリ起動管理」を開き、クライアントの自動管理を無効にしたうえで、必要に応じて自動起動、関連起動、バックグラウンド動作を許可します。バージョンによって項目が統合されている場合があるため、システムの案内に従ってください。

VPNの常時接続・アプリごとのプロキシ・DNSを設定する際の注意点

「VPNの常時接続」は、バックグラウンド実行を維持する設定ではない

システムのVPN設定は、「設定」→「ネットワークとインターネット」→「VPN」にあるのが一般的です。Samsungなどでは「接続」→「その他の接続設定」→「VPN」にあります。クライアントの横にある設定を開き、アプリとシステムの両方が対応している場合にのみ、「VPNの常時接続」を選択できます。システムがVPN接続の維持や復元を試みる機能ですが、アプリがクラッシュしても必ず復旧するわけではありません。

「VPN未接続時の接続をブロック」は、さらに強い制限です。VPNが未接続の間、ネットワーク通信が遮断される場合があります。ホテルや空港の認証ページを使う場合や、動作が不安定な設定をテストしている場合は、まずこの項目を無効にしておくことをおすすめします。有効にする前に、切断、再接続、再起動後の動作を確認し、システムのVPN設定から解除する方法も把握しておいてください。

特定のアプリだけ接続できない場合は、アプリごとの対象範囲を確認

Androidクライアントには、「選択したアプリを除外」または「選択したアプリのみプロキシを使用」といった設定がある場合があります。両者の対象範囲は逆です。前者は選択したアプリを除外し、後者は選択したアプリだけをプロキシ経由にします。ブラウザーは使えるのに別のアプリだけ接続できない場合は、まず一覧の意味を確認し、その後ドメインルールを調べてください。仕事用プロファイルのアプリは、個人用プロファイルのVPNの対象外となる場合もあります。

プライベートDNSとクライアントのDNS設定を混同しない

Androidの「プライベートDNS」は、システム全体のDNS over TLS設定です。一方、クライアント設定のdns:は、プロキシコアとクライアントによる通信の制御方法によって動作が決まります。両者の連携は、DNSルーティング、VPNの実装、アプリ独自の暗号化DNSの有無によって異なります。VPNを有効にすれば、すべてのアプリのDNS通信が必ず同じリゾルバーを経由するとは限りません。

ログにドメイン名の名前解決タイムアウトが表示される場合は、システムのプライベートDNSを指定したホスト名から「自動」に一時変更し、ブラウザー独自のセキュアDNSも一時的に無効にして、1項目ずつ比較してください。原因を特定したら、長期的に使う設定を選びます。暗号化DNSをすべて無効にすることを恒常的な設定手順にしたり、使用中のコアに合わないDNSハイジャック設定をそのままコピーしたりしないでください。

画面ロック後の切断を調べる:アプリ終了・ネットワーク切り替え・ノード障害を切り分ける

「画面ロック後にネットにつながらない」は、あくまで起きている現象です。システムによるアプリ終了、Wi-Fiからモバイルネットワークへの切り替え、ノード接続の失敗、DNSのタイムアウトなど、さまざまな原因でウェブページが開けなくなります。まず状態を確認してから設定を変更すれば、改善しないまま再インストールを繰り返す事態を避けられます。

症状 まず確認する項目 次に行う操作
VPNアイコンが消え、クライアントが停止状態になる アプリの終了、別のVPNによる置き換え、バックグラウンド制限。 バックグラウンド権限と終了前のログを確認し、ほかのVPN関連アプリを一時停止します。
VPNは接続中だが、プロキシのリクエストがタイムアウトする ノードの稼働状況、ネットワークの切り替え、ポリシーグループの選択。 利用可能と確認できている別のノードに切り替え、Wi-Fiとモバイルネットワークの両方でテストします。
一部のドメインだけ開けない DNS、ルールの適用状況、接続先サービスの状態。 該当ドメインの接続ログ、適用されたポリシー、名前解決エラーを確認します。
再起動後は接続されないが、手動起動すると正常 クライアントの起動時実行設定と、システムの自動起動許可。 端末のロックを解除した後の復旧状況を確認し、VPNの常時接続を使うか判断します。

手順を固定して再現し、テスト時間をシステムの保証と考えない

  1. 端末の機種名、Androidのバージョン、クライアントのバージョン、コアのバージョンを記録し、現在の設定画面を保存します。
  2. Wi-Fiに接続した状態でプロキシを起動し、対象のウェブサイトにアクセスします。テスト時刻と現在のポリシーを記録してください。
  3. 画面をロックして10分後に解除し、もう一度新しいリクエストを送信します。この時間は初回テストの目安であり、Android共通のプロセス終了基準ではありません。
  4. 画面ロックを30分間続けるテストをもう一度行い、次にWi-Fiを切ってモバイルネットワークへ切り替えた後の新しい接続を別途テストします。
  5. 各回で変更する項目は1つだけにします。たとえばバッテリー設定だけを変更すれば、その効果を確認しやすくなります。

ネットワークの切り替え時には、VPNサービスが動作中でも既存のTCP接続が切れることがあります。すべての通信を途切れさせないことではなく、新しい接続を開始して復旧できるかどうかで判断してください。

ログを調べるときは、まずtimeout、DNS、network unreachableなどの文字列を検索し、発生時刻と照らし合わせてください。問題を報告する場合は、サブスクリプションURL、アクセストークン、ノードのパスワード、個人のアクセス履歴を削除し、関連するエラーと前後の情報だけを残してください。

Android版Clashのバックグラウンド実行に関するよくある質問

接続するたびにVPNの許可画面が表示されるのは正常?

同じアプリに一度許可すれば、通常は毎回確認する必要はありません。直前に別のVPNを使った、クライアントを再インストールした、プロファイルを切り替えた、または端末の管理ポリシーが変更された場合は、再度許可を求められることがあります。まず画面に表示されたアプリ名を確認し、システムの許可画面をサブスクリプションの更新通知と取り違えないようにしてください。

最近使ったアプリのカードをスワイプで消すと、プロキシも必ず停止する?

必ず停止するとは限りません。標準Androidでは、最近使ったアプリのカードを消す操作とアプリの強制停止は異なり、フォアグラウンドサービスが動き続ける場合があります。メーカー独自のシステムやクライアント独自の終了処理によっても動作は変わります。VPNの状態とクライアントのログを確認してください。接続を維持したい場合は、システムの一括消去を避け、メーカー独自のバックグラウンド管理設定も確認しましょう。

自動起動を有効にしたのに、再起動後に手動接続が必要なのはなぜ?

システムの自動起動許可は、アプリの起動を妨げないための条件にすぎません。クライアント側で起動時の実行または接続の復元機能を実装し、有効にしておく必要があります。また、設定ファイルを読み込める状態でなければなりません。初回のロック解除後に動作を再開する場合もあります。クライアントに必要な機能がなければ、システムの自動起動スイッチだけで自動接続することはできません。

画面を消すと切断される場合、まずサブスクリプションを変更すべき?

まず、クライアントが引き続き動作しているか確認してください。サービスが停止している場合は、バックグラウンド制限やVPNの競合を優先して調べます。サービスが動作中で、同じネットワーク上の複数のノードに接続できない場合は、ネットワークとDNSを確認してください。特定のノードでのみエラーが発生し、別のノードに切り替えると復旧する場合は、ノード側の問題である可能性が高まります。

設定後は、初回の許可が完了すること、画面を離れても新しい接続を確立できること、画面ロック後にリクエストを再開できること、ネットワーク切り替え後に再接続できることを確認してください。すべての権限を一度に有効にするより、4項目を個別にテストした方が問題を特定しやすく、OSアップデート後の再確認にも役立ちます。