MENU

MillenVPN OpenConnectで「接続済みなのにIPアドレスが変わらない」ときの対処法【Windows10】

本記事には広告・アフィリエイトリンクが含まれます。
MillenVPNのOpenConnectトラブル

MillenVPN Native OpenConnectをWindowsで設定したところ、OpenConnect-GUI上では正常に接続できているように見えるのに、IPアドレス確認サイトを見ると普段使っているプロバイダのIPアドレスのままでした。

最終的には、Windows側でOpenConnectが利用するJavaScriptの実行環境に問題があり、VPN接続後のネットワーク設定が適用されていないことが原因でした。

この記事では、実際に行った切り分けから解決までを順番にまとめます。

※掲載しているログやコマンド結果は、グローバルIPアドレス、ユーザー名、認証情報、接続先ホスト名、ユーザーディレクトリなど、環境を特定できる情報を削除・置換しています。

目次

症状:OpenConnectは接続済みなのにIPアドレスが変わらない

OpenConnect-GUIからMillenVPN Native OpenConnectへ接続すると、画面上ではVPN接続が成立していました。

ログにも、

CSTP connected
Established DTLS connection

と表示されます。

ところが、IPアドレス確認サイトを開いても、表示されるのはVPNサーバーのIPアドレスではなく、普段利用しているインターネット回線のIPアドレスでした。

つまり、

VPNサーバーとの接続自体は成立しているのに、Windowsのインターネット通信がVPNへ流れていない

という状態です。

Windows側のVPN設定を別途行う必要はない

最初に疑ったのが、Windowsの

「設定」→「ネットワークとインターネット」→「VPN」

でも別途VPN接続を作る必要があるのか、という点でした。

しかし、MillenVPN Native OpenConnectをOpenConnect-GUIから利用する場合、Windows標準のVPN接続を別途作成する必要はありません。

OpenConnect-GUI自身がVPN接続を確立し、仮想ネットワークインターフェース、IPアドレス、DNS、ルーティングなどを設定します。

そのため、今回はOpenConnect側の処理を調べることにしました。

route print でVPNに通信が流れているか確認

まずWindowsで次のコマンドを実行しました。

route print -4

見るポイントはIPv4のルーティングテーブルです。

通常のインターネット接続では、次のようなデフォルトルートがあります。

Network Destination    Netmask        Gateway          Interface
0.0.0.0                0.0.0.0        192.168.x.x      192.168.x.x

これは通常のLANルーターへ通信を送る経路です。

VPNによって全通信をトンネルへ流す場合、OpenConnectの実装や設定によっては、これとは別にVPN側のルートが追加されます。

今回の環境ではVPN接続後も通常回線側のルーティングしか確認できず、OpenConnectによるVPN経路が作成されていませんでした。

これで、IP確認サイトだけの問題ではなく、実際にWindowsの通信がVPNを通っていないことが分かりました。

TAPアダプターを確認する

次にPowerShellでネットワークアダプターを確認しました。

Get-NetAdapter

環境には、

TAP-Windows Adapter V9

が存在し、ステータスもUpでした。

つまり、OpenConnectが使用する仮想ネットワークアダプター自体はインストールされています。

続いて対象インターフェースのIP設定を確認します。

Get-NetIPConfiguration -InterfaceIndex <インターフェース番号>

するとIPv4アドレスが、

169.254.x.x

になっていました。

これは重要なポイントでした。

169.254.x.x が割り当てられていた

169.254.x.x は、Windowsが正常なIPv4アドレスを取得できなかった場合などに自動的に割り当てるAPIPAアドレスです。

VPN接続後の仮想インターフェースにこれが付いているのであれば、OpenConnectからVPN用IPアドレスが正常にWindowsへ設定されていない可能性があります。

さらに、

Get-NetRoute -InterfaceIndex <インターフェース番号> -AddressFamily IPv4

を確認しても、VPN通信に必要なルートが作られていませんでした。

ここまでで、

VPNサーバーとの通信
        ↓
接続成功
        ↓
仮想アダプターも存在
        ↓
VPN用IPアドレスがWindowsに設定されていない
        ↓
VPN用ルートも作成されていない
        ↓
通常回線からインターネットへ接続

という状態であることが分かりました。

OpenConnectのログではVPN用IPが払い出されていた

ここでOpenConnect-GUIのログを詳しく確認しました。

ログには次のような情報がありました。

Got CONNECT response: HTTP/1.1 200 CONNECTED
X-CSTP-Address: 10.x.x.x
X-CSTP-Netmask: 255.255.255.0
X-CSTP-DNS: xxx.xxx.xxx.xxx

CSTP connected
Established DTLS connection

ここで非常に重要なのが、

X-CSTP-Address: 10.x.x.x

です。

MillenVPN側からはVPN内で利用するIPアドレスが正常に払い出されています。

つまり、

MillenVPNサーバーからIPアドレスを受け取るところまでは正常

でした。

問題は、その情報をWindowsのネットワーク設定へ反映する処理にあります。

OpenConnect-GUI v1.5.3でエラーを確認

当初使用していたOpenConnect-GUIはv1.5.3でした。

ログの最後に次のエラーが出ていました。

Could not open %LOCALAPPDATA%\Temp\vpnc.log: 5

VPNサーバーとの接続そのものは成功しているにもかかわらず、その後のWindows側の処理で問題が発生しています。

そこでOpenConnect-GUIを新しいバージョンへ更新しました。

v1.6.2へ更新したところ原因がさらに明確になった

OpenConnect-GUI v1.6.2へ更新して再接続すると、ログの内容が変わりました。

VPN接続は引き続き正常です。

CSTP connected
Established DTLS connection

一方で、その直後に次のエラーが出ました。

Script 'C:\Program Files\OpenConnect-GUI\vpnc-script.js' returned error 1

Failed to spawn script 'C:\Program Files\OpenConnect-GUI\vpnc-script.js'

さらに、

Could not open %LOCALAPPDATA%\Temp\vpnc.log

も表示されます。

ここでvpnc-script.jsが正常に実行されていないことが分かりました。

vpnc-script.jsとは何か

OpenConnectでは、VPNトンネルを確立するだけでなく、その後Windows側へ、

  • VPN用IPアドレス
  • サブネットマスク
  • DNSサーバー
  • ルーティング

などを設定する必要があります。

その処理を担当しているのがvpnc-scriptです。

Windows版OpenConnect-GUIではJavaScript形式の

vpnc-script.js

が利用されています。

今回VPNサーバーとの接続は成功していたにもかかわらずIPアドレスが変わらなかったのは、このスクリプトが正常に動いていなかったためでした。

cscriptで直接実行してみる

そこでコマンドプロンプトからvpnc-script.jsを直接実行してみました。

cd "C:\Program Files\OpenConnect-GUI"
cscript vpnc-script.js

すると次のエラーが表示されました。

入力エラー: ファイル拡張子 ".js" を持つスクリプト エンジンはありません。

ここで原因がほぼ確定しました。

Windowsが.jsファイルをWindows Script HostのJScriptとして実行できない状態になっていました。

.jsの関連付けを確認

Windowsのレジストリで.jsの関連付けを確認します。

管理者権限のコマンドプロンプトで、

reg query HKCR\.js /ve

を実行します。

正常な環境では、.jsに対してJScript用のファイルタイプが関連付けられています。

今回の環境ではこの関連付けが正常ではなく、cscriptがJavaScriptエンジンを見つけられない状態になっていました。

.jsの関連付けを修復

管理者権限のコマンドプロンプトから、.jsの関連付けを修復しました。

reg add HKCR\.js /ve /d JSFile /f

その後、OpenConnect-GUIを完全に終了してから再起動し、MillenVPN Native OpenConnectへ接続します。

すると、それまで通常回線のままだったグローバルIPアドレスがVPN側のIPアドレスへ切り替わりました。

問題は解消しました。

※この操作はWindowsの.jsファイル関連付けを変更します。reg query HKCR\.js /veで現在の状態を確認し、同じ症状・状態であることを確認したうえで実行してください。

今回の原因

今回の原因をまとめると次の通りです。

OpenConnect-GUIはMillenVPNのVPNサーバーには正常に接続できていました。

サーバーからVPN用IPアドレスも正常に払い出されています。

しかしWindows側で、

vpnc-script.js

を実行できませんでした。

そのため、

VPN接続成功
↓
VPN用IPを取得
↓
vpnc-script.jsの実行に失敗
↓
仮想NICへIPを設定できない
↓
VPN用ルートを設定できない
↓
通常回線から通信

という状態になっていました。

.jsの関連付けを修復したことでvpnc-script.jsが実行できるようになり、VPN用IPアドレスとルーティングが正常に設定されるようになりました。

同じ症状が出たときの確認手順

MillenVPN Native OpenConnectで「接続済みなのにIPアドレスが変わらない」という場合は、次の順番で確認すると原因を絞り込みやすいです。

1. グローバルIPを確認

OpenConnect接続前と接続後でIPアドレスを比較します。

コマンドから確認する場合は、IP確認サービスを利用できます。

VPN接続後も同じIPなら、次へ進みます。

2. ルーティングを確認

route print -4

VPN接続後にVPN側へ通信するルートが追加されているか確認します。

3. 仮想ネットワークアダプターを確認

Get-NetAdapter

TAPまたはWintunなど、OpenConnectが使用している仮想インターフェースを確認します。

4. 仮想NICのIPアドレスを確認

Get-NetIPConfiguration -InterfaceIndex <インターフェース番号>

VPN接続中にもかかわらず、

169.254.x.x

になっている場合は、VPN用IPアドレスの設定処理に失敗している可能性があります。

5. OpenConnect-GUIのログを確認

次のような行があるか確認します。

CSTP connected
Established DTLS connection
X-CSTP-Address: 10.x.x.x

これらが出ていれば、VPNサーバーとの接続やIPアドレス払い出しは成功している可能性が高くなります。

その後に、

vpnc-script.js returned error

などが出ていれば、Windows側の設定スクリプトを疑います。

6. JavaScriptエンジンを確認

cd "C:\Program Files\OpenConnect-GUI"
cscript vpnc-script.js

ここで、

ファイル拡張子 ".js" を持つスクリプト エンジンはありません

と表示された場合は、Windowsの.js関連付けを確認します。

reg query HKCR\.js /ve

必要に応じて関連付けを修復します。

reg add HKCR\.js /ve /d JSFile /f

Connected表示だけではVPNが使えているとは限らない

今回、最も分かりにくかったのはOpenConnect-GUIが「接続できている」ように見えたことでした。

実際、

CSTP connected
Established DTLS connection

まで成功しているため、VPNサーバーとのトンネル自体は確立されています。

しかし、VPNを実際のインターネット通信に使うためには、その後WindowsへIPアドレスやルーティングを設定する必要があります。

つまり、

VPNトンネルが接続されたことと、PCの通信がVPNを経由していることは同じではありません。

OpenConnect-GUIが接続済みになっているのにIPアドレスが変わらない場合は、IP確認サイトだけを見るのではなく、

OpenConnectログ
↓
仮想NIC
↓
IPアドレス
↓
ルーティング
↓
vpnc-script

の順番で確認すると原因を切り分けやすくなります。

まとめ

今回の問題はMillenVPNへの認証失敗やVPNサーバーへの接続障害ではありませんでした。

最終的な原因は、

Windowsで.jsのJScript関連付けが正常ではなく、OpenConnect-GUIのvpnc-script.jsを実行できなかったこと

でした。

その結果、VPNサーバーからIPアドレスを受け取っているにもかかわらず、Windowsの仮想ネットワークインターフェースへ設定されず、通常のプロバイダ回線から通信していました。

.jsの関連付けを修復した後はVPN用のネットワーク設定が正常に反映され、グローバルIPアドレスもMillenVPN側へ切り替わりました。

同じように、

「OpenConnect-GUIではConnectedなのにIPアドレスが変わらない」

という症状が出ている場合は、vpnc-script.jsが正常に実行できているかを確認してみる価値があります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次