KVM / libvirt:如何在虚拟化主机上配置静态来宾IP地址


31

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

如果我执行:

virsh edit vm1

还有一个<network>块,我尝试从那里配置网络接口,但是不幸的是,来宾VM似乎没有使用它,因此已脱机到网络(因为它仅使用自动网络配置)...来宾VM均基于Linux和Windows。任何帮助将不胜感激。


2
通过保留的DHCP租约分发IP地址不是一种选择吗?
MadHatter在2014年

嗯,我想是的,但是我想将VM#1分配给IP#1,将VM#2分配给IP#2等(而不是从我的租约中给他们一个随机IP)。您认为可以使用DHCP进行这样的配置吗?如果是这样,我很乐意尝试这种方法。
Beta

2
我建议将问题重命名为“ KVM / libvirt:如何在虚拟化主机上配置静态来宾IP地址
Nils Toedtmann 2014年

1
同意@NilsToedtmann,有关所使用的管理程序的任何其他详细信息(如基本OS等)将是有益的。可能会有其他基于OS的管理工具来帮助配置虚拟化系统的网络。有关可以使用YaST的基于SUSE的操作系统使用的KVMLXC的出色指南。
马特2015年

Answers:


52

如果您不想在来宾内部进行任何配置,则唯一的选择是分发静态IP地址的DHCP服务器。如果使用bridge模式,则可能是某些外部DHCP服务器。查阅其手册以了解如何提供静态租赁。

但至少在前进模式nat或者route,你可以使用libvirt的内置的dnsmasqd(较新版本的的libvirtd支持的dnsmasq的“DHCP-hosts文件”选项)。方法如下:

首先,找出您要分配静态IP地址的VM的MAC地址:

virsh  dumpxml  $VM_NAME | grep 'mac address'

然后编辑网络

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

找到该<dhcp>部分,限制动态范围并为您的VM添加主机条目

<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客户端,例如ifdown eth0; ifup eth0


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

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

...并重新启动VM的DHCP客户端。

如果仍然无法解决问题,您可能需要

  • 停止libvirtd服务
  • 杀死所有仍然存在的dnsmasq进程
  • 启动libvirtd服务

注意:KVM主机无法强制具有未知OS和未知配置的VM使用特定的网络配置。但是,如果知道VM使用某种网络配置协议(例如DHCP),则可以使用该协议。这就是这篇文章的假设。

一些操作系统(例如某些Linux发行版)还允许通过内核命令行将网络配置选项传递给来宾。但这是非常特定于操作系统的,与DHCP方法相比,我认为没有优势。


谢谢,我会尝试的,如果我能以这种方式进行工作,请回报。
Beta

凉。但是您必须更改网络模式。
Nils Toedtmann 2014年

1
我之所以来到这里是因为我有类似的需求,并且我认为至少在我的用例中,我可以解释使用DHCP的优势。这种情况是不寻常的。我有一台服务器,每两周在两个网络之间来回移动。它有大约10位客人。其中一个网络具有DHCP服务器(对我来说很难控制),另一个则没有。这几乎排除了使用DHCP的可能性。我正在寻找一种更改主机IP并自动基于其更新访客IP地址的方法(我正在使用Chef进行自动化,因此一旦IP地址设置好,我就可以使用了)。
凯文·基恩

2
我可以确认所做的更改在不破坏并重新启动网络的情况下不会生效。奇怪的是,我还不得不关机,然后启动虚拟机。只需重新启动,接口就会处于损坏状态。
orodbhen '16

重新启动网络不会续订DHCP租约。为此,您必须删除/ var / lib / libvirtd / dnsmasq中的网络状态文件
orodbhen,2016年


3

dnsmasq通过简单地向进程发送-HUP信号,我就能够“看到”新添加的IP-MAC映射dnsmasq。之后,重新启动新来宾就足以为它分配正确的IP,而无需重新启动libvirtd也不需要网络本身。

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

我自己没有尝试过该脚本,因为我发现hostsfile已经更新,仅发送-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.