VM libvirtを使用してqemu/kvmで実行中のipv4アドレスまたは他のメタデータを取得するソリューションを探していますか?ovirtゲストエージェントとqemuゲストエージェントも調べましたが、このデータを取得するためのより良い/より簡単な方法があるかどうか疑問に思っていましたか?
基本的に私はいくつかのホストを実行しているKVMであり、特定のプライベートIPアドレスごとに、そのVMがそのIPアドレスで実行されていることを知る必要があります。 DHCPサーバーによって提供されます)。
各VMにavahiをインストールしているので、VMは自分のアドレスをアドバタイズします。ただし、利用できるオプションはこれだけではありません(特にVMにLinuxとは異なるものが含まれている場合)。だから、virshオプションの魔法の世界に入りましょう!
*)最初に、VMのNICのMACアドレスを取得する必要があります。
[root@5844 ~]# virsh domiflist b2bua
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 network default virtio 52:54:00:aa:bb:cc
vnet1 bridge br1 virtio 52:54:00:dd:ee:ff
[root@5844 ~]#
*)では、ARPテーブルを見てみましょう
[root@5844 ~]# arp -e
Address HWtype HWaddress Flags Mask Iface
xx.xx.xx.xx ether xx:xx:xx:xx:xx:xx C br0
192.168.122.14 ether 52:54:00:xx:xx:xx C virbr0
192.168.122.51 ether 52:54:00:aa:bb:cc C virbr0
[root@5844 ~]#
*)次に、すべてを一緒に接着します(そして少しのシェル/正規表現の魔法を追加します):
[root@5844 ~]# for mac in `virsh domiflist b2bua |grep -o -E "([0-9a-f]{2}:){5}([0-9a-f]{2})"` ; do arp -e |grep $mac |grep -o -P "^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}" ; done
192.168.122.51
[root@5844 ~]#
あなたはリースファイルを読むことができます:
# cat /var/lib/libvirt/dnsmasq/default.leases
1381437666 52:54:00:98:75:eb 192.168.122.240 chat *
1381437643 52:54:00:dc:ee:f8 192.168.122.112 burp *
または、さらに良いのは、net-dhcp-leases
virsh
からのコマンド:
virsh # net-dhcp-leases nat --help
NAME
net-dhcp-leases - print lease info for a given network
SYNOPSIS
net-dhcp-leases <network> [<mac>]
DESCRIPTION
Print lease info for a given network
OPTIONS
[--network] <string> network name or uuid
[--mac] <string> MAC address
またはPythonで:
import libvirt
conn = libvirt.open('qemu+ssh://root@localhost/system')
for lease in conn.networkLookupByName("my_network").DHCPLeases():
print(lease)
これは、CentOS 7ゲストが実行されているUbuntu 16.04ホストで動作します。
$ virsh list
Id Name State
----------------------------------------------------
5 centos7.0 running
$ virsh domifaddr centos7.0
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet0 52:54:00:a1:28:e5 ipv4 192.168.122.15/24
一般に、2つのオプションがあります。
私の場合、どの提案も機能しませんでした。ゲストIPを取得する方法は次のとおりです。
ネットワーク名を取得します。
$ virsh net-list
Name State Autostart Persistent
----------------------------------------------------------
default active yes yes
次に:
$ virsh net-dhcp-leases default
Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
-------------------------------------------------------------------------------------------------------------
2018-11-06 15:47:33 52:54:00:1b:ee:f6 ipv4 192.168.122.6/24 vm1 -
2018-11-06 15:36:58 52:54:00:d7:1c:2e ipv4 192.168.122.4/24 vm2 -