我正在尋找一種解決方案來獲取在libvirt上運行在qemu/kvm上的VM的ipv4地址或其他元數據?我還查看了ovirt guest代理和qemu guest代理,但我想知道是否有更好/更簡單的方法來獲取此數據?libvirt:從客戶獲取ipv4地址
基本上我有幾臺主機運行KVM,每個特定的私有IP地址我需要能夠知道哪個虛擬機正在運行該IP地址(由DHCP服務器提供)。
我正在尋找一種解決方案來獲取在libvirt上運行在qemu/kvm上的VM的ipv4地址或其他元數據?我還查看了ovirt guest代理和qemu guest代理,但我想知道是否有更好/更簡單的方法來獲取此數據?libvirt:從客戶獲取ipv4地址
基本上我有幾臺主機運行KVM,每個特定的私有IP地址我需要能夠知道哪個虛擬機正在運行該IP地址(由DHCP服務器提供)。
我在每個虛擬機上安裝avahi,所以他們會宣傳自己的地址。但是,這不是唯一可用的選項(特別是如果您的VM包含與Linux不同的東西)。所以進入virsh選項的魔法世界!
*)首先,你需要讓你的虛擬機網卡的MAC地址:
[[email protected] ~]# 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
[[email protected] ~]#
*)現在讓我們來看看ARP表
[[email protected] ~]# 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
[[email protected] ~]#
*)現在,讓我們把所有的東西一起(並添加了一些外殼/正則表達式的魔力):
[[email protected] ~]# 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
[[email protected] ~]#
您可以閱讀租約文件:
# 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 *
,或者甚至更好,從virsh
使用net-dhcp-leases
命令:
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://[email protected]/system')
for lease in conn.networkLookupByName("my_network").DHCPLeases():
print(lease)
現在有一個新的補充:domifaddr(http://libvirt.org/git/?p=libvirt.git;a=commit;h=2f36e6944e6eb56a00e19fcd85ec8513461597c9) –
最佳答案..謝謝... –
Upvoted for Python示例 – Flippym
有,一般來說,有兩個選項:
這適用於運行CentOS 7 guest的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
當使用具有外部DHCP的網橋時,不會顯示任何地址。 – Xdg
那是很好的解決方案,但難道不BusyBox中的'的virsh domiflist yoc6工作完全, --------> KVM#爲Mac | grep的-o -E「([0-9a- f] {2}:){5}([0-9a-f] {2}) 「';做arp -e | grep $ mac | grep -o -P「^ \ d {1,3} \。\ d {1,3} \。\ d {1,3} \。\ d {1,3} 「;完成 grep:無效選項 - 'P' arp:無效選項 - 'e' BusyBox v1.22.1(2015-11-04 15:02:18 PST)BusyBox v1.22.1(2015-11-04 15 :02:18 PST)多方通話二進制。 用法:grep [-HhnlLoqvsriwFE] [-m N] [-A/B/CN] PATTERN/-e PATTERN .../- f FILE [文件] ... –
請記住,arp表可能是陳舊或缺少條目。您可能需要在調用arp命令之前ping通子網。 –