Network AdapterのNoGuestControlの表示(PowerCLI)について
きっかけ
Broadcom Communityに以下の投稿があったので回答がてら調べてみた
NoGuestControlという項目について | Japanese
事象
PowerCLIで仮想マシンのNetwork Adapter のConnectionStateを参照した際に、GuestControlとなっているものと、NoGuestControlとなっているものが存在する
事象例:(上記コミュニティ記事の例をそのままコピペ)
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の意味についての調査
とりあえず再現コマンドをラボで試してみてNoGuestControlとGuestControlのVMの違いを確認しようとしたが、残念ながら当方の環境にはNoGuestControlとなっているVMは存在無かった。
このことから、デフォルトはGuestControlであることが想定される。
NoGuestControlについてGoogle検索の範囲では該当の値についての情報はヒットしなかった。
vSphere Clientやvmxファイルなどから仮想マシンの設定値として関連するものがあるかを探したが見つからなかった。
しかしながら、MOBブラウザ(説明は割愛)で仮想マシンのハードウェアデバイス情報を確認したところ関連する項目が存在した(allowGuestControl)

参考:
pyvmomiで仮想マシンを作成してみる | 日常系エンジニアのTech Blog
そこで、vSphere ClientのAPI
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.edit.disable
この二つの値はデフォルトでTrueとなっているため、GuestOS側からのデバイス操作は不可となっている。
つまり、GuestOS側からのデバイス操作に関して、
・VM単位ではデフォルト不可
・デバイス単位ではデフォルト可能
となっている。
そのため、デバイス単位でどちらの設定値が優先されるのかを確認する必要がある。
以下の条件でGuestOSからのデバイス操作可否を検証を実施した
①VM単位で無効(デフォルト)、デバイス単位で有効(デフォルト)
②VM単位で有効、デバイス単位で有効(デフォルト)
③VM単位で有効、デバイス単位で無効
検証環境とコマンド
GuestOS:CentOS 7
VMware
Tools: open-vm-tools-11.0.5-3.el7_9.9.x86_64 (version 11269 )
仮想ハードウェア:バージョン14
検証コマンド:
vmware-toolbox-cmd device disable Ethernet0
vmware-toolbox-cmd device enable Ethernet0
AllowGuestControlの設定変更方法
API Exploreで実行した。(VM稼働状態で変更可能)
実効時のRequest詳細は前出の画像を参照(PATCH
vm/hardware/ethernet)
vmとNICの値については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が可能だった
出力例:
※このVMはvNICが4つあるためEthernet0~4が出力される
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単位で有効でも、デバイス単位の無効化設定がきちんと動作することが分かった
まとめ
PowerCLIでNoGuestControlとなっているデバイスはvmware
tools からDisconnect/Connectの操作ができないことが分かった。
仮想マシンの作成時のデフォルト値はGuestControlとなっているため、デバイス単位ではvmware
toolsからの参照およびDisconnect/Connect操作が可能だが、
VM単位の設定ではデフォルトでGuestControl相当の設定が無効となっているため、デバイス単位でGuestControlとなっていても操作はできない。
セキュリティ観点ではGuestControlは無効化のほうが好ましいとも考えられるがVM単位とデバイス単位の設定が二重に存在するため、vSphereの仕様としてはデバイス単位では有効、VM単位では無効をデフォルトとすることで利便性と安全性のバランスをとっていると考えられる。
もしVMware toolsによる仮想デバイス操作の必要性(もしくはGuestControlを必要とするアプリケーション)がある場合は、VM単位で有効化すればよく、特定のデバイスのみ操作を無効化したい場合はallowGuestControlの設定値をデフォルトにするといった使い方となる
コメント
コメントを投稿