Network AdapterのNoGuestControlの表示(PowerCLI)について

 きっかけ

Broadcom Communityに以下の投稿があったので回答がてら調べてみた

NoGuestControlという項目について | Japanese

 

 

事象

PowerCLIで仮想マシンのNetwork Adapter ConnectionStateを参照した際に、GuestControlとなっているものと、NoGuestControlとなっているものが存在する

 

事象例:(上記コミュニティ記事の例をそのままコピペ)

PS C:\Windows\system32> get-vm xyz | get-networkadapter | select-object *
 
MacAddress       : 00:50:56:9d:cc:99
WakeOnLanEnabled : True
NetworkName      : vlan009
Type             : Vmxnet3
ParentId         : VirtualMachine-vm-113668
Parent           : tssv-maki-win2019
Uid              : /VIServer=test-user@abc.co.jp:443/VirtualMachine=VirtualMachine-vm-113668/
                   NetworkAdapter=4000/
ConnectionState  : Connected, NoGuestControl, StartConnected
ExtensionData    : VMware.Vim.VirtualVmxnet3
Id               : VirtualMachine-vm-113668/4000
Name             : Network adapter 1

 

 

 

No/GuestContrlの意味についての調査

とりあえず再現コマンドをラボで試してみてNoGuestControlGuestControlVMの違いを確認しようとしたが、残念ながら当方の環境にはNoGuestControlとなっているVMは存在無かった。

このことから、デフォルトはGuestControlであることが想定される。

 

NoGuestControlについてGoogle検索の範囲では該当の値についての情報はヒットしなかった。

vSphere Clientvmxファイルなどから仮想マシンの設定値として関連するものがあるかを探したが見つからなかった。

 

しかしながら、MOBブラウザ(説明は割愛)で仮想マシンのハードウェアデバイス情報を確認したところ関連する項目が存在した(allowGuestControl)


allowGuestControlPowerCLI上のNo/GuestControlと関連しているところまでは推測ができるが、肝心の設定値の意味やGUI/CLIでの設定変更方法などについてはGoogle検索の範囲では確認できなかったが、APIで設定をしている例がいくつか確認できた

参考:
pyvmomiで仮想マシンを作成してみる | 日常系エンジニアのTech Blog

 

そこで、vSphere ClientAPI Exploreで関連する項目を探したところ、vm/hardware/ethernet API説明内のVcenterVmHardwareEthernetUpdate のプロパティ?として説明があった。

 


どうやら、GuestOSからvNICに対するConnect/Disconnectの操作を許容する設定のようだ(名前から想像はついていたが)

 

GuestOS側からの操作ということはVMware Toolsが関連していることをエスパーしてVMware Toolsのドキュメントを確認した

参照ドキュメント:vmware-tools-12-5-0.pdf

 

上記ドキュメントにはallowGuestControlについての言及はなかったが、デバイス単位の設定であるallowGuestControlとは別にVM単位の設定として以下の設定値が存在していることが分かった 

isolation.device.connectable.disable
isolation.device.edit.disable
 

この二つの値はデフォルトでTrueとなっているため、GuestOS側からのデバイス操作は不可となっている。

つまり、GuestOS側からのデバイス操作に関して、

VM単位ではデフォルト不可
・デバイス単位ではデフォルト可能

となっている。

そのため、デバイス単位でどちらの設定値が優先されるのかを確認する必要がある。

 

以下の条件でGuestOSからのデバイス操作可否を検証を実施した

VM単位で無効(デフォルト)、デバイス単位で有効(デフォルト)
VM単位で有効、デバイス単位で有効(デフォルト)
VM単位で有効、デバイス単位で無効

 

検証環境とコマンド

GuestOSCentOS 7

VMware Tools: open-vm-tools-11.0.5-3.el7_9.9.x86_64 (version 11269 )

仮想ハードウェア:バージョン14

 

検証コマンド:

vmware-toolbox-cmd device list
vmware-toolbox-cmd device disable Ethernet0
vmware-toolbox-cmd device enable Ethernet0
 

 

AllowGuestControlの設定変更方法

API Exploreで実行した。(VM稼働状態で変更可能)

実効時のRequest詳細は前出の画像を参照(PATCH vm/hardware/ethernet

vmNICの値についてはMOBブラウザやPowerCLIの出力から確認。

 

なお、API Exploreが苦手な場合はvmxファイルに以下の一行を追加することでAllowGuestControlを無効化できる

 ethernet0.allowGuestConnectionControl = "FALSE"

※有効化したい場合はTRUEにするか、行を消せばTRUEになる。
vNICが複数ある場合はethernet0の部分を適宜変更が必要

 

検証結果①:操作不可

①の条件ではVMware Toolsからデバイスの参照やDisable/Enableができなかった。

vmware-toolbox-cmd device list でそもそも一覧が取得できなかった。

このことからデイバス単位の設定値(allowGuestControl)よりも、VM単位の設定値が上位であることがわかる

 

検証結果②:操作可能

②の条件ではデバイスの参照及びDisable/Enableが可能だった

出力例: ※このVMvNIC4つあるためEthernet0~4が出力される

# ./vmware-toolbox-cmd device list
Ethernet3: Enabled
Ethernet2: Enabled
Ethernet1: Enabled
Ethernet0: Enabled
sata0:0: Disabled
 

検証結果③:該当デバイスのみ操作不可

③の条件では該当のデバイスのみ参照やDisable/Enableができなくなった

出力例: ※Ethernet0に対してallowGuestControl Falseに設定

# ./vmware-toolbox-cmd device list
Ethernet3: Enabled
Ethernet2: Enabled
Ethernet1: Enabled
sata0:0: Disabled

上記の結果からVM単位で有効でも、デバイス単位の無効化設定がきちんと動作することが分かった

 

まとめ

PowerCLINoGuestControlとなっているデバイスはvmware tools からDisconnect/Connectの操作ができないことが分かった。

仮想マシンの作成時のデフォルト値はGuestControlとなっているため、デバイス単位ではvmware toolsからの参照およびDisconnect/Connect操作が可能だが、

VM単位の設定ではデフォルトでGuestControl相当の設定が無効となっているため、デバイス単位でGuestControlとなっていても操作はできない。

 

セキュリティ観点ではGuestControlは無効化のほうが好ましいとも考えられるがVM単位とデバイス単位の設定が二重に存在するため、vSphereの仕様としてはデバイス単位では有効、VM単位では無効をデフォルトとすることで利便性と安全性のバランスをとっていると考えられる。

 

もしVMware toolsによる仮想デバイス操作の必要性(もしくはGuestControlを必要とするアプリケーション)がある場合は、VM単位で有効化すればよく、特定のデバイスのみ操作を無効化したい場合はallowGuestControlの設定値をデフォルトにするといった使い方となる

 

 

コメント

このブログの人気の投稿

vSwitchにSTPが不要な理由

NTPと同期してくれないときのトラブルシューティング

ESXi に DNS サーバを何個まで登録できるか