VpnServiceの許可で何が認められるのか
Android版Clashクライアントでプロキシを有効にすると、通常はシステムが提供する VpnService APIを呼び出します。すると「接続リクエスト」または「このアプリがVPN接続の設定を求めています」というダイアログが表示され、ステータスバーには鍵またはVPNのマークが現れます。この許可はサブスクリプションへのログイン権限でも、従来型の企業VPNのアカウント認証でもありません。クライアントが端末内にローカルの仮想ネットワークインターフェースを作成するためのものです。
仮想インターフェースが作成されると、Androidは選択したアプリのIPトラフィックをクライアントへ渡します。Clashのコアは設定内の rules、プロキシグループ、ノードに基づいて出口を決定します。DIRECTに一致した接続は直接アクセスし、プロキシポリシーに一致した接続は選択したノード経由で転送され、REJECTに一致したリクエストは遮断されます。この仕組みはデスクトップ版のTUNモードに近いため、ブラウザーやメッセンジャー、手動プロキシに対応していないアプリもルールによる振り分けの対象にできます。
許可ダイアログで押さえるべき3つのポイント
- 通常、同じユーザー領域で維持できるVPNは1つだけです。システムが会社のVPN、WireGuard、広告ブロッカー、別のプロキシアプリに接続している場合、Clashの起動時に以前の接続が切断されるか、「VPNは他のアプリに使用されています」と表示されます。
- 許可はアプリ単位で記録されます。初回有効化時、クライアントの再インストール後、アプリデータの消去後、または署名の異なるインストールパッケージに変更した後は、システムが再度確認することがあります。
- システムの鍵アイコンは正常な状態を示します。VpnServiceが動作中であることを表しますが、ノードが利用可能だと単独で証明するものではありません。ノードの接続性は、遅延テストと実際のWebページへのアクセスで確認してください。
ローカルVPNとリモートプロキシノードの関係
Androidの設定画面ではこの接続をまとめて「VPN」と表示しますが、VpnService自体が担当するのは端末内でのトラフィック受信だけです。実際のリモート接続は、Clashの設定にあるプロキシノードが確立します。つまり、VPN接続済みと表示されても、仮想インターフェースが作成されたことしか分かりません。サブスクリプションの期限切れ、ノードのタイムアウト、DNS設定の誤り、ルールの選択ミスがあれば、アプリはネットワークに接続できないことがあります。
一部のクライアントには「プロキシのみ」モードや、ローカルHTTP・SOCKSポートも用意されています。よく使われるポートはHTTP 7890、SOCKS 7891、混合ポート 7890ですが、具体的な値は設定ファイルの port、socks-port、mixed-portを確認してください。手動プロキシはそのポートを明示的に使用するアプリだけが対象です。VpnServiceモードは端末全体のトラフィック振り分けに適しています。通信経路を把握しないまま両方を重ねて有効にしないでください。
許可ダイアログと初回接続を正しく処理する
初回起動時の推奨手順
- まず利用可能なサブスクリプションまたはローカルのYAML設定を読み込み、設定を一度更新します。
- プロキシまたはプロキシグループの画面を開き、利用可能なノードを選択します。遅延テストで数値が返ってもすべてのWebサイトにアクセスできるとは限りませんが、完全に応答しないノードを切り分ける材料になります。
- クライアントのホーム画面に戻り、「サービス」「接続」「起動」などのスイッチをオンにします。クライアントによってボタン名は多少異なります。
- システムにVPN接続リクエストが表示されたら、アプリ名を確認して「許可」を選択します。
- ステータスバーにVPNマークが表示されるまで待ち、通常のWebページとプロキシルールが必要なWebサイトにアクセスして、直接接続とプロキシ経由の両方を確認します。
Clash Meta(mihomo)コアを使用するAndroidクライアントでは、動作方式が「VPNモード」「TUN」「サービスモード」と表示されることがあります。名称の重点は異なりますが、最終的にAndroidのVpnServiceを呼び出す場合は、システムにVPN許可が表示されます。一部のバージョンでは、バイパスするアプリ、選択したアプリだけをプロキシする設定、IPv6ルーティング、システムDNSの引き継ぎも指定できます。初回接続ではまず初期値のままにし、基本経路を確認してから一項目ずつ調整してください。
許可してもすぐ切断される場合
まずAndroidのシステムVPN画面を開き、自動再接続する別のVPNがないか確認します。標準Android 14・Android 15では、一般的に「設定」→「ネットワークとインターネット」→「VPN」です。Samsung One UIでは「設定」→「接続」→「その他の接続設定」→「VPN」が一般的です。中国メーカー製のシステムでは、「設定」→「その他の接続」→「VPN」にある場合もあります。以前の接続を切断してから、Clashに戻ってサービスを再起動してください。
他のVPNがない場合、占有の原因は「常時接続VPN」であることが多いです。以前のVPNの横にある設定ボタンを開き、「常時接続VPN」と「VPNなしの接続をブロック」を無効にします。後者はVPNロック、またはVPNなし接続のブロックと呼ばれることもあります。指定したVPNが正常に確立できないとすべてのネットワークを遮断するため、トラブルシューティング中はいったん無効にし、設定が安定してから必要に応じて有効にしてください。
Android 13以降の通知権限
Android 13では実行時の通知権限が導入されました。VpnServiceの許可と通知権限は別々の設定ですが、クライアントは通常、フォアグラウンドサービスとして動作し続けるために常時通知を表示します。初回起動時はクライアントからの通知を許可し、動作状態、現在の送受信速度、停止ボタンを確認できるようにしてください。一度拒否した場合は、「設定」→「アプリ」→「Clashクライアント」→「通知」→「通知を許可」から再度有効にできます。
通知を無効にしてもフォアグラウンドサービスの実行を許可するシステムはありますが、ユーザーが状態を直接確認できなくなります。一方、カスタマイズの強いシステムでは、見えないバックグラウンドタスクをより積極的に制限します。そのため「画面ロック後数分で切断される」場合は、通知権限、省電力設定、自動起動権限をまとめて確認してください。
省電力最適化の除外が接続安定性に影響する理由
Clash Androidの接続中は、仮想ネットワークインターフェース、DNSクエリ、TCPまたはUDPセッション、ノードのハートビートを継続的に維持する必要があります。画面が消えると、AndroidのDozeモードによって通常のバックグラウンドタスクが遅延します。中国メーカー製のシステムでは、アプリの凍結、自動クリーンアップ、バックグラウンド消費電力管理も重なります。クライアントのプロセスが凍結されると、VPNアイコンがしばらく残っていても新しい接続を確立できず、その後システムがVPNを完全に削除することがあります。
典型的な症状と判断材料
| 症状 | 優先して確認する項目 | 判断方法 |
|---|---|---|
| 画面ロックから5~15分後に切断される | バッテリー最適化、バックグラウンド動作 | 画面点灯中は安定し、消灯後に一定時間で切断される |
| 最近のタスクを消去するとすぐ切断される | タスクのロック、自動起動 | タスクを消去しなければ接続は正常 |
| スマートフォンを再起動しても復旧しない | 起動時の自動実行、自動起動 | クライアントを手動で開くと接続できる |
| モバイルネットワークでのみ使えなくなる | バックグラウンドデータ、データセーバー | Wi-Fiは正常だが、4Gまたは5Gに切り替えると通信が止まる |
| VPNアイコンは表示されるがWebページがタイムアウトする | ノード、DNS、コアの状態 | サービスの再起動で一時的に復旧する、またはノード切り替えで復旧する |
除外リストに追加する目的は、クライアントに無制限のリソース使用を許可することではありません。継続的なネットワークサービスを、システムが遅延可能な通常のバックグラウンドタスクと誤判定するのを防ぐためです。通常の待機時の消費電力は、ノードのプロトコル、電波強度、ルールの複雑さ、DNSモード、通信量にも左右されます。電波の弱い4Gで接続を維持すると、安定したWi-Fiより電力を消費することがあります。システムのバッテリー画面に表示される一時的な順位だけで判断しないでください。
Android共通の設定チェックリスト
- 「設定」→「アプリ」→「Clashクライアント」→「アプリのバッテリー使用量」で、「制限なし」または「バックグラウンド使用を許可」を選択します。
- 「設定」→「アプリ」→「特別なアプリアクセス」→「バッテリー最適化」で「すべてのアプリ」に切り替え、クライアントを見つけて「最適化しない」を選択します。
- 「設定」→「アプリ」→「Clashクライアント」→「モバイルデータとWi-Fi」でバックグラウンドデータを許可し、必要に応じて「データ使用量を制限しない」も許可します。
- クライアントの通知を有効にし、フォアグラウンドサービスの常時通知を表示したままにします。
- システムに自動起動または関連起動の権限がある場合は、クライアントの自動起動を許可します。
- 最近のタスク画面でクライアントをロックし、ワンタップのクリーンアップでプロセスが終了しないようにします。
メニュー名はAndroidのメジャーバージョンやメーカー独自システムの更新によって変わります。入口が見つからない場合は、システム設定上部で「バッテリー最適化」「自動起動」「バックグラウンド動作」「制限なし」を直接検索してください。設定後は少なくとも20分間画面をロックし、Wi-Fiとモバイルネットワークの両方でテストします。VPNアイコンだけを確認しないでください。
Xiaomi、Huawei、OPPO、vivoなどの設定手順
Xiaomi HyperOSとMIUI
- 「設定」→「アプリ設定」→「アプリ管理」→Clashクライアントを選択→「省電力」を開き、「制限なし」に設定します。
- 「設定」→「アプリ設定」→「権限管理」→「自動起動管理」を開き、対象クライアントを有効にします。
- 最近のタスクを開き、クライアントのカードを上にスワイプするか長押しして、鍵アイコンでタスクを固定します。ホーム画面によっては、カードを下に引いてから鍵をタップする場合もあります。
- アプリ詳細画面の「データ使用量」で、WLAN、モバイルデータ、バックグラウンド通信がすべて許可されていることを確認します。
HyperOSの一部バージョンでは、省電力の入口が「設定」→「バッテリーとパフォーマンス」→「アプリのインテリジェント省電力」にあります。画面ロック後もシステムがサービスを終了する場合は、この画面で対象アプリが「制限なし」になっていることを再確認し、アプリに対するバックグラウンド動作の一時停止を無効にしてください。
Huawei HarmonyOSとEMUI
- 「設定」→「アプリとサービス」→「アプリ起動管理」を開きます。
- Clashクライアントを見つけ、「自動管理」を無効にします。
- 表示された手動管理項目で、「自動起動を許可」「関連起動を許可」「バックグラウンド動作を許可」を有効にします。
- 「設定」→「バッテリー」→「その他のバッテリー設定」を開き、スリープ中のネットワーク接続に関する項目を確認します。
- 「設定」→「モバイルネットワーク」→「データ通信管理」→「アプリのネットワーク接続」を開き、クライアントのモバイルデータとWLANの使用を許可します。
「自動起動を許可」だけを有効にして「バックグラウンド動作を許可」を有効にしていない場合、クライアントは画面ロック後も凍結されることがあります。3つの権限をまとめて確認してください。システム管理アプリのワンタップ最適化で省電力の警告が再表示されることもあります。システム更新後はアプリ起動管理を再確認することをおすすめします。
OPPO ColorOSとOnePlus OxygenOS
- 「設定」→「アプリ」→「アプリ管理」→クライアントを選択→「バッテリー使用量管理」を開きます。
- 「フォアグラウンド動作を許可」「バックグラウンド動作を許可」「自動起動を許可」を有効にします。バージョンによっては「アプリの自動起動を許可」と表示されます。
- 「設定」→「バッテリー」→「その他の設定」→「バッテリー使用量を最適化」を開き、クライアントを見つけて「最適化しない」を選択します。
- 最近のタスクでクライアントカードの右上にあるメニューをタップし、「ロック」を選択します。
- アプリの「データ使用量」画面で、バックグラウンドのモバイルデータを許可します。
ColorOSの「消費電力の自動最適化」は、アプリを長時間使わないとバックグラウンド権限を再び厳しくすることがあります。数日おきに切断が再発する場合は、サブスクリプションを何度も削除・再追加する前に、バッテリー使用量管理が引き続きバックグラウンド動作を許可しているか確認してください。
vivo OriginOSとFuntouch OS
- 「設定」→「アプリと権限」→「権限管理」→「自動起動」を開き、クライアントを有効にします。
- 「設定」→「バッテリー」→「バックグラウンド消費電力管理」を開き、クライアントを選択して「バックグラウンドでの高消費電力を許可」に設定します。
- 最近のタスクを開き、クライアントカードを見つけて「ロック」を選択します。
- 「iマネージャー」→「データ通信管理」→「ネットワーク接続管理」を開き、WLAN、モバイルデータ、バックグラウンド通信を許可します。
「バックグラウンドでの高消費電力を許可」は、vivoシステムで特に重要な項目です。性能モードのように見える名称ですが、実際には継続的に動作するネットワークサービスを画面ロック後も実行させる設定です。自動起動だけを設定しても、実行中のVpnServiceがバックグラウンドポリシーで停止されることがあります。
Honor MagicOS
- 「設定」→「アプリ」→「アプリ起動管理」を開きます。
- クライアントの自動管理を無効にし、自動起動、関連起動、バックグラウンド動作を手動で有効にします。
- 「設定」→「バッテリー」→「その他のバッテリー設定」を開き、スリープ中のネットワーク接続設定を確認します。
- アプリ詳細の「データ使用量」でバックグラウンドデータを許可します。
MagicOSのアプリ起動管理は、一部のEMUIバージョンと似た仕組みです。システム更新後にサービスが頻繁に終了する場合は、この画面を再度開いて手動管理の状態を確認してください。システム移行やアプリの再インストールで初期設定に戻ることがあります。
Samsung One UI
- 「設定」→「バッテリー」→「バックグラウンド使用量の制限」→「自動的にスリープしないアプリ」を開き、Clashクライアントを追加します。
- 「設定」→「アプリ」→クライアントを選択→「バッテリー」を開き、「制限なし」を選択します。
- 「設定」→「接続」→「データ使用量」→「アプリによるデータ使用を許可」を開き、バックグラウンドデータが利用可能であることを確認します。
- 「設定」→「接続」→「その他の接続設定」→「VPN」を開き、常時接続になっている他のVPNがないか確認します。
アプリごとのプロキシ、DNS、バックグラウンド切断を連動して確認する
まずアプリごとの適用範囲を確認する
多くのAndroidクライアントでは、「選択したアプリをバイパス」または「選択したアプリのみプロキシ」を設定できます。2つのモードの意味は正反対です。前者ではリスト内のアプリが直接インターネットへ接続し、後者ではリスト内のアプリだけがVpnServiceに送られます。ブラウザーはアクセスできるのに特定のアプリだけ常に直接接続される場合は、まずそのアプリが除外されていないか確認し、すぐにルールファイルを変更しないでください。
システムコンポーネントもログインやプッシュ通知に影響します。たとえば外部ブラウザーでOAuthログインを行うアプリでは、メインアプリがプロキシ経由、ブラウザーがバイパスという状態になると、ログイン画面とコールバックが異なるネットワークを通ることがあります。トラブルシューティングでは一時的にアプリごとのフィルタリングを無効にして、すべてのアプリをVPNに通してください。正常に動作することを確認してから、バイパスリストにアプリを一つずつ追加します。
VPN接続済みなのにドメインが開けない
まずIPアドレスとドメインを分けてテストします。ノードの遅延値が取得でき、IP接続は正常なのにドメインへのリクエストがタイムアウトする場合は、DNSを重点的に確認してください。mihomoコアでは、設定項目として dns.enable、nameserver、fallback、enhanced-mode、fake-ip-rangeなどがよく使われます。YAMLのインデントは統一し、リスト項目の前にあるハイフンも省略しないでください。
dns:
enable: true
ipv6: false
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:
- 1.1.1.1
- 8.8.8.8
ここでは項目の構造だけを示しており、すべてのネットワークで同じDNSを固定使用することを意味しません。サブスクリプション提供元が完全なDNSセクションを指定している場合は、そちらの設定を優先して残してください。Androidの「プライベートDNS」がクライアントによるDNS引き継ぎと干渉することもあります。名前解決に異常がある場合は、「設定」→「ネットワークとインターネット」→「プライベートDNS」を開き、「自動」に変更して比較テストを行ってください。
システム情報でプロセス終了の有無を確認する
パソコンでデバッグできる環境があれば、ADBでVPNとプロセスの状態を確認できます。まず開発者向けオプションでUSBデバッグを有効にし、次のコマンドを実行します。Androidのバージョンによって出力項目は変わりますが、現在のVPNパッケージ名、フォアグラウンドサービス、プロセスが残っているかを重点的に確認してください。
adb shell dumpsys connectivity
adb shell dumpsys activity services
adb shell dumpsys deviceidle
adb shell pidof クライアントのパッケージ名
画面ロック前に pidofがプロセス番号を返し、ロック後に空の値を返す場合は、通常、システムによってプロセスが終了されています。プロセスとVPNインターフェースが存在するのに通信量が増えない場合は、ノードセッション、DNS、またはコアのログを確認してください。ログに timeoutが出ている場合は接続タイムアウトを示すことが多く、設定の解析エラーが出ている場合はYAMLの項目とインデントを見直します。
安定動作の設定と日常の確認
許可と除外リストの設定が終わったら、決まった手順で一度テストします。Wi-Fiに接続してサービスを起動し、Webページにアクセスします。20分間画面をロックしてから再度テストします。4Gまたは5Gに切り替え、30秒待ってからテストします。最近のタスクからクライアントに戻り、サービス状態と通信量カウンターが更新されていることを確認します。4つの手順がすべて正常なら、VpnService、バックグラウンド権限、ネットワーク切り替えは概ね安定しています。
維持を推奨するシステム権限
- VPN接続の許可。ローカルの仮想ネットワークインターフェースを作成するために使用します。
- 通知権限。フォアグラウンドサービスの状態と操作を表示するために使用します。
- バックグラウンド動作とバッテリー最適化の除外。画面ロック中も接続を維持するために使用します。
- 自動起動権限。システム再起動後、クライアントの設定に従ってサービスを復元するために使用します。
- バックグラウンドデータ権限。モバイルネットワークやデータセーバー使用中も通信を継続するために使用します。
不安定なときにすべての項目を同時に変更しない
一度に変更する項目は1つだけにし、テスト時刻を記録します。まず他のVPNを停止し、次にバッテリーを「制限なし」に設定して画面ロックをテストします。それでも切断される場合に、自動起動とタスクのロックを有効にします。ネットワークは使えるのに一部のWebサイトだけ異常な場合は、ルールとDNSを確認し、システム権限をさらに重ねて変更しないでください。これにより、バックグラウンドプロセスの停止、ノード障害、設定ミスを切り分けられます。
クライアントの更新、システムのメジャーアップデート、再インストール後は、VPN許可、通知、バッテリー設定、自動起動の状態を再確認してください。Androidは一部の権限を保持する場合もあれば、新しいアプリとして再管理する場合もあります。サブスクリプションの更新で通常はシステム権限は変わりませんが、プロキシグループ名、DNSセクション、ルールの順序が変わることがあります。更新後に特定のアプリだけ異常になった場合は、まず設定の変更点を比較してください。
安定動作の要点は4つです。現在のClashクライアントだけがシステムVPNを使用する状態にすること、フォアグラウンドサービスの通知を許可すること、クライアントをバッテリーとバックグラウンド動作の除外リストに追加すること、Wi-Fi・モバイルネットワーク・画面ロックの各状況を個別に確認することです。VPNアイコンは出発点にすぎません。継続的な通信、正しい振り分け、安定した名前解決が最終的な確認基準です。