vSphere 環境では、ゲスト OS に VMware Tools をインストールすると
VM のレイヤから、ゲスト OS に付与されている IP アドレスを確認することができます。
PowerCLI> Get-VM db01 | Get-VMGuest | select VM,ToolsVersion,IPAddress | fl
VM : db01
ToolsVersion : 10.1.5
IPAddress : {192.168.11.171, 192.168.11.170, 192.168.11.173, 192.168.41.171...}
実は現在の vSphere の機能では、vNIC と IP アドレスの対応も確認できるようになっています。
この VM には vNIC が 2つあり、それぞれ vNIC に複数の IP アドレスが付与されている様子がわかります。
(ちなみにこの VM は Oracle RAC を構成している Linux ゲストで VIP を複数もっています。)
PowerCLI> Get-VM db01 | Get-VMGuest | select -ExpandProperty ExtensionData | select -ExpandProperty Net
Network : dvpg-vds01-vlan-1011
IpAddress : {192.168.11.171, 192.168.11.170, 192.168.11.173}
MacAddress : 00:50:56:8a:fc:d4
Connected : True
DeviceConfigId : 4000
DnsConfig :
IpConfig : VMware.Vim.NetIpConfigInfo
NetBIOSConfig :
Network : dvpg-vds01-vlan-4001
IpAddress : {192.168.41.171, 169.254.131.137}
MacAddress : 00:50:56:8a:89:e3
Connected : True
DeviceConfigId : 4001
DnsConfig :
IpConfig : VMware.Vim.NetIpConfigInfo
NetBIOSConfig :
IPv6 のアドレスを付与されている場合も、下記のようにアドレスが認識されています。
(ちなみにこの VM は vSAN Witness Appliance で、本来は vNIC1 / vNIC2 は別セグメントの IP を付与します。)
PowerCLI> Get-VM hv-n43w | Get-VMGuest | select -ExpandProperty ExtensionData | select -ExpandProperty Net
Network : dvpg-vds01-vlan-0000
IpAddress : {192.168.1.13, fe80::250:56ff:fe8a:180a, 2400:4030:8c62:5400:250:56ff:fe8a:180a}
MacAddress : 00:50:56:8a:18:0a
Connected : True
DeviceConfigId : 4000
DnsConfig :
IpConfig : VMware.Vim.NetIpConfigInfo
NetBIOSConfig :
Network : dvpg-vds01-nested
IpAddress : {192.168.1.14, fe80::250:56ff:fe8a:79a0, 2400:4030:8c62:5400:250:56ff:fe8a:79a0}
MacAddress : 00:50:56:8a:79:a0
Connected : True
DeviceConfigId : 4001
DnsConfig :
IpConfig : VMware.Vim.NetIpConfigInfo
NetBIOSConfig :
ためしに、下記のようなスクリプトを作成してみました。
実行すると、下記のように IP アドレスごとに情報を取得できます。
PowerCLI スクリプトなどで工夫することで、
取得する情報を vNIC ごとから IP アドレスごとにしたり・・・・
PowerCLI> .\get_guest_ip.ps1 -VMs hv-n43w
VM : hv-n43w
PowerState : PoweredOn
ToolsState : toolsOk
key : 4000
Mac : 00:50:56:8a:18:0a
Portgroup : dvpg-vds01-vlan-0000
Connected : True
IpAddress : 192.168.1.13
PrefixLength : 24
VM : hv-n43w
PowerState : PoweredOn
ToolsState : toolsOk
key : 4000
Mac : 00:50:56:8a:18:0a
Portgroup : dvpg-vds01-vlan-0000
Connected : True
IpAddress : fe80::250:56ff:fe8a:180a
PrefixLength : 64
VM : hv-n43w
PowerState : PoweredOn
ToolsState : toolsOk
key : 4000
Mac : 00:50:56:8a:18:0a
Portgroup : dvpg-vds01-vlan-0000
Connected : True
IpAddress : 2400:4030:8c62:5400:250:56ff:fe8a:180a
PrefixLength : 64
VM : hv-n43w
PowerState : PoweredOn
ToolsState : toolsOk
key : 4001
Mac : 00:50:56:8a:79:a0
Portgroup : dvpg-vds01-nested
Connected : True
IpAddress : 192.168.1.14
PrefixLength : 24
VM : hv-n43w
PowerState : PoweredOn
ToolsState : toolsOk
key : 4001
Mac : 00:50:56:8a:79:a0
Portgroup : dvpg-vds01-nested
Connected : True
IpAddress : fe80::250:56ff:fe8a:79a0
PrefixLength : 64
VM : hv-n43w
PowerState : PoweredOn
ToolsState : toolsOk
key : 4001
Mac : 00:50:56:8a:79:a0
Portgroup : dvpg-vds01-nested
Connected : True
IpAddress : 2400:4030:8c62:5400:250:56ff:fe8a:79a0
PrefixLength : 64
IPv4 のアドレスだけを取得したりできるようになります。
PowerCLI> .\get_guest_ip.ps1 -VMs hv-n43w -IPv4Only
VM : hv-n43w
PowerState : PoweredOn
ToolsState : toolsOk
key : 4000
Mac : 00:50:56:8a:18:0a
Portgroup : dvpg-vds01-vlan-0000
Connected : True
IpAddress : 192.168.1.13
PrefixLength : 24
VM : hv-n43w
PowerState : PoweredOn
ToolsState : toolsOk
key : 4001
Mac : 00:50:56:8a:79:a0
Portgroup : dvpg-vds01-nested
Connected : True
IpAddress : 192.168.1.14
PrefixLength : 24
IP アドレスごとにすることで、
下記のように IP アドレス特定を工夫しやすくなるのではないかと思います。
PowerCLI> .\get_guest_ip.ps1 -VMs db01 -IPv4Only | where {$_.key -eq 4001} | where {$_.IpAddress -like "192.168.*"} | select IpAddress
IpAddress
---------
192.168.41.171
たとえば、VM のテンプレート展開で DHCP を使用している場合に
vNICの番号(4000~)や ポートグループ名(Network)をもとに IP アドレスを特定して、
後続処理の自動化で利用したりすることができると思います。
ちなみに今回は vSphere 6.5 U1 + PowerCLI 10.0 環境でためしています。
以上、PowerCLI で vNIC と IP アドレスの対応を確認してみる話でした。