質問
Windows 8 / 8.1 / 10 に搭載されている「Windows 接続マネージャ」という機能のグループポリシー設定項目の 1 つに「インターネットへの同時接続の数の最小化する」という機能があります。このグループポリシー設定項目は、「ローカル グループ ポリシー エディタ」という Windows の標準 GUI で設定できますが、デフォルトでは「未構成」の状態となっています。
「インターネットへの同時接続の数の最小化する」という機能の設定値が「未構成」の状態の Windows 8 / 8.1 / 10 に VPN Client をインストールせずに使用していると、WiFi アダプタと有線 Ethernet インターフェイスが同時に使用できないようになります。
しかし、「インターネットへの同時接続の数の最小化する」という機能の設定値が「未構成」の状態の Windows 8 / 8.1 / 10 に VPN Client をインストールして使用していると、VPN Client でいずれかの VPN 接続を実行した直後から、WiFi アダプタと有線 Ethernet インターフェイスが同時に使用できるようになります。
VPN Client でいずれかの VPN 接続を実行した直後から、このような挙動の変化が生じる理由は何でしょうか。また、このような挙動の変化を生じさせないように設定する方法はありますか。
回答
Windows 8 / 8.1 / 10 に搭載されている「Windows 接続マネージャ」という機能の設定項目の 1 つである「インターネットへの同時接続の数の最小化する」機能には、有効にされている場合、VPN を利用する上で、重大な既知の不具合があります。この不具合は Microsoft 社も把握をしています (KB2919900) が、現時点で解決されていません。
「インターネットへの同時接続の数の最小化する」機能は、1 台のコンピュータに複数の Ethernet インターフェイスが存在する場合、1 個の Ethernet インターフェイスが接続状態になると、他の Ethernet インターフェイスを強制的に切断する機能です。この機能は、複数の Ethernet インターフェイスの方式が異なり、一方が WiFi アダプタ、もう一方が通常の Ethernet インターフェイスである場合に、通常の Ethernet インターフェイスがアクティブなときに WiFi アダプタの通信を強制的に停止するために存在します。これは通常の WiFi アダプタと有線 Ethernet インターフェイスとの相互利用を行う場合には特に問題になりません。しかし、レイヤ 2 VPN ソフトウェアクライアント (SoftEther / PacketiX VPN Client のほか、他のいずれかの VPN クライアントソフトウェア) を用いて、仮想的な Ethernet インターフェイスを作成して利用する場合、副作用が発生します。すなわち、Windows 接続マネージャには、物理的な有線 Ethernet インターフェイスと、仮想的な有線 Ethernet インターフェイスとを、適切に識別する能力がありません。これにより、VPN Client が作成する「仮想 LAN カード」は Windows によって有線 Ethernet インターフェイスとして認識されます。仮に「インターネットへの同時接続の数の最小化する」が有効に設定されており作動する場合、WiFi により物理ネットワークに接続している VPN Client をインストールしたコンピュータは、VPN Client により VPN サーバーに接続した直後から、その VPN 接続が関連付けられている仮想 LAN カードがアクティブになった直後から WiFi を自動的にオフにしてしまいます。WiFi がオフにされると、物理的な通信が失われるため、VPN 通信を行うことができなくなります。この問題は Windows 8 以降に追加された「Windows 接続マネージャ」の「インターネットへの同時接続の数の最小化する」機能において、レイヤ 2 VPN ソフトウェアクライアントにおける仮想的な Ethernet インターフェイスを、例外として取扱う機能が未実装であることに起因しています。
VPN Client は、上記の問題を回避するために、VPN 接続時において「Windows 接続マネージャ」という機能の設定項目の 1 つである「インターネットへの同時接続の数の最小化する」設定が未構成 (コンピュータのユーザーによって、有効 / 無効のいずれにも設定されていない状態) である場合は、「インターネットへの同時接続の数の最小化する」機能を無効にするための API (WcmSetProperty 関数) を呼び出します。これにより、VPN Client は宛先の VPN Server との間の通信が WiFi 経由になる場合であっても、正しく通信をすることができるようになります。
ただし、VPN Client が上記の「インターネットへの同時接続の数の最小化する」機能を無効にするための API (WcmSetProperty 関数) を呼び出した後は、その状態が Windows によって記憶されます。そして、VPN Client を使用していない間においても、Windows は、WiFi アダプタと有線 Ethernet インターフェイスとの両方がアクティブな場合において、両方のインターフェイスを有効なまま通信しようとします。ただし、通常 WiFi アダプタと有線 Ethernet インターフェイスとの両方がアクティブな場合であっても、WiFi のインターフェイスメトリックは大きく、有線 Ethernet インターフェイスのインターフェイスメトリックは小さいため、有線 Ethernet インターフェイスが優先して通信に使用されますので、問題は発生しません。しかし、何らかの理由で、VPN Client が上記の「インターネットへの同時接続の数の最小化する」機能を無効にするための API (WcmSetProperty 関数) を呼び出しさないようにしたい場合または呼出しをしたとしてもその効果を生じさせないようにしたい場合は、以下の 2 つの方法があります。
方法 1: 「インターネットへの同時接続の数の最小化する」機能を明示的に設定する
Windows の標準の設定 GUI には、「インターネットへの同時接続の数の最小化する」機能を明示的に設定する画面があります。コンピュータのユーザーまたはシステム管理者が、この設定を明示的に行っていない場合は、設定値は「未構成」となっています。この設定を明示的に「有効」にすることにより、「インターネットへの同時接続の数の最小化する」機能が強制的に有効になります。
まず、「ファイル名を指定して実行」で「gpedit.msc」と入力します。「ローカル グループ ポリシー エディタ」という Windows の標準 GUI が起動するので、「コンピューターの構成」->「管理用テンプレート」->「ネットワーク」->「Windows 接続マネージャー」->「インターネットへの同時接続の数の最小化する」をダブルクリックします。
次に、設定を「有効」にして「OK」をクリックし、保存します。
なお、コンピュータが Active Directory ドメインに参加している場合、上記の設定はドメインのグループポリシーでも設定可能です。
一部のエディションの Windows には、「ローカル グループ ポリシー エディタ」が搭載されていない場合があります。この場合は、方法 1 は使用できませんので、方法 2 を使用してください。
方法 2: VPN Client が API (WcmSetProperty 関数) を呼び出さないように設定する
VPN Client がインストールされたディレクトリの「vpn_client.config」ファイルをテキストエディタで編集し、「NoChangeWcmNetworkSettingOnWindows8」設定を「false」から「true」に変更します。
なお、「vpn_client.config」ファイルは VPN Client サービスを停止させている間にしか編集できません。また、テキストエディタを管理者権限で開く必要があります。設定ファイルを編集したら、VPN Client を再起動してください。
もし、VPN Client をインストールしてから、1 回以上 VPN 接続を実行したことがある場合は、VPN Client が API (WcmSetProperty 関数) を呼び出したことにより、設定情報が Windows によってレジストリに保存されている場合があります。この場合、レジストリエディタ (regedit.exe) を起動し、「HKLM\SOFTWARE\Policies\Microsoft\Windows\ScmSvc\Local」にある「fMinimizeConnections」値を確認し、「0」になっている場合は「1」に変更して Windows を再起動します。
注意事項:
上記の方法による操作を実施すると、VPN Client は、Windows の「Windows 接続マネージャ」に搭載されている「インターネットへの同時接続の数の最小化する」機能を無効化しなくなります。しかし、「インターネットへの同時接続の数の最小化する」機能が有効になると、KB2919900 で記述されている問題が発生します。SoftEther / PacketiX VPN Client の仮想インターフェイスは、レイヤ 2 Ethernet フレームを送受信することを目的とするため、インターフェイスタイプとして「Ethernet」を報告する必要があります。Windows の「Windows 接続マネージャ」が、VPN Client の作成した仮想 LAN カードを、「インターネットへの同時接続の数の最小化する」機能の処理対象から除外するための何らかの識別方法を Microsoft 社が実装するまでは、本不具合を解決することはできません。