KVM / libvirt:如何在虚拟化主机上configuration静态访客IP地址

我想要做的是从主机系统设置来宾的networkingconfiguration(IP地址,子网,网关,广播地址)。 使用的networking设置是bridge模式。 如何从主机configurationnetworking,而不是将客户端本身configuration为静态networkingconfiguration?

如果我执行:

 virsh edit vm1 

还有一个<network>块,我尝试从那里configurationnetworking接口,但不幸的是客户虚拟机似乎并没有使用它,因此离线到networking(因为它只使用自动networkingconfiguration)。来宾虚拟机都是基于Linux和Windows的。 任何帮助将不胜感激。

如果您不想在guest虚拟机中进行任何configuration,那么唯一的select是发送静态IP地址的DHCP服务器。 如果使用bridge模式,那可能是一些外部的DHCP服务器。 查阅其手册以了解如何提供静态租约。

但是至less在natroute转发模式下,你可以使用libvirt内置的'dnsmasq'(更新版本的libvirtd支持dnsmasq的“dhcp-hostsfile”选项)。 这里是如何:

首先找出要分配静态IP地址的虚拟机的MAC地址:

 virsh dumpxml $VM_NAME | grep 'mac address' 

然后编辑networking

 virsh net-list virsh net-edit $NETWORK_NAME # Probably "default" 

find<dhcp>部分,限制dynamic范围并为您的虚拟机添加主机条目

 <dhcp> <range start='192.168.122.100' end='192.168.122.254'/> <host mac='52:54:00:6c:3c:01' name='vm1' ip='192.168.122.11'/> <host mac='52:54:00:6c:3c:02' name='vm2' ip='192.168.122.12'/> <host mac='52:54:00:6c:3c:03' name='vm3' ip='192.168.122.12'/> </dhcp> 

然后,重新启动您的VM(或重新启动它的DHCP客户端,例如ipdown eth0; ifup eth0


更新:我看到有报道说,“virsh net-edit”之后,更改可能不会生效。 在这种情况下,在编辑之后试试这个:

 virsh net-destroy $NETWORK_NAME virsh net-start $NETWORK_NAME 

…并重新启动虚拟机的DHCP客户端。

如果这仍然不起作用,你可能不得不这样做

  • 停止libvirtd服务
  • 杀死任何仍然活着的dnsmasq进程
  • 启动libvirtd服务

注意:KVM主机无法强制未知操作系统和未知configuration的虚拟机使用特定的networkingconfiguration。 但是如果知道虚拟机使用某种networkingconfiguration协议(比如说DHCP),就可以使用它。 这是这篇文章假定的。

某些操作系统(例如一些Linux发行版)也允许通过内核命令行将networkingconfiguration选项传递给客户机。 但是,这是非常具体的操作系统,我看到没有DHCP方法的优势。

virsh net-update是你的好命令(你不需要重新启动/摧毁你的networking等)
请参阅: https : //www.redhat.com/archives/libvir-list/2012-September/msg01380.html

我已经能够通过简单地向dnsmasq进程发送-HUP信号来使得dnsmasq “查看”新添加的IP-MAC映射。 之后,重新启动新的guest虚拟机已经足够分配正确的IP,而不需要重新启动libvirtd也不需要networking本身。

官方的libvirt文档( http://wiki.libvirt.org/page/Networking#Applying_modifications_to_the_network )提到了这个非官方的Perl脚本,可以自动完成整个过程: https : //gist.github.com/bendiken/032ea1bddb9ffafe98b4

我自己也没有试过这个脚本,因为我发现hosts文件已经更新了,只是发送-HUP信号就足够了。

主机运行Debian 7.8,软件包版本是:

  • kvm 1:1.1.2 + dfsg-6 + deb7u8
  • qemu-kvm 1.1.2 + dfsg-6 + deb7u8
  • libvirt-bin 0.9.12.3-1 + deb7u1