VPNアイコンが接続済みと言うとき、実際に何を伝えているか
接続アイコンは、一つのアプリのトンネルや一度の検査が成功したことしか意味しない場合があります。範囲を定め、古い読み取りは不明として扱い、ブロックは別に保ちましょう。
緑のVPNアイコンは何かについての主張であり、役に立つ問いはそれが何についてかです。スマートフォンでは、一つのクライアントのトンネル、現在のネットワークのトランスポート、または社内ページへの一度の成功した要求を反映しているかもしれません。これらの観測は異なる情報源から来て、異なる速さで更新され、同じ画面の上で食い違うことがあります。だからこそ、目の前のブラウザが失敗していても、アイコンは健全に見えるのです。
色を読む前に範囲を定めてください、そうしなければ色は誰も尋ねていない問いに答えてしまいます。
アイコンは思っているより狭い問いに答えている
承認済みの個人用トンネルを使う個人用ブラウザなど、宣言した一つの範囲から始めます。仕事用プロファイルのトンネルは個人用アプリについてその問いに答えておらず、アプリごとのVPN設定は、まさにテストしているブラウザを除外しているかもしれません。ローカルのフィルタリングクライアントは、そのトンネルが端末上で終わるため、リモートゲートウェイに何も送っていなくても接続済みと表示できます。
Androidでは、インジケーターの背後にあるネットワークコールバックが、ネットワークのトランスポートと機能を報告します。VPNトランスポートは、どのネットワークがトラフィックを運ぶかを示すもので、どのアプリやアドレスファミリーがそれを使うかではありません。
証拠から状態表を作る
それぞれが背後にある証拠を名指しするなら、三つか四つの状態で足ります。下の列は、表示したい色ではなく、観察できるものから始まり、これにより古い読み取りが成功の主張に変わるのを防げます。
| Signal actually observed | What it establishes | What remains open |
|---|---|---|
| Target client reports an established tunnel | That client believes its tunnel is up, within its own scope | Other apps, other profiles, other address families |
| Active network exposes a VPN transport | Some tunnel carries the current network | Which app it belongs to and where it exits |
| Probe to a private host returned fresh data | One request reached one destination at one time | Everything the probe does not touch |
| Callbacks stopped or data is older than the refresh window | Nothing current is known | Any statement about the tunnel state |
実際に落ちるのは最後の行です。情報源が死んでも最後の値を保ち続けるインジケーターは、履歴を現在のことのように報告し、利用者はそれを生きた状態として読みます。その場合は古い、または不明というラベルを付け、トンネルをほのめかさない言葉を選びます。そして情報源が止まったらすぐにラベルを変えるようにします。
端末が実際に何を報告するかを確かめる
物理的なライトやウィジェットは、最後に確認された良好な状態についての推測ではなく、支えられた観測によって動かすべきです。これらのAndroidコマンドは、何もインストールせずにトランスポートとプラットフォームの常時接続設定を示します。
adb shell dumpsys connectivity | grep -i -A4 vpn adb shell settings get secure always_on_vpn_app adb shell settings get secure always_on_vpn_lockdown adb shell dumpsys netstats | head -40
常時接続のキーは、プラットフォームがトンネルを維持し、それがなければトラフィックを遮断するように設定されているかを示しますが、トンネルが今健全であることは示しません。何かを接続済みとして表示する前に、その設定の読み取りを新しい検査と組み合わせてください。
観測を続けられないなら、表示はそれを言える必要があります。もう動いていない自動化につながったランプは、誰も測っていない状態を主張するため、ランプがないより悪いのです。
警告と強制を切り離す
切断に気づく自動化は出来事の後に発火するので、隙間の間にパケットが逃げるのを止める境界にはなれません。直接のフォールバックを禁じる必要があるなら、プラットフォームの遮断ポリシーを設定し、トンネルを意図的に切って検証してください。インジケーターは報告し、ポリシーは強制します。
遵守を強制するためにインターフェースを無効にする警告タスクは、端末が必要とする再接続からも締め出し、トンネルが二度と戻らず警告も消えないループを作ることがあります。
観測者が不確かなとき表示が何を示すべきかを決め、そのうえで観測者を止めてその場合を試してください。答えがまだ接続済みなら、インジケーターは過去を測っています。