チェックボックスがすべての決定に見えますが、Androidではそうではありません。同じチェック済みパッケージでも、包含のみの基準では「このアプリだけがVPNを使う」、選択除外の基準では「このアプリはVPNを迂回する」という意味になります。人はクライアントを入れて「許可されたアプリ」というリストを見つけ、気になるひとつのパッケージにチェックを入れて、逆の動きをするポリシーのまま立ち去ります。クライアントを変えてもほとんど役に立ちません。リストに触る前に基準を選ぶことが役に立ちます。

基準こそがポリシーであり、チェックボックスではない

AndroidのVpnServiceでは、クライアントがaddAllowedApplicationまたはaddDisallowedApplicationでアプリごとのルーティングを設定します。前者はトンネルを一覧のパッケージに限定し、後者はそれ以外のすべてをトンネルに通します。クライアントは両方をほぼ同じに見えるUIで包み、セクション名をモードではなくリストで付けるものもあるため、見出しだけではどちらの基準が有効か分かりません。

リストの上のモードコントロールを読み、見出しを読まないでください。元のOpenVPN for Androidクライアントでは、許可されたアプリのリストに包含のみの基準と選択除外の基準の両方があり、ブランド版は同じふたつの挙動を保ちながら両方を別の言い方にできます。別のクライアントや同じクライアントの古い版のスクリーンショットは、いま自分がどのモードにいるかの証拠にはなりません。

What the client showsWhat a checked app gets
Allowed apps, include-only baselineThe app uses the tunnel; unchecked apps do not
Allowed apps, exclude-selected baselineThe app bypasses the tunnel; everything else uses it
No list configuredClient or profile default, commonly all apps

その表が神話のすべてです。アプリにチェックを入れるのはひとつのパッケージについての表明であり、それを「含める」と読むか「除外する」と読むかは基準が決めます。

まずモード、次にパッケージ

ある基準の下でした選択はモード変更後も残り、効果を静かに反転させることがあるため、この順で進めてください。

  1. 実際のパッケージを特定し、それが個人用か仕事用プロファイルのコピーかを見ます。
  2. 実際に接続するVPNプロファイルのアプリ選択設定を開きます。
  3. 「選択したアプリだけがVPNを使う」という意味の基準を設定します。
  4. 目的のパッケージを含め、無関係なアプリはセットの外に置きます。
  5. 再接続して、クライアントが新しいリストでインターフェースを作り直すようにします。

プロファイルはパッケージと同じくらい重要です。クライアントは複数のプロファイルを持て、アプリごとの選択は実際に接続するプロファイルに属します。使ったことのないプロファイルを編集しても何も変わりません。管理対象デバイスでは、仕事用プロファイルは別のユーザーであり、独自のアプリのコピーと独自のポリシーを持つため、個人用インスタンスがトンネル内にあることは仕事用インスタンスについて何も語りません。

結果を判断する前に再接続する

VpnServiceはトンネルのインターフェースが確立されるときにアプリのリストを読みます。稼働中のトンネルがリストの編集を必ず取り込むとは限らず、自動で作り直すか、切断して再接続するまで待つかはクライアントによって異なります。

変更が何もしていないように見えるなら、リストを疑う前に再接続を試してください。そのうえで、すでに開いていたページを再読み込みするのではなく新しいリクエストを行います。確立した接続を保つアプリはテスト対象として不適切で、見えている結果は古いインターフェースのものかもしれません。

ワークフローはアプリの外に出ることがある

アプリはサインインのためにブラウザへ、文書ビューアへ、共有先へと処理を渡せます。包含のみの基準ではそうしたヘルパーはトンネルの外にあるため、最初のアプリが正しく設定されていてもワークフローが途中で失敗することがあります。ヘルパーはワークフローが本当に必要とするときだけ含め、デモ中に発見するのではなく意図的に追加してください。

アプリごとの選択は接続自体のルートポリシーを置き換えるものでもありません。プロファイルは依然としてアプリが使う宛先プレフィックスとアドレスファミリーを運ぶ必要があり、ゲートウェイは依然としてサービスを許可する必要があります。到達不能な宛先を持つ正しく一覧化されたアプリは、設定を誤ったリストと同じに見えます。

両側をテストしてからポリシーを書き留める

含めたアプリで新しいリクエストをひとつ、外に残すはずのアプリでひとつテストします。出口アドレスとプライベートリソースへのアクセスを比べ、再接続後にもう一度繰り返します。組織がVPNなしの接続をブロックするAndroidのポリシーを使っている場合、除外されたアプリは直接出るのではなく完全にブロックされることがあります。それはポリシーが働いているのであって、回避すべき不具合ではありません。

モード、プロファイル付きのパッケージ名、迂回させるべきアプリ、トンネルが運ぶアドレスファミリー、トンネルが落ちたときに何が起きるべきかを記録します。クライアントがワークフローをきれいに表現できないなら、ルートレベルでファイアウォール規則を編集するのではなく、より広い承認済みアプリセットか管理プロファイルのポリシーを選んでください。ルートレベルの規則編集はAndroidがサポートするアプリ単位の仕組みの一部ではありません。

関連記事