Mac の VPN 状態:プロファイル、リソース、フローのどれを確認するか
ひとつの真偽値では三つの異なる問いに答えられません。まず対象を決め、実際にそれを報告するインターフェースを使い、失敗の理由も残してください。
VPN が上がっているかどうかを誰かが尋ねるとき、三人の担当者はそれぞれ別のことを意味しています。運用担当者は Office プロファイルの認証が完了したことを意味します。スケジューラはプライベート API が応答することを意味します。セキュリティレビューは、この特定のリクエストが保護された経路を通ったことを意味します。インターフェース名を求めてルートテーブルを grep するスクリプトは、そのどれにも確実には答えません。
だからチェックリストは、どのコマンドを実行するよりも前に始まります。確認の対象に名前を付けることが最初の一歩であり、その後に続くのは、それを実際に報告できるインターフェースを選ぶことだけです。
コマンドの前に対象を名付ける
問いを、対象を持つ述語として書き出します。「Office プロファイルは接続されているか」は検証可能で、答えられる所有者がいます。「このジョブは内部 API に到達できるか」は別の失敗モードを持つ二つ目の述語です。「このリクエストは保護された経路を使うか」は三つ目で、マシン全体ではなく単一のフローについて語る唯一のものです。
これらを混ぜると、自信を持って嘘をつく自動化が生まれます。プロファイルの状態を確認してから API も準備できていると決めつけるジョブは誤った層の人を呼び出し、API に ping してそれをトンネルの証明と呼ぶジョブは、動いている VPN と、たまたま社内ネットワークにいるノート PC を区別できません。
ひとつのプロファイル:それを所有するものに尋ねる
ネイティブの Mac サービスでは、scutil のネットワーク接続コントロールがまさにこれを報告します。インターフェースから何かを推測するのではなく、名前付き構成の状態を読み取ります。
scutil --nc list
scutil --nc status "Office VPN"
そのコマンドのプロファイル名は、一覧の出力にある実在の名前でなければならず、推測ではいけません。これはネイティブサービス向けの読み取り専用の経路であり、サードパーティのクライアントがそこに現れる保証はまったくありません。自前のトンネルを管理するプロバイダーにはそのプロバイダー自身がサポートする状態インターフェースが必要なので、状態呼び出しを書く前に一覧を確認し、名前の欠落が黙って何にも一致しないのではなく目に見えて失敗するようにしてください。
Network Extension アプリの中では、システムからではなくマネージャーと接続のオブジェクトから状態を読み取りますが、ここではスコープに注意してください。保存済み構成を読み込んでも呼び出したアプリが作成したものだけが返るため、空の結果は「自分のものは無い」という意味であり、「この Mac に VPN は無い」という意味ではありません。失敗した問い合わせと確認済みの切断状態を区別し、過渡的な状態はそれ自体の結果として扱い、すでに立ち上がりつつある接続を再試行しないようにしてください。
ひとつのジョブ:準備完了は別の述語
問いが「ジョブを進めてよいか」であるなら、接続の所有者が意図した状態を報告した後で、ジョブの実際の依存関係を検査します。プライベートリソースに対する範囲を限定した準備確認が正しい形であり、ジョブに必要なことを証明し、それ以上は何も証明しません。
それでも、マシン上のすべてのリクエストがトンネルを使っていることは証明できず、できるかのように報告してはいけません。同様に、通常のネットワークで応答するリソースは VPN の証拠ではないため、両方が成功したとしても二つの確認は分けたままにします。
ジョブが本当に保護された経路を必要とする場合、その要件には配備側の強制の設計が要ります。ルーティング、分割トンネルの除外、ファイアウォール規則、あるいはアプリケーション層の要件です。エンドポイントの可用性はサーバーについての事実ですが、強制はクライアントの構成についての事実であり、片方がもう片方を示すことはありません。
ひとつのフロー:選ばれた経路を調べる
単一のフローについては、宛先、アドレスファミリー、送信元のコンテキストを、その特定の宛先に対して選択された経路を報告するルーティング診断で確認します。その出力は実際に使われたインターフェースと送信元アドレスを示し、デフォルトルートの項目よりはるかに強い主張になります。
ブラウザーでの大まかな確認は、まったく別の問いに答えます。公開 IP の結果は、一つのサーバーから見て一つのリクエストがどう見えたかを述べるものであり、プライベート DNS、除外されたアプリケーション、別のプロセスが使っている第二のネットワークコンテキストについては何も言いません。
呼び出し側が使える結果を返す
述語に合った返却の形を選びます。名前付きのプロファイル状態、リソースの準備完了の判定、あるいはそれを生んだ根拠を添えた明示的な不明であり、判定と並べて構成の識別子と失敗の理由も保持してください。
この最後の習慣が、役に立つ自動化と問題を隠す自動化を分けます。「Office VPN:切断、最後の試行は認証で失敗」は運用担当者にどこを見るべきかを伝えます。「VPN が落ちている」は再インストールを促し、「インターフェースが見つかった」は偽の安心を促します。
Network Extension のリファレンス(保存済みトンネル構成の読み込み)は、その上に何かを築く前に呼び出し側アプリのスコープを確認する場所です。