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

libvirt多网络接口环境下DNS更新冲突问题及配置需求求助

libvirt多网络接口环境下DNS更新冲突问题及配置需求求助

看起来你遇到的是多DHCP网络接口下,guest系统的DNS配置被不同网络的DHCP服务器反复覆盖的问题,这其实是libvirt+dnsmasq配合guest网络管理工具(比如NetworkManager、dhclient)的默认行为,但完全可以从主机端调整配置来解决,不需要修改guest。

先理清楚问题根源:你的guest有三个DHCP接口:

  • vtunnel0:由libvirt的dnsmasq提供DHCP,推送自身IP(203.0.113.2)作为DNS
  • vlocal0:同样由libvirt的dnsmasq提供DHCP,推送自身IP(10.8.17.1)作为DNS
  • 物理桥接接口:由物理网络的DHCP服务器提供DNS

guest的网络管理工具会自动从所有活跃的DHCP接口获取DNS服务器信息,并更新/etc/resolv.conf——如果多个接口的DHCP都推送了DNS,就会出现你看到的“内容反复变化”的情况。

接下来给你两种针对性的解决方案,根据你的需求(固定从vtunnel0或物理网卡获取DNS)来选:


方案1:仅保留vtunnel0推送DNS,禁用其他两个网络的DNS推送

1.1 调整vlocal0的虚拟网络配置

编辑vlocal0的网络XML配置(可以用virsh net-edit vlocal0命令直接编辑),添加以下配置来让dnsmasq停止推送DNS服务器信息:

<network>
  <name>vlocal0</name>
  <uuid>1bbbe818-cbab-443d-9637-ee3e178e2c2b</uuid>
  <bridge name='vlocal0' stp='on' delay='0'/>
  <mac address='3c:3f:8a:c5:4b:c4'/>
  <ip address='10.8.17.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.8.17.6' end='10.8.17.254'/>
      <!-- 添加这一行,推送空的DNS服务器选项,guest会忽略 -->
      <option name='dns-server' value=''/>
    </dhcp>
  </ip>
  <!-- 可选:直接禁用该网络的DNS服务功能 -->
  <dns enable='no'/>
</network>

保存后,重启vlocal0网络生效:

virsh net-destroy vlocal0 && virsh net-start vlocal0

1.2 处理物理桥接接口的DNS推送

由于物理桥接接口的DHCP来自物理网络的DHCP服务器(不是libvirt的dnsmasq),如果无法修改物理DHCP的配置,我们可以在libvirt层面让guest的这个接口不请求DNS服务器选项:
编辑guest的XML配置(virsh edit <你的guest名称>),找到物理桥接的<interface>块,添加<dhcp>子标签来指定不请求DNS:

<interface type='direct'>
  <mac address='50:00:7b:6b:bb:10'/>
  <source dev='enp4s0' mode='bridge'/>
  <model type='e1000'/>
  <address type='pci' domain='0x0000' bus='0x10' slot='0x03' function='0x0'/>
  <!-- 添加这部分配置,告诉guest的DHCP客户端不请求DNS服务器 -->
  <dhcp>
    <request option='dns-server' value='no'/>
  </dhcp>
</interface>

保存后,重启guest生效:

virsh destroy <你的guest名称> && virsh start <你的guest名称>

方案2:仅保留物理网卡的DNS推送,禁用vtunnel0和vlocal0的DNS推送

如果你的需求是用物理网络的DNS,只需要反过来调整:

  1. 对vtunnel0和vlocal0的网络配置,按照方案1.1的方法添加<option name='dns-server' value=''/>和<dns enable='no'/>
  2. 物理桥接接口的配置保持不变即可

验证配置是否生效

重启对应的网络和guest后,你可以在guest中查看/etc/resolv.conf,应该只会看到你指定的网络的DNS服务器;同时可以用virsh net-dumpxml <网络名称>检查主机端的网络配置是否正确应用,或者在主机端查看dnsmasq的日志(通常在/var/log/libvirt/dnsmasq/目录下)确认是否推送了DNS选项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 06:38:15