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

Ubuntu 16.04主机配置KVM(libvirt)路由网络及VM可达性问题

我来帮你搞定这个KVM虚拟机接入现有集群子网的问题,结合你的Ubuntu 16.04环境和Debian防火墙的配置,给你两个可行的方案,你可以根据实际情况选择:

核心需求梳理

你要实现的是:让KVM客户机直接使用防火墙承载的10.4.0.0/16集群子网,同时保证VM的IP能被集群内设备访问,且能利用防火墙已有的NAT能力处理外部流量。

方案一:桥接网络(推荐,最直接的二层接入)

这种方式会让VM和Hypervisor处于同一个二层网络,VM可以直接获取10.4.0.0/16网段的IP,和集群内其他设备完全打通。

步骤1:在Hypervisor上创建桥接接口

Ubuntu 16.04用的是ifupdown管理网络,编辑/etc/network/interfaces:

sudo nano /etc/network/interfaces

把原来的物理网卡配置改成桥接成员,新增桥接接口br0(假设物理网卡是eth0):

auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
    address 10.4.20.250
    netmask 255.255.0.0
    gateway 10.4.0.1  # 这里填你的防火墙网关IP
    bridge_ports eth0
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

保存后重启网络生效:

sudo systemctl restart networking

步骤2:替换Virsh默认网络为桥接模式

先清理原来的default网络:

virsh net-destroy default
virsh net-undefine default

创建桥接网络的XML配置文件(比如br0.xml):

<network>
  <name>br0</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

定义并启动这个桥接网络:

virsh net-define br0.xml
virsh net-start br0
virsh net-autostart br0

步骤3:配置VM使用桥接网络

编辑目标VM的配置:

virsh edit <你的VM名称>

找到<interface>部分,替换成桥接模式:

<interface type='bridge'>
  <source bridge='br0'/>
  <model type='virtio'/>  # 用virtio网卡提升性能
</interface>

启动VM后,给VM配置10.4.0.0/16网段的静态IP(或者如果防火墙有DHCP服务,VM会自动获取)。以Ubuntu VM为例,编辑/etc/network/interfaces:

auto ens3
iface ens3 inet static
    address 10.4.20.xxx  # 选集群内未占用的IP
    netmask 255.255.0.0
    gateway 10.4.0.1
    dns-nameservers 8.8.8.8  # 或者集群内部的DNS服务器
方案二:路由模式(无法修改物理网卡桥接时使用)

如果Hypervisor的物理网卡不能改成桥接(比如有其他服务依赖),可以用路由模式,让Hypervisor作为VM的网关,把VM流量转发到防火墙。

步骤1:启用Hypervisor的IP转发

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

步骤2:创建自定义路由网络

从10.4.0.0/16里划分一个子网段(比如10.4.21.0/24,和Hypervisor的10.4.20.250区分),创建XML配置文件routed-net.xml:

<network>
  <name>routed-net</name>
  <forward mode='route'/>
  <ip address='10.4.21.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.4.21.10' end='10.4.21.50'/>
    </dhcp>
  </ip>
</network>

定义并启动网络:

virsh net-define routed-net.xml
virsh net-start routed-net
virsh net-autostart routed-net

步骤3:在防火墙上添加路由规则

告诉防火墙,10.4.21.0/24网段的流量要转发到Hypervisor:

ip route add 10.4.21.0/24 via 10.4.20.250 dev <防火墙的内网接口>

要永久保存的话,把这条命令加到Debian防火墙的/etc/rc.local或者网络配置文件里。

步骤4:配置VM使用路由网络

编辑VM配置,把网卡改成使用routed-net网络,启动后VM会自动获取10.4.21.x的IP,集群内设备就能通过防火墙的路由规则访问VM了。

验证方法
  • 在VM里ping防火墙网关10.4.0.1,能通则内部路由正常
  • 在集群其他设备上ping VM的IP,能通则可达性正常
  • 测试VM对外访问,能正常上网说明NAT生效

内容的提问来源于stack exchange,提问作者Paul O

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:08:38