如何使用 libvirt 0.10.0+(路由网络)找出新虚拟机的 IP 地址

如何使用 libvirt 0.10.0+(路由网络)找出新虚拟机的 IP 地址

我的目标是仅使用 libvirt api (>=0.10) 找出新虚拟机的 ip 地址。目前我正在使用 libvirt 的 net-update 命令:在启动新机器之前,我为其设置了静态 dhcp 条目,并使用已知地址启动虚拟机。

即使使用旧版本的 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 租约文件中查找。

相关内容