You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Libvirt环境下Devuan虚拟机无法绑定指定静态IP的问题求助

Libvirt环境下Devuan虚拟机无法绑定指定静态IP的问题求助

各位大佬好,我最近遇到一个特别头疼的问题:在Libvirt环境中,我的Devuan虚拟机始终没法绑定我指定的静态IP,网上搜了各种解决方案都试过了,问题还是没解决,特意来这里求助!

环境与配置情况

宿主机(Gentoo)网络配置

宿主机的虚拟网桥virbr0信息如下:

virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

ether 52:54:00:c0:12:c5  txqueuelen 1000  (Ethernet)

RX packets 22  bytes 2632 (2.5 KiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 1880  bytes 99816 (97.4 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Libvirt默认网络配置

我通过virsh net-dumpxml default导出的网络配置:

<network>
<name>default</name>
<uuid>469df392-3b72-4069-814a-10893732b627</uuid>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
<bridge name='virbr0' stp='on' delay='0'/>
<mac address='52:54:00:c0:12:c5'/>
<ip address='192.168.122.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.122.2' end='192.168.122.254'>
<lease expiry='0'/>
</range>
<host mac='52:54:00:67:37:7d' name='devuan' ip='192.168.122.190'>
<lease expiry='0'/>
</host>
</dhcp>
</ip>
</network>

问题现象

我给Devuan虚拟机指定了静态IP192.168.122.190,但只要虚拟机一启动,IP就会被“挤掉”,每次重启都会拿到不同的IP。

我已经试过这些操作,但都没用:

  • 销毁并重新启动Libvirt默认网络
  • 重启libvirtd和virtlogd服务
  • 杀死所有dnsmasq相关进程后重新启动
  • 手动编辑/var/lib/libvirt/dnsmasq/virbr0.status文件,只保留我想要的IP记录

排查过程

第一次排查(Edit 1)

按照大佬的建议,我先清理了虚拟机里的DHCP leases文件:

root@devuan:~# rm /var/lib/dhcp/* && poweroff

然后在宿主机上销毁网络并清理相关文件:

host ~ # virsh net-destroy default
host ~ # rm /var/lib/libvirt/dnsmasq/virbr0.*

重新启动网络和虚拟机后,看宿主机的dnsmasq日志发现了关键信息:

Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPOFFER(virbr0) 192.168.122.190 52:54:00:67:37:7d
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPACK(virbr0) 192.168.122.190 52:54:00:67:37:7d devuan
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: DHCPDECLINE(virbr0) 192.168.122.190 52:54:00:67:37:7d
Feb 14 22:48:03 host dnsmasq-dhcp[24023]: disabling DHCP static address 192.168.122.190 for 10m

也就是说,dnsmasq明明给虚拟机发了190的IP,结果收到了DHCPDECLINE(拒绝),于是暂时禁用了这个IP,最后虚拟机拿到了191的IP。

但奇怪的是:

  • 虚拟机上ifconfig显示的IP是190
  • 虚拟机的dhclient.eth0.leases文件里记录的却是191
  • 虚拟机的syslog里只显示拿到191的过程,完全没提到190

第二次排查(Edit 2)

我换了个思路,把静态IP放在DHCP范围外:
修改Libvirt网络配置,把DHCP范围改成192.168.122.2到192.168.122.189,静态IP还是190。结果现象和之前完全一样:dnsmasq发了190,被拒绝,最后虚拟机拿到了153的IP。

第三次排查(Edit 3)

为了排除宿主机配置的问题,我新增了两个虚拟机:Slackware和Win10,分别指定了101和102的静态IP。结果这两个虚拟机都能正常拿到指定的IP,只有Devuan还是不行!

更离谱的是:

  • Devuan的ifconfig显示的是指定的100,但我只能通过191的IP ssh进去
  • 虚拟机的syslog里显示拿到的是191,宿主机日志里还是先给100,然后被拒绝,最后发191

我的困惑

现在我几乎可以确定问题出在Devuan虚拟机本身,但实在搞不清楚到底是什么原因导致它拒绝指定的静态IP?是不是虚拟机里有什么缓存或者其他服务在干扰DHCP的过程?有没有大佬遇到过类似的问题?

备注:内容来源于stack exchange,提问作者vesperto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:34:09