我正在尝试将固定地址添加到特定虚拟主机,因此我关闭了虚拟机并使用sudo virsh net-edit somenet
。添加行后
<host mac='52:54:00:26:61:22' name='virt.example.com' ip='192.168.111.111' />
我保存并退出。然后我再次使用相同命令检查,发现之前的状态已恢复,我的更改已消失。
同时,当我查看时/etc/libvirt/qemu/networks/somenet.xml
,我的更改就被应用了。
如果我再次启动我的虚拟机,它会从 DHCP 池(192.168.111.170
)获取 IP,但不是我上面定义的地址。
当我在更改后重新启动 libvirt-service 时,情况似乎相同:配置文件中是我的更改,virsh
我看到原始状态并且虚拟机获取了错误的 IP。
这里有什么问题?
编辑。在此处添加完整的 XML。下面是我看到的配置/etc
:
<network>
<name>somenet</name>
<uuid>80d85710-23bb-1ab6-79e6-cd65c6739714</uuid>
<bridge name='virbr1' stp='on' delay='0' />
<mac address='52:54:00:90:75:1A'/>
<domain name='example.com'/>
<ip address='192.168.111.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.111.100' end='192.168.111.254' />
<host mac='52:54:00:26:61:22' name='virt.example.com' ip='192.168.111.111' />
</dhcp>
</ip>
</network>
以下是我看到的配置virsh
:
<network>
<name>somenet</name>
<uuid>80d85710-23bb-1ab6-79e6-cd65c6739714</uuid>
<bridge name='virbr1' stp='on' delay='0' />
<mac address='52:54:00:90:75:1A'/>
<ip address='192.168.111.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.111.128' end='192.168.111.254' />
</dhcp>
</ip>
</network>
答案1
每次使用virsh net-edit {{network}}
它都需要重启网络。因此,您必须执行以下命令:
virsh net-edit {{network}} virsh net-destroy {{network}} virsh net-start {{network}}
然而
值得一提的是,每次执行此操作时,重新启动网络时,当前在其 VMS 上使用该虚拟网络的任何人都会失去连接。
它不会花费超过几秒钟的时间,但根据您通过 DHCP 主机添加静态 IP 的频率,这可能会给您的用户带来不便。
所以:
我建议使用virsh net-update
。(来源) 这可用于更新网络配置,而无需重新启动网络。具体来说,您似乎正在寻找该ip-dhcp-host
功能。
例子:
virsh net-update default add ip-dhcp-host \ "<host mac='52:54:00:00:00:01' \ name='bob' ip='192.168.122.45' />" \ --live --config
希望这对你有帮助:)
答案2
对网络所做的更改将在下次启动网络时生效。您需要执行这一系列操作。
virsh net-edit somenet
virsh net-destroy somenet
virsh net-start somenet
如需确认这一点,请参阅virsh net-edit 的功能
请注意,重新启动网络将终止使用此网络的任何虚拟机的网络连接。当您再次启动网络时,它们将无法重新获得连接;您必须重新启动域或使用以下命令手动将虚拟机接口移动到新网桥 控制寄存器。
編輯:libvirt 维基百科描述了这种情况并指出了用于重新建立网络连接的脚本。
答案3
我没有找到“原因”,但我确实找到了让它工作的方法。所以,如果有人遇到同样的问题,解决方案如下:
- 转储网络配置
virsh net-dumpxml /tmp/somenet.xml
- 停止网络
virsh net-destroy somenet
- 失活网络
virsh net-undefine somenet
- 做出了必要的改变
/tmp/somenet.xml
- 再次创建网络
virsh net-create /tmp/somenet.xml
- 尝试设置网络自动启动
virsh net-autostart somenet
,但失败error: Requested operation is not valid: cannot set autostart for transient network
- 在 Thomas Schulte 的博客(在德国)
- 解决方案是再次编辑 conf 并做一些不重要的更改
virsh net-edit somenet
,我只是添加了另一个空行。 - 现在
virsh net-autostart somenet
也起作用了
最后,我的虚拟主机获得了正确的IP!
答案4
我遇到了类似的问题,虚拟机实例的网络参数几个月前就发生了变化。今天我重新启动了整个 12 台虚拟机环境,但这个实例却无法启动。底层硬件已被重新定义,因此不可能恢复旧值。使用 virsh edit 没有帮助:旧参数一直被报告并用于启动。
我发现在重启过程中,/var/lib/libvirt/qemu/save/.save 下的暂停映像仍嵌入了错误的参数。删除该文件后,虚拟机便恢复运行。
唯一的副作用是虚拟机无法恢复(其余同类虚拟机都恢复了),但必须进行完全启动,而且这个过程可能不太干净;幸运的是,这是一台小型服务器,可以承受得起。此后,它又恢复了在线状态并正常工作。