VPN キルスイッチとは?
VPN キルスイッチは、VPN トンネルが予期せず切断されたときにネットワーク通信を遮断する機能です。この記事では、キルスイッチが実際に何をするのか、OS レベルでどのように実装されるのか、そしてこの機能が正しく動作しているかを確認する方法を解説します。
定義
キルスイッチは、VPN が名目上は有効である間に、保護されていないインターフェースを通じて通信が端末から外へ出ていくのを防ぐ、ネットワークレベルの制御です。VPN トンネルが切断された場合 — ネットワークの変化、サーバーの障害、その他いかなる理由であっても — キルスイッチは、通信が黙ってデフォルトのネットワークインターフェースへ戻ってしまわないようにします。
この機能は「ネットワークロック」「常時オン保護」「インターネットキルスイッチ」と呼ばれることもあります。名称にかかわらず、動作は同じです。
キルスイッチが必要な理由
VPN トンネルは常に完全に安定しているわけではありません。ネットワークの変化 — Wi-Fi からモバイル回線への切り替え、アクセスポイント間の移動、トンネルの通過 — によって接続が一時的に途切れることがあります。サーバーのメンテナンス、断続的なピアリングの問題、まれなプロトコルエラーも切断の原因になり得ます。
キルスイッチがなければ、OS は利用可能なインターフェースを通じて通信を流します。ユーザーから見れば、端末は通常どおり動作し続けているように見えます — ウェブページは読み込まれ、アプリは接続される — しかし通信はいまや VPN ではなく、ローカルネットワークや ISP を経由しているのです。
プライバシーや地域固有のサービスへのアクセスのために VPN に頼っているユーザーにとって、この黙ったフォールバックは VPN を使う目的を台無しにします。キルスイッチは、接続が黙って迂回されるのではなく、停止されるようにします。
実装の仕組み
キルスイッチの実装はプラットフォームによって異なります。大きく分けて 2 つのアプローチがあります。
システムレベルでの実装
VPN を標準でサポートするプラットフォームでは、キルスイッチは OS によって適用されます。iOS では、Network Extension フレームワークが「includeAllNetworks」というオプションを提供しており、適切なルーティングルールと組み合わせることで、トンネル以外のいかなるインターフェースを通じても通信が端末から外へ出ていくのを防ぎます。これはカーネルレベルで適用され、バックグラウンドで動作するものを含むすべてのアプリに及びます。
Linux では、キルスイッチは通常、ファイアウォールルール — iptables または nftables — を使って実装され、VPN サーバーのアドレス宛てのパケットを除くすべての通信を遮断します。このルールはトンネルの確立時に追加され、意図的に切断したときに削除されます。
アプリケーションレベルでの実装
一部の VPN アプリは、アプリ自体の中でキルスイッチを実装し、トンネルを監視して、切断に応じてルーティングやファイアウォールのルールを調整します。アプリケーションレベルの実装はより柔軟ですが、ポリシーを適用するにはアプリが動作し続けていることが前提になります。
システムレベルでの適用は一般により信頼性が高く、VPN アプリがクラッシュしたり終了したりしても動作し続けます。
キルスイッチの種類
キルスイッチは、通信を遮断する厳しさの異なるいくつかのモードで設定できます。
- 常時キルスイッチ。 アプリが起動していないときも含め、VPN が実際に接続されていない間は常に通信が遮断されます。これは最も強力な保証を提供しますが、無効にするには明示的な操作が必要です。
- セッションキルスイッチ。 通信が遮断されるのは、有効な VPN セッションの間だけです。ユーザーが手動で切断すると、キルスイッチは解除され、通常の通信が再開します。
- アプリ単位のキルスイッチ。 一部のデスクトッププラットフォームで利用でき、このモードでは VPN が切断されたときに特定のアプリだけを遮断し、ほかのアプリは通常どおり動作させます。機密データを扱うツールには便利な設定ですが、きめ細かさは複雑さを増します。
キルスイッチが作動する場面
キルスイッチは、OS が通常は障害として扱わないような状況に対処するために設計されています。よくある作動のきっかけには次のものがあります。
- ネットワークの障害やサーバー側のメンテナンスにより、VPN サーバーに到達できなくなる。
- 端末のネットワークインターフェースが変わり — たとえば Wi-Fi からモバイル回線への切り替え — トンネルがすぐに再確立されない。
- プロトコルレベルのエラーによりトンネルが終了する。
- ローカルネットワークが VPN サーバーとの間でパケットを破棄する。特定のキャプティブポータルの場面を含む。
これらの状況のいずれにおいても、キルスイッチは、トンネルが再確立されるか、ユーザーが明示的にキルスイッチを無効にするまで、通信を停止します。
制約
キルスイッチは防御的な機能であり、完全な解決策ではありません。注意すべき制約が 2 つあります。
切り替えは常に瞬時というわけではありません。 トンネルが切断された瞬間からキルスイッチが完全に作動する瞬間までの間に、理論上は通信が漏れる可能性のあるわずかな時間が存在する場合があります。よく設計されたシステムでは、この時間は実用上は無視できるほど短く — 通常は数ミリ秒 — ですが、必ずしもゼロではありません。システムレベルの実装は、アプリケーションレベルのものよりこの時間を確実に閉じます。
DNS 漏洩は別の懸念事項です。 キルスイッチは保護されていないインターフェースを通じて IP 通信が出ていくのを防ぎますが、DNS リクエストはシステムのデフォルト設定を通じてトンネルを迂回することがあります。完全な構成では、キルスイッチとトンネル経由の DNS ルーティングの両方を使います。Snap VPN は既定で両方を構成しています。
動作の確認
キルスイッチは、トンネルの障害をシミュレートし、通信が遮断されることを確認することで検証できます。
- VPN に接続し、IP を表示するサービスにサーバーのアドレスが表示されることを確認します。
- アプリから切断せずに、VPN が使用しているネットワークインターフェースを無効にします — たとえば、トンネルが有効な間に Wi-Fi をオフにします。
- ウェブページを読み込んでみます。キルスイッチが機能していれば、トンネルが再確立されるか、キルスイッチを意図的に無効にするまで、ページは読み込まれないはずです。
iOS では、VPN プロファイルが適切なオプションで構成されている場合、キルスイッチはシステムレベルで適用されます。Snap VPN はキルスイッチを既定で有効にしており、任意の設定として表示しません — この機能は、うっかり無効にできてしまう設定ではなく、標準構成の一部です。
VPN の構成や VPN に何を期待できるかについて詳しくは、 VPN の入門記事と iPhone のセットアップガイドをご覧ください。