Android の VPN 画面には、名前・鍵アイコン・場合によっては常時接続スイッチを備えた行が 一つ表示されます。エンドポイント、ルートポリシー、DNS サーバー、接続を成立させる認証情報が表示されることはほとんどありません。アプリベースのトンネルでは、それらはアプリに属するからです。実務上の帰結は哲学的な問いではなくランブックの問いです。ダウンロードしたファイルを編集したり、中央のプロファイルストアを探したりする前に、変更したい設定をどのコンポーネントが所有しているかを突き止めてください。

まず接続の種類を特定する

同じ設定画面にも少なくとも 三通りの構成があります。アプリは VpnService を使って仮想インターフェースを構築し、プロトコルと非公開の構成を所有できます。遠隔の出口を持たないローカルなフィルタリングアプリも含まれます。Android は Ikev2VpnProfile を通じてプラットフォームの IKEv2 プロファイルを提供することもでき、これは API 30 から利用可能で、プラットフォームがプロファイルのより多くの部分を保持します。またプロバイダーのアプリは独自のサーバー一覧を提示し、設定を内部で組み立てる場合があります。

adb shell dumpsys connectivity | grep -i -A12 "VPN"
adb shell cmd connectivity list-owners 2>/dev/null || true

最初のコマンドは、有効な VPN ネットワークとそのリンク属性、つまり適用状態を表示します。行に覚えのあるパッケージ名があれば、システム画面ではなくそのアプリ自身のプロファイル表示から始めてください。

所有者とプロファイルの範囲を記録する

何かを変更する前に 四つの事実を書き留めます。所有パッケージ、接続が個人プロファイルと仕事用プロファイルのどちらにあるか、アプリが表示するプロファイル名または接続名、そして誰が管理しているかです。デバイスの所有者は、個人プロファイルのユーザーが編集できない仕事用プロファイルの VPN を用意できますし、同じアプリを 二回インストールすれば 二人の独立した所有者が生まれます。

この手順は、最もよくある 一時間の浪費、つまり接続中のものではないプロファイルを編集する事態を防ぎます。アプリは複数のプロファイルを保持することが多く、有効なものはアプリの属性であり、Android の行の属性ではありません。

要求・受信・適用の状態を比較する

これは 三つの異なる段階であり、その間の不一致が、どのコンポーネントを直すべきかを教えてくれます。

StageWhere to lookWhat it proves
RequestedThe app's profile editor or imported fileWhat the owner intends to use
ReceivedSanitized app log of server-supplied optionsWhat the peer actually pushed
AppliedLink properties and routes after connectWhat the device is really using

適用の段階は、誰かのログを信頼せずに観察できる唯一の段階です。有効なリンク属性の DNS サーバーとルートを、プロファイルが主張する内容と比較してください。異なっていれば、サーバーが何かを送り込んだか、アプリが想定外のポリシーを適用したということです。

adb shell ip addr show tun0
adb shell ip route show table all | head -40

インターフェース名はアプリごとに異なるため、まずインターフェースを一覧し、トンネル接続時に現れたものを読んでください。アプリのエディターにあってここにないルートは適用されておらず、ここにあってエディターにないルートは別の場所から来ています。

所有者が実際に読む成果物を編集する

インポートした OpenVPN プロファイルでは、アプリは通常独自のコピーを保持します。後から元のダウンロードファイルを編集しても次の接続は変わりません。アプリの文書化されたエディターを使うか、再インポートして現在どのプロファイルが有効かを確認してください。これがファイルを変えることと構成を変えることの違いです。

プロバイダーのアプリは、ユーザーが編集できるファイルを書く代わりに、サーバー一覧から設定を組み立てることがよくあります。エクスポートボタンがないことは VPN が偽物である証拠ではなく、エクスポートしたファイルには、別のデバイスが必要とするデバイス紐付けの鍵や登録素材が含まれない場合があります。エクスポートとインポートは、それぞれ固有の前提を持つ別の操作として扱ってください。

秘密を露出せずにサポートノートを書く

役に立つノートは、正確なアプリとプロファイル、誤って見える設定、各段階の証拠を記します。たとえば、このプロファイルはサーバーからプライベート DNS アドレスを受け取っているが、目的の業務アプリはそのサービスを解決できず、適用されたリンク属性はそのリゾルバーを示す一方でプロファイルエディターは別のものを示している、という具合です。

認証情報はノートに載せないでください。所有者を特定するために、デバイスを root 化してアプリの非公開ストレージを探す必要はありませんし、推測したデータディレクトリのパスはサポートされたインターフェースではありません。回答にアプリしか見えないバイトが必要なら、自分で作らずに所有者へ診断用エクスポートを依頼してください。

作業が終わったらループを閉じます。有効なプロファイル名を確認し、適用状態を読み直し、一度切断して変更が再接続後も残ることを検証します。エディターにしか存在しない設定は展開されていません。

関連記事