NSX(vShield Endpoint)環境下でのVMwareTools不要ドライバの削除

# ことの始まり
「VMware NSX for vSphereへの移行:Japan Cloud Infrastructure Blog 」
https://blogs.vmware.com/jp-cim/2016/11/vmware-nsx-for-vsphere-migration-1.html

>すでに一般サポートも2016 年 9 月 19 日に終了を迎えています。テクニカルガイダンスは2017年3月まで提供されます。
セキュリティベンダーが提供する仮想アプライアンスを使用して仮想基盤を保護されているユーザー様、または提案を予定しているパートナー様は、ご注意ください。
～～～～～～中略～～～～～～
><変更のポイント>
1.管理マネージャーが、「vShield Manager」から「NSX Manager」に変わります。NSX Managerは、vShield Managerと同様に１システムに１つ準備します。
2.新たに、仮想アプライアンス「Guest Introspection」を、各ESXiホストに配置します。Guest Introspection がvShield Endpoint の全機能を提供します

![vShield-to-NSX](https://blogs.vmware.com/jp-cim/files/2016/11/vShield-to-NSX.jpg) 

以上の図にはないですが、ESXiホストOSにインストールしていたvShieldEndpointドライバが、NSX環境ではゲストイントロスペクション（特殊用途専用の仮想マシン）に置き換わります。
こんな経緯で、vShieldManager環境からNSXforvShieldEndpoint環境に移行・・・。

>vCloud Networking and Security (vCNS)の販売が終了されていることをご存知ですか？

知らんがな・・・。





# ●導入前環境
　ESXi5.5+vShieldEndpointドライバ
　vShieldManager5.X
　仮想マシンOS:WindowsServer(VMwareTools9.x)
　トレンドマイクロDeepSecurity


# 導入後環境
　ESXi5.5
　NSXManager6.2.X+ゲストイントロスペクション
　仮想マシンOS:WindowsServer(VMwareTools9.x)
　トレンドマイクロDeepSecurity

## 導入してからの不具合
　・仮想マシンの通信がやたら遅い
　・仮想マシンに乗るアプリケーション側の通信がたびたび断になる
　・ゲストイントロスペクションのメモリ使用率が高騰

# ヒント
「ゲスト イントロスペクションのメモリ使用率が 90% 以上に上昇するか、NSX-V 6.3 でエラー「ESX モジュールとの通信が失われました (Lost communication with ESX module)」が表示される (2151882)」
https://kb.vmware.com/s/article/2151882
>Purpose
>ゲスト イントロスペクションがインストールされている VMware NSX for vSphere 6.3.x 環境で、次の症状が発生します。
•ゲスト イントロスペクション (GI) エージェントレス ウイルス対策保護によって保護されている仮想マシンで、ネットワーク I/O が断続的に中断される。
•ゲスト イントロスペクション USVM のメモリ使用率がほぼ 100% に上昇すると同時に、仮想マシンへの影響が観察される。
•影響のある仮想マシンが実行されている ESXi ホストの [タスクとイベント] タブに、次のようなエラーが表示される。
ESX モジュールとの通信が失われました。 (Lost communication with ESX module.)
～～～略～～～
注： 
この記事が問題に対応するためには、次の条件を満たす必要があります。
__NSX for vSphere 6.3.x がインストールされている。__


と書きつつ、NSX6.2.x環境でも同事象が発生中。
>・この問題が観察されたクラスタにゲスト イントロスペクションがインストールされている。
>・ゲスト イントロスペクション (vsepflt.sys) および__*ネットワーク イントロスペクション ドライバ (vnetflt.sys) が影響を受けるゲスト仮想マシンにインストールされている。*__

デフォルト値でVMwareToolsをインストールすると、ネットワークイントロスペクションドライバ(vnetflt.sys)は勝手に入る仕様。。。
このKBに当たりをつけて対処検討。

# 対処検討
上記KBより。
>永続的な回避策とは、影響を受けるゲスト仮想マシンからネットワーク イントロスペクション ドライバ (vnetflt.sys) を削除することです。
vnetflt.sys をアンインストールするには、次の 3 つの方法のいずれかを使用します。
>•次の追加スイッチを使用して、影響を受けるゲスト仮想マシンで VMware Tools インストーラを再実行します： /s /v"/qn REMOVE=NetworkIntrospection"

また、NSXManager環境でのVMwareTools推奨バージョンは10.0.8以降とのこと。
https://docs.vmware.com/jp/VMware-NSX-for-vSphere/6.2/rn/releasenotes_nsx_vsphere_627.html
※バージョン、システム要件、およびインストール


# 対処
・対処1：ゲストOS（Windows仮想マシン）のVMwareToolsのバージョンアップ(9.x⇒10.0.8)
・対処2：VMwareToolsの一部機能、ネットワークイントロスペクションドライバを削除。

対処1-2は、Tools10.0.8のインストーラを叩くことで、バージョンアップしつつ、ドライバ削除も行うことが可能。
というわけで、コマンドによるインストール手順に決定。

```powershell:cmd.exe
Setup.exe /s /v "/qn REBOOT=R ADDLOCAL=ALL REMOVE=NetworkIntrospection"
```

setup.exeは新バージョンのVMwareToolsのインストーラのファイル名（実際のファイル名に読み替えて・・・）。/sオプションにてサイレントインストール指定。REBOOT=Rにて再起動抑止。ADDLOCAL=ALLにて全コンポーネントをインストール対象としつつ、REMOVEオプションで特定のコンポーネントを削除。ここではネットワークイントロスペクションドライバをREMOVEに指定。

## ①コマンドのオプションが決まったところで、バッチ作成。

```powershell:toolsinstall.bat
C:\work\vmtools\Setup.exe /s /v"/qn REBOOT=R ADDLOCAL=ALL REMOVE=NetworkIntrospection"
```

シンプルに一行バッチ。Cドライブ直下、workフォルダ直下、vmtoolsフォルダ直下に配置したsetup.exe(VMwareTools10.0.8のインストーラ)を実行する。

## ②インストール。
単なるバッチなので、①のtoolsinstall.batたたくだけ。

## ②-aリモートインストール
わざわざサーバにログインして実行するのは面倒くさい場合、以下にて管理サーバ(vCenterが導入されたWindowsサーバなど)で実行。
※可能であれば、DomainAdminsかAdminstratorsグループのユーザにて実施することが好ましい。


```powershell
PS C:\Users\Administrator> Invoke-Command -ComputerName "対象サーバコンピュータ名" -ScriptBlock {wmic process call create "C:\work\vmtools\toolsinstall.bat"} 
```
リモートインストールは、Invokeコマンドとwmicの新旧コマンド組み合わせ。
このリモートインストール方法がつらいのはインストールが完了したかどうかが見えないところ。
というわけで、実施する場合、実行後に15分程度待って以下を確認する。

## ③インストール後のVMwareToolsのバージョン確認

```powershell
PS C:\Users\Administrator> $HKLM_PATH = "HKLM:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
PS C:\Users\Administrator> $HKLU_PATH = "HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
PS C:\Users\Administrator> $software = Get-ChildItem -Path($HKLM_PATH,$HKLU_PATH) | %{Get-Itemproperty $_.PsPath} | ?{$_.DisplayName -like "VM*"}  
PS C:\Users\Administrator> $software | select-object -property DisplayName,DisplayVersion

DisplayName                                                 DisplayVersion
-----------                                                 --------------
Vmware Tools                                　　　　　　　10.0.8


```

確認観点をバージョンとしたが、get-serviceコマンドでVMwareToolsのサービスの起動を確認するのもあり。
※インストール時にサービスの停止、インストール後にサービスの起動という動きをするため。

## ④インストール後のゲストOSリブート

```powershell
shutdown /r /t 0
```


以上が終わったタイミングで実施。


## 対処してからの不具合
事象はきれいになくなっていた。

__やはり、ネットワークイントロスペクションドライバ、、おまえの仕業か・・・・・・。__

# 最終環境
　ESXi5.5
　NSXManager6.2.X+ゲストイントロスペクション
　仮想マシンOS:WindowsServer(VMwareTools10.0.8)
　トレンドマイクロDeepSecurity

vShieldManager環境からNSXforvShieldEndpointに変更する場合、VMwareToolsのコンポーネントには要注意です。

# 余談
シュワルツェネッガーの代表作『プレデター』（劇中でのシュワのセリフ「血が出るなら○せる(If it bleeds, We can kill it)」は座右の銘になりました）の続編が公開されたのですが、これがなかなかよかったっす。

[The Predator | Official Trailer [HD] | 20th Century FOX](https://www.youtube.com/watch?v=WaG1KZqrLvM "The Predator | Official Trailer [HD] | 20th Century FOX")