我想做的是从主机系统设置来宾的网络配置(IP地址,子网,网关,广播地址)。使用的网络设置处于bridge
模式。如何从主机配置网络,而不是将客户端本身配置为静态网络配置?
如果我执行:
virsh edit vm1
还有一个<network>
块,我尝试从那里配置网络接口,但是不幸的是,来宾VM似乎没有使用它,因此已脱机到网络(因为它仅使用自动网络配置)...来宾VM均基于Linux和Windows。任何帮助将不胜感激。
我想做的是从主机系统设置来宾的网络配置(IP地址,子网,网关,广播地址)。使用的网络设置处于bridge
模式。如何从主机配置网络,而不是将客户端本身配置为静态网络配置?
如果我执行:
virsh edit vm1
还有一个<network>
块,我尝试从那里配置网络接口,但是不幸的是,来宾VM似乎没有使用它,因此已脱机到网络(因为它仅使用自动网络配置)...来宾VM均基于Linux和Windows。任何帮助将不胜感激。
Answers:
如果您不想在来宾内部进行任何配置,则唯一的选择是分发静态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客户端。
如果仍然无法解决问题,您可能需要
注意:KVM主机无法强制具有未知OS和未知配置的VM使用特定的网络配置。但是,如果知道VM使用某种网络配置协议(例如DHCP),则可以使用该协议。这就是这篇文章的假设。
一些操作系统(例如某些Linux发行版)还允许通过内核命令行将网络配置选项传递给来宾。但这是非常特定于操作系统的,与DHCP方法相比,我认为没有优势。
virsh net-update
对您来说是个好命令(您无需重新启动/销毁网络等),
请参阅:https :
//www.redhat.com/archives/libvir-list/2012-September/msg01380.html
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,软件包版本为: