フェイルクローズドが安全な設定で、フェイルオープンが不注意な設定だというのは俗説だ。どちらもトンネルが失われた後に通信がどうなるかを述べたもので、どちらもそのトンネルの暗号化の質を変えるものではない。例外リストが長いフェイルクローズドのポリシーは、オフィスのネットワークから一度も出ない端末では、フェイルオープンのポリシーより多く漏れることがある。通信の持ち主に説明できる結果を選ぼう。

ラベルが表すのは結果であり、強さではない

この言葉は制御システムに由来し、フェイルオープンは構成要素が故障したときに動作を許し、フェイルクローズドはそれを拒む。VPNに当てはめると、故障する構成要素はトンネルであり、問いは通信を別の経路で続行させるかどうかだ。暗号の選択、鍵長、プロトコルは別の決定である。

混乱が続くのは、キルスイッチがセキュリティ機能のように聞こえ、ベンダーがそう売り込むからだ。仕組みとしては、トンネルが運ぶはずだった通信を遮断するルーティングとファイアウォールの規則であり、クライアント内、オペレーティングシステム内、またはゲートウェイ上で実装される。どの層が強制するかがその適用範囲も決め、ある層の規則は別の層を覆わない。ゲートウェイの規則は、すでに別のネットワークへ移動したノートPCを守れない。

それぞれの結果がどう見えるか

同じポリシーでも、どの障害に当たるかによって振る舞いは大きく変わるので、ラベルではなく出来事を比べよう。

EventFail-open resultFail-closed result
Tunnel drops while a transfer runsTransfer continues on the direct pathTransfer stalls until the tunnel returns
Client exits or crashesRules disappear with the processRules persist only if the OS owns them
Device boots before sign-inNormal network accessBlocked until the VPN connects
Captive portal neededPortal loads normallyPortal unreachable without an exception
IPv6 not carried by the tunnelIPv6 traffic leaks directlyLeaks too, unless the block covers IPv6

最後の行は、キルスイッチを一つのスイッチだと思い込む人を捕まえる。IPv4の経路表向けに書かれた規則は、IPv6のデフォルト経路をそのまま残し、アプリケーションは平然とそれを使うことがある。

漏れるかどうかは範囲が決める

どのモードかと問う前に、ポリシーが何を覆うのかを問おう。アプリ単位の規則は一つのアプリだけを守り、端末全体の規則は例外を除くすべてを守り、ゲートウェイの規則はそのゲートウェイに届く通信だけを守る。DNSには独自の判断が必要で、ローカルのリゾルバーに送った問い合わせは、ペイロードが遮断されていても名前を明かすことがある。

ローカルネットワークの例外は、プリンター、画面共有、キャプティブポータルのために存在し、どれも遮断の穴になる。設定を引き継いだ人がフェイルクローズドを絶対だと読み違えるから、ポリシーの隣に記録しよう。

再接続と遮断も別々の制御だ。クライアントは一度も遮断せずに自動再接続することも、再接続せずに遮断することもでき、その組み合わせが障害時の利用者の体験を決める。

移行の最中に証明する

定常状態を試しても何も証明できない。トンネルを意図的に落とし、守られるはずのアプリを試して、それがネットワークに届いたかを確認しよう。クライアントの表示が接続中のままだということは、まさにこのポリシーが存在する理由の場面なので、表示と結果を比べよう。守られたアプリが成功したなら、モードの名前は関係なく、漏れているのだ。

サインイン前のコールドブートから繰り返すこと、Wi-Fiから携帯回線への切り替え時、そして守られたアプリをバックグラウンドに置いた状態で試そう。遮断をクライアントのプロセスが強制しているなら、そのプロセスを正常終了ではなく強制終了したときに何が起きるかも試そう。

最後に、後片付けの経路を確認しよう。規則が有効なままクライアントをアンインストールする場合は、ベンダーが文書化した削除手順を使い、無関係な保護まで外して残った規則の持ち主が誰かという問いに答えないオペレーティングシステムのファイアウォール無効化は避けよう。

関連記事