如何使用 libvirt 0.10.0+(路由網路)尋找新虛擬機器的 IP 位址

如何使用 libvirt 0.10.0+(路由網路)尋找新虛擬機器的 IP 位址

我的目標是僅使用 libvirt api (>=0.10) 找出新虛擬機器的 IP 位址。目前我正在使用 libvirt 的 net-update 命令:在啟動新機器之前,我為其設定靜態 dhcp 條目,並使用已知地址啟動 vm。

即使使用舊的 libvirt 版本,它幾乎可以正常工作,但有一個錯誤。當我「強制關閉」機器時,它不會向 dhcp 伺服器(libvirt/dnsmasq)發送「釋放」查詢,並且該 IP 保留在租約檔案中。如果我在 dhcp 租約逾時之前建立具有相同 ip 位址的新計算機,它將不會從靜態條目中獲取 ip 位址,因為 dhcp 伺服器認為該 ip 已被使用(基於租約文件中的資訊)。

是否有更強大的解決方案來獲取電腦 IP 位址或在啟動前設定它,而無需透過 shell 存取目標伺服器或虛擬機器內的靜態網路配置?

答案1

在 libvirt >= 1.2.14 中,可以查詢 libvirt 以詢問已指派給來賓 NIC 的 IP 位址,從而無需設定靜態 IP 位址。例如

# virsh domifaddr f25kubdev
 Name       MAC address          Protocol     Address
-------------------------------------------------------------------------------
 vnet1      52:54:00:b4:fc:f2    ipv4         192.168.122.13/24

我不確定這對你是否有任何用處,因為你提到了 libvirt 0.10.0

如果您的版本 >= 1.2.10,則有一種不太直接的方法可以透過查詢 DHCP 租約資料庫來獲取信息

# virsh net-dhcp-leases default
 Expiry Time          MAC address        Protocol  IP address                Hostname        Client ID or DUID
-------------------------------------------------------------------------------------------------------------------
 2017-01-19 12:01:01  52:54:00:b4:fc:f2  ipv4      192.168.122.13/24         f25kubdev       ff:00:b4:fc:f2:00:04:52:fb:4b:29:01:5e:44:c8:b6:57:85:dd:f2:7a:98:73

然後,您必須手動將 MAC 位址對應到您感興趣的網域 - 'domifaddr' 命令只會為您完成該映射。

在 1.2.10 之前,根本無法透過 libvirt API 取得此資訊 - 您必須直接查看 dnsmasq 租約檔案。

相關內容