Dhcp

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

  • January 19, 2017

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

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

是否有更強大的解決方案來獲取機器 ip 地址或在啟動前設置它,而無需 shell 訪問目標伺服器或虛擬機內的靜態網路配置?

在 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 租約文件中四處尋找。

引用自:https://serverfault.com/questions/827080