ゲスト OS への仮想マシン接続(vmconnect)が突然切断される

適用対象: Windows Server 2008 StandardWindows Server 2008 EnterpriseWindows Server 2008 Datacenter 詳細

現象


Hyper-Vマネージャから仮想マシン接続(vmconnect)にて接続していると以下のエラーメッセージが表示され、切断されることがあります。

「仮想マシンへの接続が失われました」

ただし、再度仮想マシン接続すると正常に接続できます。 

原因


仮想マシン接続は内部で IPv6 を利用して接続されます。そして、環境によってはこの IPv6 アドレスに Teredo のアドレスが利用され、このアドレスは 30 秒間隔で更新されます。IPv6 のアドレスが変更された場合 TCP コネクションが切れるため、仮想マシン接続が切断されます。

回避策


下記 2 点のいずれかを実行して下さい。

[解決方法1]
IPv6 を完全に無効化します。この場合、仮想マシン接続は IPv4 アドレスを使用して接続するようになるため、現象が回避されます。

1. [スタート] ボタンをクリックし、[検索の開始] ボックスに regedit と入力して、[プログラム] ボックスに表示される [regedit.exe] をクリックします。

2. [レジストリ エディタ] 画面で、次のレジストリ サブキーをクリックします。

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters

3. [DisabledComponents] をダブルクリックします。[DisabledComponents] エントリが存在しない場合には、以下の手順で [DisabledComponents] を新規に作成します。

4. [編集] メニューから、[新規作成] をクリックして [DWORD (32 ビット) 値] を選択します。

5. [新しい値] に DisabledComponents と入力し、Enter キーを押します。

6. 作成した [DisabledComponents] をダブルクリックします。

7. [値のデータ] に ff と入力し、[OK] をクリックします。

8. ホスト OS を再起動します。


[解決方法2]
Teredo を無効化します。上記同様に仮想マシン接続は IPv4 アドレスを使用して接続するようになるため、現象が回避されます。

1. 以下のように ipconfig コマンドを利用し、ネットワーク構成を確認します。

> ipconfig /all

2. 実行結果に "Tunnel adapter Teredo Tunneling Pseudo-Interface" が存在するかどうかを確認し、存在した場合は IPv6 アドレスが設定されているかどうかを確認します。

3. IPv6 アドレスが設定されていた場合、以下のように netsh コマンドを実行し、teredo を無効化します。

> netsh interface teredo set state disabled

4. teredo を無効化した状態で現象が回避できるかご確認ください。

詳細


本事象が発生している場合、Hyper-V UI トレース上に Disconnect code として '4' もしくは '904' が記録されることを確認しております。
Hyper-V UI トレースについては以下の弊社ブログをご参照ください。
[Hyper-V マネージャー] のトレース (Hyper-V UI トレース) について
http://blogs.technet.com/b/askcorejp/archive/2014/12/29/hyper-v-hyper-v-ui.aspx

ログ出力例:
[01] WARNING VmConnect RdpViewerControl:GetDisconnectErrorMessage() Unexpected error disconnect reason '4'.
[01] WARNING VmConnect RdpViewerControl:PrintDisconnectionErrorDebugMessage() The server disconnected the client with the text ''. Disconnect code: '4', Extended disconnect code: 'exDiscReasonNoInfo'.
[01] WARNING VmConnect RdpViewerControl:PrintDisconnectionErrorDebugMessage() Disconnect error message: 仮想マシンへの接続が終了しました。接続を再試行してください。問題が解決しない場合は、システム管理者に問い合わせてください。

関連情報


IPv6 または Windows のコンポーネントを無効にする方法
http://support.microsoft.com/kb/929852/ja